From 0fbb4cc65b79b23b6c262497cf4a7af4aea12ea4 Mon Sep 17 00:00:00 2001 From: Tim Muehle Date: Mon, 24 Aug 2020 20:56:01 +0200 Subject: [PATCH] Release 0.1.4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Die Umwandlung der Zahlensysteme ist fertiggestellt. Hinzugekommen ist eine Menüleiste mit zahlreichen Einstellungsmöglichkeiten und der erste Entwurf der Oberfläche für die IEEE-Norm. --- .gitignore | 1 - README.md | 2 +- build_doc.bat | 24 - build_installer_mac.command | 2 +- build_installer_win.bat | 2 +- build_mvn_and_installer_linux.sh | 2 +- build_mvn_and_installer_linux_rpm.sh | 2 +- build_mvn_and_installer_mac.command | 2 +- build_mvn_and_installer_win.bat | 2 +- doc/0.1.4/de_private/allclasses-index.html | 398 + doc/0.1.4/de_private/allclasses.html | 69 + doc/0.1.4/de_private/allpackages-index.html | 205 + .../bitchanger/BitchangerLauncherApp.html | 327 + .../bitchanger/calculations/Calculable.html | 191 + .../calculations/ChangeableNumber.html | 565 + .../calculations/ConvertingNumbers.html | 1058 ++ .../calculations/SimpleChangeableNumber.html | 817 ++ .../calculations/class-use/Calculable.html | 149 + .../class-use/ChangeableNumber.html | 227 + .../class-use/ConvertingNumbers.html | 149 + .../class-use/SimpleChangeableNumber.html | 149 + .../calculations/package-summary.html | 202 + .../bitchanger/calculations/package-tree.html | 172 + .../bitchanger/calculations/package-use.html | 215 + .../class-use/BitchangerLauncherApp.html | 149 + .../bitchanger/components/Calculable.html | 191 + .../components/ChangeableNumber.html | 537 + .../components/ConvertingNumbers.html | 925 ++ .../components/SimpleChangeableNumber.html | 805 ++ .../components/class-use/Calculable.html | 149 + .../class-use/ChangeableNumber.html | 221 + .../class-use/ConvertingNumbers.html | 149 + .../class-use/SimpleChangeableNumber.html | 149 + .../components/package-summary.html | 197 + .../bitchanger/components/package-tree.html | 172 + .../bitchanger/components/package-use.html | 211 + .../bitchanger/gui/Hauptfenster.html | 526 + .../gui/class-use/Hauptfenster.html | 149 + .../controller/AlphaNumGridController.html | 755 + .../controller/AlphaNumKeysController.html | 933 ++ .../gui/controller/BasicMenuController.html | 691 + .../gui/controller/Controllable.html | 429 + .../controller/ControllableApplication.html | 338 + .../bitchanger/gui/controller/Controller.html | 442 + .../gui/controller/ControllerBase.html | 574 + .../gui/controller/ConverterController.html | 1036 ++ .../controller/ConverterMenuController.html | 437 + .../gui/controller/IEEEController.html | 371 + .../gui/controller/IEEEMenuController.html | 334 + .../class-use/AlphaNumGridController.html | 149 + .../class-use/AlphaNumKeysController.html | 149 + .../class-use/BasicMenuController.html | 200 + .../controller/class-use/Controllable.html | 392 + .../class-use/ControllableApplication.html | 314 + .../gui/controller/class-use/Controller.html | 358 + .../controller/class-use/ControllerBase.html | 225 + .../class-use/ConverterController.html | 149 + .../class-use/ConverterMenuController.html | 149 + .../controller/class-use/IEEEController.html | 149 + .../class-use/IEEEMenuController.html | 149 + .../gui/controller/package-summary.html | 232 + .../gui/controller/package-tree.html | 184 + .../gui/controller/package-use.html | 309 + .../bitchanger/gui/controls/AlphaNumGrid.html | 788 ++ .../bitchanger/gui/controls/AlphaNumKeys.html | 1054 ++ .../bitchanger/gui/controls/BaseSpinner.html | 459 + .../bitchanger/gui/controls/BasicMenuBar.html | 994 ++ .../gui/controls/ConverterMenuBar.html | 485 + .../bitchanger/gui/controls/FXUtils.html | 454 + .../InformationDialog.InformationType.html | 438 + .../gui/controls/InformationDialog.html | 392 + .../bitchanger/gui/controls/SVGIcon.html | 443 + .../bitchanger/gui/controls/TriConsumer.html | 282 + .../gui/controls/UnfocusedButton.html | 611 + .../bitchanger/gui/controls/ValueButton.html | 628 + .../bitchanger/gui/controls/ValueField.html | 750 + .../gui/controls/class-use/AlphaNumGrid.html | 221 + .../gui/controls/class-use/AlphaNumKeys.html | 226 + .../gui/controls/class-use/BaseSpinner.html | 197 + .../gui/controls/class-use/BasicMenuBar.html | 274 + .../controls/class-use/ConverterMenuBar.html | 149 + .../gui/controls/class-use/FXUtils.html | 149 + .../InformationDialog.InformationType.html | 218 + .../controls/class-use/InformationDialog.html | 149 + .../gui/controls/class-use/SVGIcon.html | 283 + .../gui/controls/class-use/TriConsumer.html | 202 + .../controls/class-use/UnfocusedButton.html | 197 + .../gui/controls/class-use/ValueButton.html | 149 + .../gui/controls/class-use/ValueField.html | 232 + .../gui/controls/package-summary.html | 231 + .../bitchanger/gui/controls/package-tree.html | 252 + .../bitchanger/gui/controls/package-use.html | 299 + .../bitchanger/gui/package-summary.html | 155 + .../bitchanger/gui/package-tree.html | 152 + .../bitchanger/gui/package-use.html | 149 + .../AlphaNumGridView.ConstraintType.html | 488 + .../gui/views/AlphaNumGridView.html | 1696 +++ .../bitchanger/gui/views/CalculatorView.html | 352 + .../bitchanger/gui/views/Controllable.html | 328 + .../bitchanger/gui/views/ConverterView.html | 735 + .../bitchanger/gui/views/IEEEView.html | 490 + .../bitchanger/gui/views/ViewBase.html | 751 + .../bitchanger/gui/views/Viewable.html | 453 + .../AlphaNumGridView.ConstraintType.html | 231 + .../gui/views/class-use/AlphaNumGridView.html | 209 + .../gui/views/class-use/CalculatorView.html | 149 + .../gui/views/class-use/Controllable.html | 259 + .../gui/views/class-use/ConverterView.html | 196 + .../gui/views/class-use/IEEEView.html | 199 + .../gui/views/class-use/ViewBase.html | 217 + .../gui/views/class-use/Viewable.html | 405 + .../bitchanger/gui/views/package-summary.html | 232 + .../bitchanger/gui/views/package-tree.html | 198 + .../bitchanger/gui/views/package-use.html | 270 + .../bitchanger/main/BitchangerLauncher.html | 327 + .../bitchanger/main/PrimaryFXApp.html | 760 + .../main/class-use/BitchangerLauncher.html | 149 + .../main/class-use/PrimaryFXApp.html | 149 + .../bitchanger/main/package-summary.html | 180 + .../bitchanger/main/package-tree.html | 169 + .../bitchanger/main/package-use.html | 149 + .../bitchanger/package-summary.html | 165 + .../de_private/bitchanger/package-tree.html | 152 + .../de_private/bitchanger/package-use.html | 149 + .../bitchanger/preferences/Comma.html | 516 + .../bitchanger/preferences/Preferences.html | 750 + .../bitchanger/preferences/Style.html | 452 + .../preferences/class-use/Comma.html | 254 + .../preferences/class-use/Preferences.html | 214 + .../preferences/class-use/Style.html | 279 + .../preferences/package-summary.html | 200 + .../bitchanger/preferences/package-tree.html | 179 + .../bitchanger/preferences/package-use.html | 251 + .../bitchanger/util/ArrayUtils.html | 335 + .../de_private/bitchanger/util/FXUtils.html | 547 + .../bitchanger/util/IconFactory.html | 379 + .../de_private/bitchanger/util/Resources.html | 2340 ++++ .../bitchanger/util/TriConsumer.html | 282 + .../bitchanger/util/class-use/ArrayUtils.html | 149 + .../bitchanger/util/class-use/FXUtils.html | 149 + .../util/class-use/IconFactory.html | 149 + .../bitchanger/util/class-use/Resources.html | 149 + .../util/class-use/TriConsumer.html | 202 + .../bitchanger/util/package-summary.html | 209 + .../bitchanger/util/package-tree.html | 173 + .../bitchanger/util/package-use.html | 188 + doc/0.1.4/de_private/constant-values.html | 655 + doc/0.1.4/de_private/deprecated-list.html | 149 + doc/0.1.4/de_private/element-list | 7 + doc/0.1.4/de_private/help-doc.html | 281 + doc/0.1.4/de_private/index-files/index-1.html | 357 + .../de_private/index-files/index-10.html | 204 + .../de_private/index-files/index-11.html | 227 + .../de_private/index-files/index-12.html | 236 + .../de_private/index-files/index-13.html | 188 + .../de_private/index-files/index-14.html | 187 + .../de_private/index-files/index-15.html | 258 + .../de_private/index-files/index-16.html | 172 + .../de_private/index-files/index-17.html | 197 + .../de_private/index-files/index-18.html | 567 + .../de_private/index-files/index-19.html | 343 + doc/0.1.4/de_private/index-files/index-2.html | 326 + .../de_private/index-files/index-20.html | 183 + .../de_private/index-files/index-21.html | 285 + .../de_private/index-files/index-22.html | 172 + .../de_private/index-files/index-23.html | 200 + .../de_private/index-files/index-24.html | 180 + doc/0.1.4/de_private/index-files/index-3.html | 443 + doc/0.1.4/de_private/index-files/index-4.html | 191 + doc/0.1.4/de_private/index-files/index-5.html | 183 + doc/0.1.4/de_private/index-files/index-6.html | 215 + doc/0.1.4/de_private/index-files/index-7.html | 320 + doc/0.1.4/de_private/index-files/index-8.html | 189 + doc/0.1.4/de_private/index-files/index-9.html | 318 + doc/0.1.4/de_private/index.html | 198 + .../jquery/external/jquery/jquery.js | 10364 ++++++++++++++ .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 212 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 208 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 335 bytes .../images/ui-bg_glass_65_dadada_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 207 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 332 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 280 bytes .../jquery/images/ui-icons_222222_256x240.png | Bin 0 -> 6922 bytes .../jquery/images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4549 bytes .../jquery/images/ui-icons_454545_256x240.png | Bin 0 -> 6992 bytes .../jquery/images/ui-icons_888888_256x240.png | Bin 0 -> 6999 bytes .../jquery/images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4549 bytes doc/0.1.4/de_private/jquery/jquery-3.3.1.js | 10364 ++++++++++++++ .../de_private/jquery/jquery-migrate-3.0.1.js | 628 + doc/0.1.4/de_private/jquery/jquery-ui.css | 544 + doc/0.1.4/de_private/jquery/jquery-ui.js | 2610 ++++ doc/0.1.4/de_private/jquery/jquery-ui.min.css | 7 + doc/0.1.4/de_private/jquery/jquery-ui.min.js | 7 + .../de_private/jquery/jquery-ui.structure.css | 152 + .../jquery/jquery-ui.structure.min.css | 5 + .../jquery/jszip-utils/dist/jszip-utils-ie.js | 56 + .../jszip-utils/dist/jszip-utils-ie.min.js | 10 + .../jquery/jszip-utils/dist/jszip-utils.js | 118 + .../jszip-utils/dist/jszip-utils.min.js | 10 + .../de_private/jquery/jszip/dist/jszip.js | 11623 ++++++++++++++++ .../de_private/jquery/jszip/dist/jszip.min.js | 15 + doc/0.1.4/de_private/member-search-index.js | 1 + doc/0.1.4/de_private/member-search-index.zip | Bin 0 -> 6047 bytes doc/0.1.4/de_private/overview-summary.html | 23 + doc/0.1.4/de_private/overview-tree.html | 313 + doc/0.1.4/de_private/package-search-index.js | 1 + doc/0.1.4/de_private/package-search-index.zip | Bin 0 -> 282 bytes doc/0.1.4/de_private/resources/glass.png | Bin 0 -> 499 bytes doc/0.1.4/de_private/resources/x.png | Bin 0 -> 394 bytes doc/0.1.4/de_private/script.js | 139 + doc/0.1.4/de_private/search.js | 329 + doc/0.1.4/de_private/stylesheet.css | 906 ++ doc/0.1.4/de_private/type-search-index.js | 1 + doc/0.1.4/de_private/type-search-index.zip | Bin 0 -> 592 bytes doc/0.1.4/de_public/allclasses-index.html | 398 + doc/0.1.4/de_public/allclasses.html | 69 + doc/0.1.4/de_public/allpackages-index.html | 205 + .../bitchanger/BitchangerLauncherApp.html | 327 + .../bitchanger/calculations/Calculable.html | 191 + .../calculations/ChangeableNumber.html | 565 + .../calculations/ConvertingNumbers.html | 708 + .../calculations/SimpleChangeableNumber.html | 692 + .../calculations/class-use/Calculable.html | 149 + .../class-use/ChangeableNumber.html | 197 + .../class-use/ConvertingNumbers.html | 149 + .../class-use/SimpleChangeableNumber.html | 149 + .../calculations/package-summary.html | 202 + .../bitchanger/calculations/package-tree.html | 172 + .../bitchanger/calculations/package-use.html | 189 + .../class-use/BitchangerLauncherApp.html | 149 + .../bitchanger/components/Calculable.html | 191 + .../components/ChangeableNumber.html | 537 + .../components/ConvertingNumbers.html | 625 + .../components/SimpleChangeableNumber.html | 680 + .../components/class-use/Calculable.html | 149 + .../class-use/ChangeableNumber.html | 195 + .../class-use/ConvertingNumbers.html | 149 + .../class-use/SimpleChangeableNumber.html | 149 + .../components/package-summary.html | 197 + .../bitchanger/components/package-tree.html | 172 + .../bitchanger/components/package-use.html | 187 + .../bitchanger/gui/Hauptfenster.html | 421 + .../gui/class-use/Hauptfenster.html | 149 + .../controller/AlphaNumGridController.html | 372 + .../controller/AlphaNumKeysController.html | 407 + .../gui/controller/BasicMenuController.html | 563 + .../gui/controller/Controllable.html | 429 + .../controller/ControllableApplication.html | 338 + .../bitchanger/gui/controller/Controller.html | 424 + .../gui/controller/ControllerBase.html | 574 + .../gui/controller/ConverterController.html | 391 + .../controller/ConverterMenuController.html | 423 + .../gui/controller/IEEEController.html | 371 + .../gui/controller/IEEEMenuController.html | 334 + .../class-use/AlphaNumGridController.html | 149 + .../class-use/AlphaNumKeysController.html | 149 + .../class-use/BasicMenuController.html | 200 + .../controller/class-use/Controllable.html | 392 + .../class-use/ControllableApplication.html | 299 + .../gui/controller/class-use/Controller.html | 304 + .../controller/class-use/ControllerBase.html | 225 + .../class-use/ConverterController.html | 149 + .../class-use/ConverterMenuController.html | 149 + .../controller/class-use/IEEEController.html | 149 + .../class-use/IEEEMenuController.html | 149 + .../gui/controller/package-summary.html | 232 + .../gui/controller/package-tree.html | 184 + .../gui/controller/package-use.html | 303 + .../bitchanger/gui/controls/AlphaNumGrid.html | 582 + .../bitchanger/gui/controls/AlphaNumKeys.html | 760 + .../bitchanger/gui/controls/BaseSpinner.html | 393 + .../bitchanger/gui/controls/BasicMenuBar.html | 872 ++ .../gui/controls/ConverterMenuBar.html | 447 + .../InformationDialog.InformationType.html | 396 + .../gui/controls/InformationDialog.html | 340 + .../bitchanger/gui/controls/SVGIcon.html | 411 + .../gui/controls/UnfocusedButton.html | 534 + .../bitchanger/gui/controls/ValueButton.html | 531 + .../bitchanger/gui/controls/ValueField.html | 599 + .../gui/controls/class-use/AlphaNumGrid.html | 193 + .../gui/controls/class-use/AlphaNumKeys.html | 226 + .../gui/controls/class-use/BaseSpinner.html | 149 + .../gui/controls/class-use/BasicMenuBar.html | 274 + .../controls/class-use/ConverterMenuBar.html | 149 + .../InformationDialog.InformationType.html | 218 + .../controls/class-use/InformationDialog.html | 149 + .../gui/controls/class-use/SVGIcon.html | 240 + .../controls/class-use/UnfocusedButton.html | 197 + .../gui/controls/class-use/ValueButton.html | 149 + .../gui/controls/class-use/ValueField.html | 149 + .../gui/controls/package-summary.html | 231 + .../bitchanger/gui/controls/package-tree.html | 252 + .../bitchanger/gui/controls/package-use.html | 283 + .../bitchanger/gui/package-summary.html | 155 + .../bitchanger/gui/package-tree.html | 152 + .../de_public/bitchanger/gui/package-use.html | 149 + .../AlphaNumGridView.ConstraintType.html | 446 + .../gui/views/AlphaNumGridView.html | 1486 ++ .../bitchanger/gui/views/CalculatorView.html | 352 + .../bitchanger/gui/views/Controllable.html | 328 + .../bitchanger/gui/views/ConverterView.html | 699 + .../bitchanger/gui/views/IEEEView.html | 431 + .../bitchanger/gui/views/ViewBase.html | 694 + .../bitchanger/gui/views/Viewable.html | 453 + .../AlphaNumGridView.ConstraintType.html | 231 + .../gui/views/class-use/AlphaNumGridView.html | 209 + .../gui/views/class-use/CalculatorView.html | 149 + .../gui/views/class-use/Controllable.html | 259 + .../gui/views/class-use/ConverterView.html | 196 + .../gui/views/class-use/IEEEView.html | 199 + .../gui/views/class-use/ViewBase.html | 217 + .../gui/views/class-use/Viewable.html | 353 + .../bitchanger/gui/views/package-summary.html | 232 + .../bitchanger/gui/views/package-tree.html | 198 + .../bitchanger/gui/views/package-use.html | 270 + .../bitchanger/main/BitchangerLauncher.html | 327 + .../bitchanger/main/PrimaryFXApp.html | 626 + .../main/class-use/BitchangerLauncher.html | 149 + .../main/class-use/PrimaryFXApp.html | 149 + .../bitchanger/main/package-summary.html | 180 + .../bitchanger/main/package-tree.html | 169 + .../bitchanger/main/package-use.html | 149 + .../de_public/bitchanger/package-summary.html | 165 + .../de_public/bitchanger/package-tree.html | 152 + .../de_public/bitchanger/package-use.html | 149 + .../bitchanger/preferences/Comma.html | 422 + .../bitchanger/preferences/Preferences.html | 557 + .../bitchanger/preferences/Style.html | 410 + .../preferences/class-use/Comma.html | 222 + .../preferences/class-use/Preferences.html | 197 + .../preferences/class-use/Style.html | 239 + .../preferences/package-summary.html | 200 + .../bitchanger/preferences/package-tree.html | 179 + .../bitchanger/preferences/package-use.html | 201 + .../de_public/bitchanger/util/ArrayUtils.html | 290 + .../de_public/bitchanger/util/FXUtils.html | 502 + .../bitchanger/util/IconFactory.html | 304 + .../de_public/bitchanger/util/Resources.html | 2295 +++ .../bitchanger/util/TriConsumer.html | 282 + .../bitchanger/util/class-use/ArrayUtils.html | 149 + .../bitchanger/util/class-use/FXUtils.html | 149 + .../util/class-use/IconFactory.html | 149 + .../bitchanger/util/class-use/Resources.html | 149 + .../util/class-use/TriConsumer.html | 202 + .../bitchanger/util/package-summary.html | 209 + .../bitchanger/util/package-tree.html | 173 + .../bitchanger/util/package-use.html | 188 + doc/0.1.4/de_public/constant-values.html | 641 + doc/0.1.4/de_public/deprecated-list.html | 149 + doc/0.1.4/de_public/element-list | 7 + doc/0.1.4/de_public/help-doc.html | 281 + doc/0.1.4/de_public/index-files/index-1.html | 316 + doc/0.1.4/de_public/index-files/index-10.html | 192 + doc/0.1.4/de_public/index-files/index-11.html | 209 + doc/0.1.4/de_public/index-files/index-12.html | 236 + doc/0.1.4/de_public/index-files/index-13.html | 175 + doc/0.1.4/de_public/index-files/index-14.html | 172 + doc/0.1.4/de_public/index-files/index-15.html | 233 + doc/0.1.4/de_public/index-files/index-16.html | 172 + doc/0.1.4/de_public/index-files/index-17.html | 191 + doc/0.1.4/de_public/index-files/index-18.html | 377 + doc/0.1.4/de_public/index-files/index-19.html | 305 + doc/0.1.4/de_public/index-files/index-2.html | 269 + doc/0.1.4/de_public/index-files/index-20.html | 179 + doc/0.1.4/de_public/index-files/index-21.html | 277 + doc/0.1.4/de_public/index-files/index-22.html | 172 + doc/0.1.4/de_public/index-files/index-23.html | 200 + doc/0.1.4/de_public/index-files/index-24.html | 176 + doc/0.1.4/de_public/index-files/index-3.html | 316 + doc/0.1.4/de_public/index-files/index-4.html | 183 + doc/0.1.4/de_public/index-files/index-5.html | 183 + doc/0.1.4/de_public/index-files/index-6.html | 188 + doc/0.1.4/de_public/index-files/index-7.html | 310 + doc/0.1.4/de_public/index-files/index-8.html | 174 + doc/0.1.4/de_public/index-files/index-9.html | 275 + doc/0.1.4/de_public/index.html | 198 + .../jquery/external/jquery/jquery.js | 10364 ++++++++++++++ .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 212 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 208 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 335 bytes .../images/ui-bg_glass_65_dadada_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 207 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 332 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 280 bytes .../jquery/images/ui-icons_222222_256x240.png | Bin 0 -> 6922 bytes .../jquery/images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4549 bytes .../jquery/images/ui-icons_454545_256x240.png | Bin 0 -> 6992 bytes .../jquery/images/ui-icons_888888_256x240.png | Bin 0 -> 6999 bytes .../jquery/images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4549 bytes doc/0.1.4/de_public/jquery/jquery-3.3.1.js | 10364 ++++++++++++++ .../de_public/jquery/jquery-migrate-3.0.1.js | 628 + doc/0.1.4/de_public/jquery/jquery-ui.css | 544 + doc/0.1.4/de_public/jquery/jquery-ui.js | 2610 ++++ doc/0.1.4/de_public/jquery/jquery-ui.min.css | 7 + doc/0.1.4/de_public/jquery/jquery-ui.min.js | 7 + .../de_public/jquery/jquery-ui.structure.css | 152 + .../jquery/jquery-ui.structure.min.css | 5 + .../jquery/jszip-utils/dist/jszip-utils-ie.js | 56 + .../jszip-utils/dist/jszip-utils-ie.min.js | 10 + .../jquery/jszip-utils/dist/jszip-utils.js | 118 + .../jszip-utils/dist/jszip-utils.min.js | 10 + .../de_public/jquery/jszip/dist/jszip.js | 11623 ++++++++++++++++ .../de_public/jquery/jszip/dist/jszip.min.js | 15 + doc/0.1.4/de_public/member-search-index.js | 1 + doc/0.1.4/de_public/member-search-index.zip | Bin 0 -> 4364 bytes doc/0.1.4/de_public/overview-summary.html | 23 + doc/0.1.4/de_public/overview-tree.html | 313 + doc/0.1.4/de_public/package-search-index.js | 1 + doc/0.1.4/de_public/package-search-index.zip | Bin 0 -> 282 bytes doc/0.1.4/de_public/resources/glass.png | Bin 0 -> 499 bytes doc/0.1.4/de_public/resources/x.png | Bin 0 -> 394 bytes doc/0.1.4/de_public/script.js | 139 + doc/0.1.4/de_public/search.js | 329 + doc/0.1.4/de_public/stylesheet.css | 906 ++ doc/0.1.4/de_public/type-search-index.js | 1 + doc/0.1.4/de_public/type-search-index.zip | Bin 0 -> 592 bytes doc/0.1.4/en_private/allclasses-index.html | 374 + doc/0.1.4/en_private/allclasses.html | 69 + doc/0.1.4/en_private/allpackages-index.html | 205 + .../bitchanger/BitchangerLauncherApp.html | 327 + .../bitchanger/calculations/Calculable.html | 191 + .../calculations/ChangeableNumber.html | 564 + .../calculations/ConvertingNumbers.html | 1056 ++ .../calculations/SimpleChangeableNumber.html | 817 ++ .../calculations/class-use/Calculable.html | 149 + .../class-use/ChangeableNumber.html | 227 + .../class-use/ConvertingNumbers.html | 149 + .../class-use/SimpleChangeableNumber.html | 149 + .../calculations/package-summary.html | 201 + .../bitchanger/calculations/package-tree.html | 172 + .../bitchanger/calculations/package-use.html | 213 + .../class-use/BitchangerLauncherApp.html | 149 + .../bitchanger/components/Calculable.html | 191 + .../components/ChangeableNumber.html | 447 + .../components/ConvertingNumbers.html | 926 ++ .../components/SimpleChangeableNumber.html | 672 + .../components/class-use/Calculable.html | 149 + .../class-use/ChangeableNumber.html | 219 + .../class-use/ConvertingNumbers.html | 149 + .../class-use/SimpleChangeableNumber.html | 149 + .../components/package-summary.html | 192 + .../bitchanger/components/package-tree.html | 172 + .../bitchanger/components/package-use.html | 205 + .../bitchanger/gui/Hauptfenster.html | 528 + .../gui/class-use/Hauptfenster.html | 149 + .../controller/AlphaNumGridController.html | 647 + .../controller/AlphaNumKeysController.html | 926 ++ .../gui/controller/BasicMenuController.html | 687 + .../gui/controller/Controllable.html | 423 + .../controller/ControllableApplication.html | 332 + .../bitchanger/gui/controller/Controller.html | 439 + .../gui/controller/ControllerBase.html | 474 + .../gui/controller/ConverterController.html | 1027 ++ .../controller/ConverterMenuController.html | 433 + .../gui/controller/IEEEController.html | 367 + .../gui/controller/IEEEMenuController.html | 334 + .../class-use/AlphaNumGridController.html | 149 + .../class-use/AlphaNumKeysController.html | 149 + .../class-use/BasicMenuController.html | 200 + .../controller/class-use/Controllable.html | 376 + .../class-use/ControllableApplication.html | 314 + .../gui/controller/class-use/Controller.html | 352 + .../controller/class-use/ControllerBase.html | 225 + .../class-use/ConverterController.html | 149 + .../class-use/ConverterMenuController.html | 149 + .../controller/class-use/IEEEController.html | 149 + .../class-use/IEEEMenuController.html | 149 + .../gui/controller/package-summary.html | 230 + .../gui/controller/package-tree.html | 184 + .../gui/controller/package-use.html | 307 + .../bitchanger/gui/controls/AlphaNumGrid.html | 780 ++ .../bitchanger/gui/controls/AlphaNumKeys.html | 873 ++ .../bitchanger/gui/controls/BaseSpinner.html | 455 + .../bitchanger/gui/controls/BasicMenuBar.html | 992 ++ .../gui/controls/ConverterMenuBar.html | 485 + .../InformationDialog.InformationType.html | 438 + .../gui/controls/InformationDialog.html | 392 + .../bitchanger/gui/controls/SVGIcon.html | 443 + .../gui/controls/UnfocusedButton.html | 611 + .../bitchanger/gui/controls/ValueButton.html | 628 + .../bitchanger/gui/controls/ValueField.html | 744 + .../gui/controls/class-use/AlphaNumGrid.html | 217 + .../gui/controls/class-use/AlphaNumKeys.html | 224 + .../gui/controls/class-use/BaseSpinner.html | 197 + .../gui/controls/class-use/BasicMenuBar.html | 274 + .../controls/class-use/ConverterMenuBar.html | 149 + .../InformationDialog.InformationType.html | 218 + .../controls/class-use/InformationDialog.html | 149 + .../gui/controls/class-use/SVGIcon.html | 278 + .../controls/class-use/UnfocusedButton.html | 197 + .../gui/controls/class-use/ValueButton.html | 149 + .../gui/controls/class-use/ValueField.html | 232 + .../gui/controls/package-summary.html | 229 + .../bitchanger/gui/controls/package-tree.html | 252 + .../bitchanger/gui/controls/package-use.html | 295 + .../bitchanger/gui/package-summary.html | 148 + .../bitchanger/gui/package-tree.html | 152 + .../bitchanger/gui/package-use.html | 149 + .../AlphaNumGridView.ConstraintType.html | 464 + .../gui/views/AlphaNumGridView.html | 1347 ++ .../bitchanger/gui/views/CalculatorView.html | 352 + .../bitchanger/gui/views/Controllable.html | 283 + .../bitchanger/gui/views/ConverterView.html | 666 + .../bitchanger/gui/views/IEEEView.html | 456 + .../bitchanger/gui/views/ViewBase.html | 641 + .../bitchanger/gui/views/Viewable.html | 452 + .../AlphaNumGridView.ConstraintType.html | 227 + .../gui/views/class-use/AlphaNumGridView.html | 205 + .../gui/views/class-use/CalculatorView.html | 149 + .../gui/views/class-use/Controllable.html | 256 + .../gui/views/class-use/ConverterView.html | 196 + .../gui/views/class-use/IEEEView.html | 199 + .../gui/views/class-use/ViewBase.html | 210 + .../gui/views/class-use/Viewable.html | 395 + .../bitchanger/gui/views/package-summary.html | 220 + .../bitchanger/gui/views/package-tree.html | 198 + .../bitchanger/gui/views/package-use.html | 258 + .../bitchanger/main/BitchangerLauncher.html | 327 + .../bitchanger/main/PrimaryFXApp.html | 742 + .../main/class-use/BitchangerLauncher.html | 149 + .../main/class-use/PrimaryFXApp.html | 149 + .../bitchanger/main/package-summary.html | 180 + .../bitchanger/main/package-tree.html | 169 + .../bitchanger/main/package-use.html | 149 + .../bitchanger/package-summary.html | 148 + .../en_private/bitchanger/package-tree.html | 152 + .../en_private/bitchanger/package-use.html | 149 + .../bitchanger/preferences/Comma.html | 516 + .../bitchanger/preferences/Preferences.html | 727 + .../bitchanger/preferences/Style.html | 452 + .../preferences/class-use/Comma.html | 253 + .../preferences/class-use/Preferences.html | 214 + .../preferences/class-use/Style.html | 275 + .../preferences/package-summary.html | 199 + .../bitchanger/preferences/package-tree.html | 179 + .../bitchanger/preferences/package-use.html | 250 + .../bitchanger/util/ArrayUtils.html | 326 + .../en_private/bitchanger/util/FXUtils.html | 547 + .../bitchanger/util/IconFactory.html | 348 + .../en_private/bitchanger/util/Resources.html | 1964 +++ .../bitchanger/util/TriConsumer.html | 282 + .../bitchanger/util/class-use/ArrayUtils.html | 149 + .../bitchanger/util/class-use/FXUtils.html | 149 + .../util/class-use/IconFactory.html | 149 + .../bitchanger/util/class-use/Resources.html | 149 + .../util/class-use/TriConsumer.html | 202 + .../bitchanger/util/package-summary.html | 203 + .../bitchanger/util/package-tree.html | 173 + .../bitchanger/util/package-use.html | 188 + doc/0.1.4/en_private/constant-values.html | 655 + doc/0.1.4/en_private/deprecated-list.html | 149 + doc/0.1.4/en_private/element-list | 7 + doc/0.1.4/en_private/help-doc.html | 281 + doc/0.1.4/en_private/index-files/index-1.html | 276 + .../en_private/index-files/index-10.html | 182 + .../en_private/index-files/index-11.html | 205 + .../en_private/index-files/index-12.html | 214 + .../en_private/index-files/index-13.html | 172 + .../en_private/index-files/index-14.html | 186 + .../en_private/index-files/index-15.html | 221 + .../en_private/index-files/index-16.html | 162 + .../en_private/index-files/index-17.html | 191 + .../en_private/index-files/index-18.html | 528 + .../en_private/index-files/index-19.html | 283 + doc/0.1.4/en_private/index-files/index-2.html | 287 + .../en_private/index-files/index-20.html | 178 + .../en_private/index-files/index-21.html | 274 + .../en_private/index-files/index-22.html | 162 + .../en_private/index-files/index-23.html | 176 + .../en_private/index-files/index-24.html | 168 + doc/0.1.4/en_private/index-files/index-3.html | 370 + doc/0.1.4/en_private/index-files/index-4.html | 187 + doc/0.1.4/en_private/index-files/index-5.html | 172 + doc/0.1.4/en_private/index-files/index-6.html | 196 + doc/0.1.4/en_private/index-files/index-7.html | 307 + doc/0.1.4/en_private/index-files/index-8.html | 186 + doc/0.1.4/en_private/index-files/index-9.html | 266 + doc/0.1.4/en_private/index.html | 198 + .../jquery/external/jquery/jquery.js | 10364 ++++++++++++++ .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 212 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 208 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 335 bytes .../images/ui-bg_glass_65_dadada_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 207 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 332 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 280 bytes .../jquery/images/ui-icons_222222_256x240.png | Bin 0 -> 6922 bytes .../jquery/images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4549 bytes .../jquery/images/ui-icons_454545_256x240.png | Bin 0 -> 6992 bytes .../jquery/images/ui-icons_888888_256x240.png | Bin 0 -> 6999 bytes .../jquery/images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4549 bytes doc/0.1.4/en_private/jquery/jquery-3.3.1.js | 10364 ++++++++++++++ .../en_private/jquery/jquery-migrate-3.0.1.js | 628 + doc/0.1.4/en_private/jquery/jquery-ui.css | 582 + doc/0.1.4/en_private/jquery/jquery-ui.js | 2659 ++++ doc/0.1.4/en_private/jquery/jquery-ui.min.css | 7 + doc/0.1.4/en_private/jquery/jquery-ui.min.js | 6 + .../en_private/jquery/jquery-ui.structure.css | 156 + .../jquery/jquery-ui.structure.min.css | 5 + .../jquery/jszip-utils/dist/jszip-utils-ie.js | 56 + .../jszip-utils/dist/jszip-utils-ie.min.js | 10 + .../jquery/jszip-utils/dist/jszip-utils.js | 118 + .../jszip-utils/dist/jszip-utils.min.js | 10 + .../en_private/jquery/jszip/dist/jszip.js | 11623 ++++++++++++++++ .../en_private/jquery/jszip/dist/jszip.min.js | 15 + doc/0.1.4/en_private/member-search-index.js | 1 + doc/0.1.4/en_private/member-search-index.zip | Bin 0 -> 6047 bytes doc/0.1.4/en_private/overview-summary.html | 23 + doc/0.1.4/en_private/overview-tree.html | 313 + doc/0.1.4/en_private/package-search-index.js | 1 + doc/0.1.4/en_private/package-search-index.zip | Bin 0 -> 282 bytes doc/0.1.4/en_private/resources/glass.png | Bin 0 -> 499 bytes doc/0.1.4/en_private/resources/x.png | Bin 0 -> 394 bytes doc/0.1.4/en_private/script.js | 139 + doc/0.1.4/en_private/search.js | 326 + doc/0.1.4/en_private/stylesheet.css | 906 ++ doc/0.1.4/en_private/type-search-index.js | 1 + doc/0.1.4/en_private/type-search-index.zip | Bin 0 -> 592 bytes doc/0.1.4/en_public/allclasses-index.html | 374 + doc/0.1.4/en_public/allclasses.html | 69 + doc/0.1.4/en_public/allpackages-index.html | 205 + .../bitchanger/BitchangerLauncherApp.html | 327 + .../bitchanger/calculations/Calculable.html | 191 + .../calculations/ChangeableNumber.html | 564 + .../calculations/ConvertingNumbers.html | 705 + .../calculations/SimpleChangeableNumber.html | 692 + .../calculations/class-use/Calculable.html | 149 + .../class-use/ChangeableNumber.html | 197 + .../class-use/ConvertingNumbers.html | 149 + .../class-use/SimpleChangeableNumber.html | 149 + .../calculations/package-summary.html | 201 + .../bitchanger/calculations/package-tree.html | 172 + .../bitchanger/calculations/package-use.html | 188 + .../class-use/BitchangerLauncherApp.html | 149 + .../bitchanger/components/Calculable.html | 191 + .../components/ChangeableNumber.html | 447 + .../components/ConvertingNumbers.html | 624 + .../components/SimpleChangeableNumber.html | 565 + .../components/class-use/Calculable.html | 149 + .../class-use/ChangeableNumber.html | 193 + .../class-use/ConvertingNumbers.html | 149 + .../class-use/SimpleChangeableNumber.html | 149 + .../components/package-summary.html | 192 + .../bitchanger/components/package-tree.html | 172 + .../bitchanger/components/package-use.html | 184 + .../bitchanger/gui/Hauptfenster.html | 423 + .../gui/class-use/Hauptfenster.html | 149 + .../controller/AlphaNumGridController.html | 349 + .../controller/AlphaNumKeysController.html | 403 + .../gui/controller/BasicMenuController.html | 559 + .../gui/controller/Controllable.html | 423 + .../controller/ControllableApplication.html | 332 + .../bitchanger/gui/controller/Controller.html | 421 + .../gui/controller/ControllerBase.html | 474 + .../gui/controller/ConverterController.html | 387 + .../controller/ConverterMenuController.html | 419 + .../gui/controller/IEEEController.html | 367 + .../gui/controller/IEEEMenuController.html | 334 + .../class-use/AlphaNumGridController.html | 149 + .../class-use/AlphaNumKeysController.html | 149 + .../class-use/BasicMenuController.html | 200 + .../controller/class-use/Controllable.html | 376 + .../class-use/ControllableApplication.html | 299 + .../gui/controller/class-use/Controller.html | 300 + .../controller/class-use/ControllerBase.html | 225 + .../class-use/ConverterController.html | 149 + .../class-use/ConverterMenuController.html | 149 + .../controller/class-use/IEEEController.html | 149 + .../class-use/IEEEMenuController.html | 149 + .../gui/controller/package-summary.html | 230 + .../gui/controller/package-tree.html | 184 + .../gui/controller/package-use.html | 301 + .../bitchanger/gui/controls/AlphaNumGrid.html | 574 + .../bitchanger/gui/controls/AlphaNumKeys.html | 653 + .../bitchanger/gui/controls/BaseSpinner.html | 391 + .../bitchanger/gui/controls/BasicMenuBar.html | 872 ++ .../gui/controls/ConverterMenuBar.html | 447 + .../InformationDialog.InformationType.html | 396 + .../gui/controls/InformationDialog.html | 340 + .../bitchanger/gui/controls/SVGIcon.html | 411 + .../gui/controls/UnfocusedButton.html | 534 + .../bitchanger/gui/controls/ValueButton.html | 531 + .../bitchanger/gui/controls/ValueField.html | 598 + .../gui/controls/class-use/AlphaNumGrid.html | 191 + .../gui/controls/class-use/AlphaNumKeys.html | 224 + .../gui/controls/class-use/BaseSpinner.html | 149 + .../gui/controls/class-use/BasicMenuBar.html | 274 + .../controls/class-use/ConverterMenuBar.html | 149 + .../InformationDialog.InformationType.html | 218 + .../controls/class-use/InformationDialog.html | 149 + .../gui/controls/class-use/SVGIcon.html | 237 + .../controls/class-use/UnfocusedButton.html | 197 + .../gui/controls/class-use/ValueButton.html | 149 + .../gui/controls/class-use/ValueField.html | 149 + .../gui/controls/package-summary.html | 229 + .../bitchanger/gui/controls/package-tree.html | 252 + .../bitchanger/gui/controls/package-use.html | 279 + .../bitchanger/gui/package-summary.html | 148 + .../bitchanger/gui/package-tree.html | 152 + .../en_public/bitchanger/gui/package-use.html | 149 + .../AlphaNumGridView.ConstraintType.html | 422 + .../gui/views/AlphaNumGridView.html | 1203 ++ .../bitchanger/gui/views/CalculatorView.html | 352 + .../bitchanger/gui/views/Controllable.html | 283 + .../bitchanger/gui/views/ConverterView.html | 638 + .../bitchanger/gui/views/IEEEView.html | 406 + .../bitchanger/gui/views/ViewBase.html | 599 + .../bitchanger/gui/views/Viewable.html | 452 + .../AlphaNumGridView.ConstraintType.html | 227 + .../gui/views/class-use/AlphaNumGridView.html | 205 + .../gui/views/class-use/CalculatorView.html | 149 + .../gui/views/class-use/Controllable.html | 256 + .../gui/views/class-use/ConverterView.html | 196 + .../gui/views/class-use/IEEEView.html | 199 + .../gui/views/class-use/ViewBase.html | 210 + .../gui/views/class-use/Viewable.html | 343 + .../bitchanger/gui/views/package-summary.html | 220 + .../bitchanger/gui/views/package-tree.html | 198 + .../bitchanger/gui/views/package-use.html | 258 + .../bitchanger/main/BitchangerLauncher.html | 327 + .../bitchanger/main/PrimaryFXApp.html | 608 + .../main/class-use/BitchangerLauncher.html | 149 + .../main/class-use/PrimaryFXApp.html | 149 + .../bitchanger/main/package-summary.html | 180 + .../bitchanger/main/package-tree.html | 169 + .../bitchanger/main/package-use.html | 149 + .../en_public/bitchanger/package-summary.html | 148 + .../en_public/bitchanger/package-tree.html | 152 + .../en_public/bitchanger/package-use.html | 149 + .../bitchanger/preferences/Comma.html | 422 + .../bitchanger/preferences/Preferences.html | 534 + .../bitchanger/preferences/Style.html | 410 + .../preferences/class-use/Comma.html | 222 + .../preferences/class-use/Preferences.html | 197 + .../preferences/class-use/Style.html | 237 + .../preferences/package-summary.html | 199 + .../bitchanger/preferences/package-tree.html | 179 + .../bitchanger/preferences/package-use.html | 200 + .../en_public/bitchanger/util/ArrayUtils.html | 281 + .../en_public/bitchanger/util/FXUtils.html | 502 + .../bitchanger/util/IconFactory.html | 283 + .../en_public/bitchanger/util/Resources.html | 1919 +++ .../bitchanger/util/TriConsumer.html | 282 + .../bitchanger/util/class-use/ArrayUtils.html | 149 + .../bitchanger/util/class-use/FXUtils.html | 149 + .../util/class-use/IconFactory.html | 149 + .../bitchanger/util/class-use/Resources.html | 149 + .../util/class-use/TriConsumer.html | 202 + .../bitchanger/util/package-summary.html | 203 + .../bitchanger/util/package-tree.html | 173 + .../bitchanger/util/package-use.html | 188 + doc/0.1.4/en_public/constant-values.html | 641 + doc/0.1.4/en_public/deprecated-list.html | 149 + doc/0.1.4/en_public/element-list | 7 + doc/0.1.4/en_public/help-doc.html | 281 + doc/0.1.4/en_public/index-files/index-1.html | 243 + doc/0.1.4/en_public/index-files/index-10.html | 172 + doc/0.1.4/en_public/index-files/index-11.html | 191 + doc/0.1.4/en_public/index-files/index-12.html | 214 + doc/0.1.4/en_public/index-files/index-13.html | 164 + doc/0.1.4/en_public/index-files/index-14.html | 172 + doc/0.1.4/en_public/index-files/index-15.html | 198 + doc/0.1.4/en_public/index-files/index-16.html | 162 + doc/0.1.4/en_public/index-files/index-17.html | 185 + doc/0.1.4/en_public/index-files/index-18.html | 344 + doc/0.1.4/en_public/index-files/index-19.html | 253 + doc/0.1.4/en_public/index-files/index-2.html | 245 + doc/0.1.4/en_public/index-files/index-20.html | 176 + doc/0.1.4/en_public/index-files/index-21.html | 266 + doc/0.1.4/en_public/index-files/index-22.html | 162 + doc/0.1.4/en_public/index-files/index-23.html | 176 + doc/0.1.4/en_public/index-files/index-24.html | 164 + doc/0.1.4/en_public/index-files/index-3.html | 266 + doc/0.1.4/en_public/index-files/index-4.html | 179 + doc/0.1.4/en_public/index-files/index-5.html | 172 + doc/0.1.4/en_public/index-files/index-6.html | 174 + doc/0.1.4/en_public/index-files/index-7.html | 297 + doc/0.1.4/en_public/index-files/index-8.html | 172 + doc/0.1.4/en_public/index-files/index-9.html | 223 + doc/0.1.4/en_public/index.html | 198 + .../jquery/external/jquery/jquery.js | 10364 ++++++++++++++ .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 212 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 208 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 335 bytes .../images/ui-bg_glass_65_dadada_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 207 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 332 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 280 bytes .../jquery/images/ui-icons_222222_256x240.png | Bin 0 -> 6922 bytes .../jquery/images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4549 bytes .../jquery/images/ui-icons_454545_256x240.png | Bin 0 -> 6992 bytes .../jquery/images/ui-icons_888888_256x240.png | Bin 0 -> 6999 bytes .../jquery/images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4549 bytes doc/0.1.4/en_public/jquery/jquery-3.3.1.js | 10364 ++++++++++++++ .../en_public/jquery/jquery-migrate-3.0.1.js | 628 + doc/0.1.4/en_public/jquery/jquery-ui.css | 544 + doc/0.1.4/en_public/jquery/jquery-ui.js | 2610 ++++ doc/0.1.4/en_public/jquery/jquery-ui.min.css | 7 + doc/0.1.4/en_public/jquery/jquery-ui.min.js | 7 + .../en_public/jquery/jquery-ui.structure.css | 152 + .../jquery/jquery-ui.structure.min.css | 5 + .../jquery/jszip-utils/dist/jszip-utils-ie.js | 56 + .../jszip-utils/dist/jszip-utils-ie.min.js | 10 + .../jquery/jszip-utils/dist/jszip-utils.js | 118 + .../jszip-utils/dist/jszip-utils.min.js | 10 + .../en_public/jquery/jszip/dist/jszip.js | 11623 ++++++++++++++++ .../en_public/jquery/jszip/dist/jszip.min.js | 15 + doc/0.1.4/en_public/member-search-index.js | 1 + doc/0.1.4/en_public/member-search-index.zip | Bin 0 -> 4364 bytes doc/0.1.4/en_public/overview-summary.html | 23 + doc/0.1.4/en_public/overview-tree.html | 313 + doc/0.1.4/en_public/package-search-index.js | 1 + doc/0.1.4/en_public/package-search-index.zip | Bin 0 -> 282 bytes doc/0.1.4/en_public/resources/glass.png | Bin 0 -> 499 bytes doc/0.1.4/en_public/resources/x.png | Bin 0 -> 394 bytes doc/0.1.4/en_public/script.js | 139 + doc/0.1.4/en_public/search.js | 329 + doc/0.1.4/en_public/stylesheet.css | 906 ++ doc/0.1.4/en_public/type-search-index.js | 1 + doc/0.1.4/en_public/type-search-index.zip | Bin 0 -> 592 bytes 829 files changed, 358667 insertions(+), 32 deletions(-) delete mode 100644 build_doc.bat create mode 100644 doc/0.1.4/de_private/allclasses-index.html create mode 100644 doc/0.1.4/de_private/allclasses.html create mode 100644 doc/0.1.4/de_private/allpackages-index.html create mode 100644 doc/0.1.4/de_private/bitchanger/BitchangerLauncherApp.html create mode 100644 doc/0.1.4/de_private/bitchanger/calculations/Calculable.html create mode 100644 doc/0.1.4/de_private/bitchanger/calculations/ChangeableNumber.html create mode 100644 doc/0.1.4/de_private/bitchanger/calculations/ConvertingNumbers.html create mode 100644 doc/0.1.4/de_private/bitchanger/calculations/SimpleChangeableNumber.html create mode 100644 doc/0.1.4/de_private/bitchanger/calculations/class-use/Calculable.html create mode 100644 doc/0.1.4/de_private/bitchanger/calculations/class-use/ChangeableNumber.html create mode 100644 doc/0.1.4/de_private/bitchanger/calculations/class-use/ConvertingNumbers.html create mode 100644 doc/0.1.4/de_private/bitchanger/calculations/class-use/SimpleChangeableNumber.html create mode 100644 doc/0.1.4/de_private/bitchanger/calculations/package-summary.html create mode 100644 doc/0.1.4/de_private/bitchanger/calculations/package-tree.html create mode 100644 doc/0.1.4/de_private/bitchanger/calculations/package-use.html create mode 100644 doc/0.1.4/de_private/bitchanger/class-use/BitchangerLauncherApp.html create mode 100644 doc/0.1.4/de_private/bitchanger/components/Calculable.html create mode 100644 doc/0.1.4/de_private/bitchanger/components/ChangeableNumber.html create mode 100644 doc/0.1.4/de_private/bitchanger/components/ConvertingNumbers.html create mode 100644 doc/0.1.4/de_private/bitchanger/components/SimpleChangeableNumber.html create mode 100644 doc/0.1.4/de_private/bitchanger/components/class-use/Calculable.html create mode 100644 doc/0.1.4/de_private/bitchanger/components/class-use/ChangeableNumber.html create mode 100644 doc/0.1.4/de_private/bitchanger/components/class-use/ConvertingNumbers.html create mode 100644 doc/0.1.4/de_private/bitchanger/components/class-use/SimpleChangeableNumber.html create mode 100644 doc/0.1.4/de_private/bitchanger/components/package-summary.html create mode 100644 doc/0.1.4/de_private/bitchanger/components/package-tree.html create mode 100644 doc/0.1.4/de_private/bitchanger/components/package-use.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/Hauptfenster.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/class-use/Hauptfenster.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controller/AlphaNumGridController.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controller/AlphaNumKeysController.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controller/BasicMenuController.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controller/Controllable.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controller/ControllableApplication.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controller/Controller.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controller/ControllerBase.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controller/ConverterController.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controller/ConverterMenuController.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controller/IEEEController.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controller/IEEEMenuController.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controller/class-use/AlphaNumGridController.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controller/class-use/AlphaNumKeysController.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controller/class-use/BasicMenuController.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controller/class-use/Controllable.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controller/class-use/ControllableApplication.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controller/class-use/Controller.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controller/class-use/ControllerBase.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controller/class-use/ConverterController.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controller/class-use/ConverterMenuController.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controller/class-use/IEEEController.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controller/class-use/IEEEMenuController.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controller/package-summary.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controller/package-tree.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controller/package-use.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controls/AlphaNumGrid.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controls/AlphaNumKeys.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controls/BaseSpinner.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controls/BasicMenuBar.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controls/ConverterMenuBar.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controls/FXUtils.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controls/InformationDialog.InformationType.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controls/InformationDialog.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controls/SVGIcon.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controls/TriConsumer.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controls/UnfocusedButton.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controls/ValueButton.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controls/ValueField.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controls/class-use/AlphaNumGrid.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controls/class-use/AlphaNumKeys.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controls/class-use/BaseSpinner.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controls/class-use/BasicMenuBar.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controls/class-use/ConverterMenuBar.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controls/class-use/FXUtils.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controls/class-use/InformationDialog.InformationType.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controls/class-use/InformationDialog.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controls/class-use/SVGIcon.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controls/class-use/TriConsumer.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controls/class-use/UnfocusedButton.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controls/class-use/ValueButton.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controls/class-use/ValueField.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controls/package-summary.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controls/package-tree.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/controls/package-use.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/package-summary.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/package-tree.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/package-use.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/views/AlphaNumGridView.ConstraintType.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/views/AlphaNumGridView.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/views/CalculatorView.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/views/Controllable.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/views/ConverterView.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/views/IEEEView.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/views/ViewBase.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/views/Viewable.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/views/class-use/AlphaNumGridView.ConstraintType.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/views/class-use/AlphaNumGridView.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/views/class-use/CalculatorView.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/views/class-use/Controllable.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/views/class-use/ConverterView.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/views/class-use/IEEEView.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/views/class-use/ViewBase.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/views/class-use/Viewable.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/views/package-summary.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/views/package-tree.html create mode 100644 doc/0.1.4/de_private/bitchanger/gui/views/package-use.html create mode 100644 doc/0.1.4/de_private/bitchanger/main/BitchangerLauncher.html create mode 100644 doc/0.1.4/de_private/bitchanger/main/PrimaryFXApp.html create mode 100644 doc/0.1.4/de_private/bitchanger/main/class-use/BitchangerLauncher.html create mode 100644 doc/0.1.4/de_private/bitchanger/main/class-use/PrimaryFXApp.html create mode 100644 doc/0.1.4/de_private/bitchanger/main/package-summary.html create mode 100644 doc/0.1.4/de_private/bitchanger/main/package-tree.html create mode 100644 doc/0.1.4/de_private/bitchanger/main/package-use.html create mode 100644 doc/0.1.4/de_private/bitchanger/package-summary.html create mode 100644 doc/0.1.4/de_private/bitchanger/package-tree.html create mode 100644 doc/0.1.4/de_private/bitchanger/package-use.html create mode 100644 doc/0.1.4/de_private/bitchanger/preferences/Comma.html create mode 100644 doc/0.1.4/de_private/bitchanger/preferences/Preferences.html create mode 100644 doc/0.1.4/de_private/bitchanger/preferences/Style.html create mode 100644 doc/0.1.4/de_private/bitchanger/preferences/class-use/Comma.html create mode 100644 doc/0.1.4/de_private/bitchanger/preferences/class-use/Preferences.html create mode 100644 doc/0.1.4/de_private/bitchanger/preferences/class-use/Style.html create mode 100644 doc/0.1.4/de_private/bitchanger/preferences/package-summary.html create mode 100644 doc/0.1.4/de_private/bitchanger/preferences/package-tree.html create mode 100644 doc/0.1.4/de_private/bitchanger/preferences/package-use.html create mode 100644 doc/0.1.4/de_private/bitchanger/util/ArrayUtils.html create mode 100644 doc/0.1.4/de_private/bitchanger/util/FXUtils.html create mode 100644 doc/0.1.4/de_private/bitchanger/util/IconFactory.html create mode 100644 doc/0.1.4/de_private/bitchanger/util/Resources.html create mode 100644 doc/0.1.4/de_private/bitchanger/util/TriConsumer.html create mode 100644 doc/0.1.4/de_private/bitchanger/util/class-use/ArrayUtils.html create mode 100644 doc/0.1.4/de_private/bitchanger/util/class-use/FXUtils.html create mode 100644 doc/0.1.4/de_private/bitchanger/util/class-use/IconFactory.html create mode 100644 doc/0.1.4/de_private/bitchanger/util/class-use/Resources.html create mode 100644 doc/0.1.4/de_private/bitchanger/util/class-use/TriConsumer.html create mode 100644 doc/0.1.4/de_private/bitchanger/util/package-summary.html create mode 100644 doc/0.1.4/de_private/bitchanger/util/package-tree.html create mode 100644 doc/0.1.4/de_private/bitchanger/util/package-use.html create mode 100644 doc/0.1.4/de_private/constant-values.html create mode 100644 doc/0.1.4/de_private/deprecated-list.html create mode 100644 doc/0.1.4/de_private/element-list create mode 100644 doc/0.1.4/de_private/help-doc.html create mode 100644 doc/0.1.4/de_private/index-files/index-1.html create mode 100644 doc/0.1.4/de_private/index-files/index-10.html create mode 100644 doc/0.1.4/de_private/index-files/index-11.html create mode 100644 doc/0.1.4/de_private/index-files/index-12.html create mode 100644 doc/0.1.4/de_private/index-files/index-13.html create mode 100644 doc/0.1.4/de_private/index-files/index-14.html create mode 100644 doc/0.1.4/de_private/index-files/index-15.html create mode 100644 doc/0.1.4/de_private/index-files/index-16.html create mode 100644 doc/0.1.4/de_private/index-files/index-17.html create mode 100644 doc/0.1.4/de_private/index-files/index-18.html create mode 100644 doc/0.1.4/de_private/index-files/index-19.html create mode 100644 doc/0.1.4/de_private/index-files/index-2.html create mode 100644 doc/0.1.4/de_private/index-files/index-20.html create mode 100644 doc/0.1.4/de_private/index-files/index-21.html create mode 100644 doc/0.1.4/de_private/index-files/index-22.html create mode 100644 doc/0.1.4/de_private/index-files/index-23.html create mode 100644 doc/0.1.4/de_private/index-files/index-24.html create mode 100644 doc/0.1.4/de_private/index-files/index-3.html create mode 100644 doc/0.1.4/de_private/index-files/index-4.html create mode 100644 doc/0.1.4/de_private/index-files/index-5.html create mode 100644 doc/0.1.4/de_private/index-files/index-6.html create mode 100644 doc/0.1.4/de_private/index-files/index-7.html create mode 100644 doc/0.1.4/de_private/index-files/index-8.html create mode 100644 doc/0.1.4/de_private/index-files/index-9.html create mode 100644 doc/0.1.4/de_private/index.html create mode 100644 doc/0.1.4/de_private/jquery/external/jquery/jquery.js create mode 100644 doc/0.1.4/de_private/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 doc/0.1.4/de_private/jquery/images/ui-bg_flat_75_ffffff_40x100.png create mode 100644 doc/0.1.4/de_private/jquery/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100644 doc/0.1.4/de_private/jquery/images/ui-bg_glass_65_dadada_1x400.png create mode 100644 doc/0.1.4/de_private/jquery/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 doc/0.1.4/de_private/jquery/images/ui-bg_glass_75_dadada_1x400.png create mode 100644 doc/0.1.4/de_private/jquery/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 doc/0.1.4/de_private/jquery/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 doc/0.1.4/de_private/jquery/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100644 doc/0.1.4/de_private/jquery/images/ui-icons_222222_256x240.png create mode 100644 doc/0.1.4/de_private/jquery/images/ui-icons_2e83ff_256x240.png create mode 100644 doc/0.1.4/de_private/jquery/images/ui-icons_454545_256x240.png create mode 100644 doc/0.1.4/de_private/jquery/images/ui-icons_888888_256x240.png create mode 100644 doc/0.1.4/de_private/jquery/images/ui-icons_cd0a0a_256x240.png create mode 100644 doc/0.1.4/de_private/jquery/jquery-3.3.1.js create mode 100644 doc/0.1.4/de_private/jquery/jquery-migrate-3.0.1.js create mode 100644 doc/0.1.4/de_private/jquery/jquery-ui.css create mode 100644 doc/0.1.4/de_private/jquery/jquery-ui.js create mode 100644 doc/0.1.4/de_private/jquery/jquery-ui.min.css create mode 100644 doc/0.1.4/de_private/jquery/jquery-ui.min.js create mode 100644 doc/0.1.4/de_private/jquery/jquery-ui.structure.css create mode 100644 doc/0.1.4/de_private/jquery/jquery-ui.structure.min.css create mode 100644 doc/0.1.4/de_private/jquery/jszip-utils/dist/jszip-utils-ie.js create mode 100644 doc/0.1.4/de_private/jquery/jszip-utils/dist/jszip-utils-ie.min.js create mode 100644 doc/0.1.4/de_private/jquery/jszip-utils/dist/jszip-utils.js create mode 100644 doc/0.1.4/de_private/jquery/jszip-utils/dist/jszip-utils.min.js create mode 100644 doc/0.1.4/de_private/jquery/jszip/dist/jszip.js create mode 100644 doc/0.1.4/de_private/jquery/jszip/dist/jszip.min.js create mode 100644 doc/0.1.4/de_private/member-search-index.js create mode 100644 doc/0.1.4/de_private/member-search-index.zip create mode 100644 doc/0.1.4/de_private/overview-summary.html create mode 100644 doc/0.1.4/de_private/overview-tree.html create mode 100644 doc/0.1.4/de_private/package-search-index.js create mode 100644 doc/0.1.4/de_private/package-search-index.zip create mode 100644 doc/0.1.4/de_private/resources/glass.png create mode 100644 doc/0.1.4/de_private/resources/x.png create mode 100644 doc/0.1.4/de_private/script.js create mode 100644 doc/0.1.4/de_private/search.js create mode 100644 doc/0.1.4/de_private/stylesheet.css create mode 100644 doc/0.1.4/de_private/type-search-index.js create mode 100644 doc/0.1.4/de_private/type-search-index.zip create mode 100644 doc/0.1.4/de_public/allclasses-index.html create mode 100644 doc/0.1.4/de_public/allclasses.html create mode 100644 doc/0.1.4/de_public/allpackages-index.html create mode 100644 doc/0.1.4/de_public/bitchanger/BitchangerLauncherApp.html create mode 100644 doc/0.1.4/de_public/bitchanger/calculations/Calculable.html create mode 100644 doc/0.1.4/de_public/bitchanger/calculations/ChangeableNumber.html create mode 100644 doc/0.1.4/de_public/bitchanger/calculations/ConvertingNumbers.html create mode 100644 doc/0.1.4/de_public/bitchanger/calculations/SimpleChangeableNumber.html create mode 100644 doc/0.1.4/de_public/bitchanger/calculations/class-use/Calculable.html create mode 100644 doc/0.1.4/de_public/bitchanger/calculations/class-use/ChangeableNumber.html create mode 100644 doc/0.1.4/de_public/bitchanger/calculations/class-use/ConvertingNumbers.html create mode 100644 doc/0.1.4/de_public/bitchanger/calculations/class-use/SimpleChangeableNumber.html create mode 100644 doc/0.1.4/de_public/bitchanger/calculations/package-summary.html create mode 100644 doc/0.1.4/de_public/bitchanger/calculations/package-tree.html create mode 100644 doc/0.1.4/de_public/bitchanger/calculations/package-use.html create mode 100644 doc/0.1.4/de_public/bitchanger/class-use/BitchangerLauncherApp.html create mode 100644 doc/0.1.4/de_public/bitchanger/components/Calculable.html create mode 100644 doc/0.1.4/de_public/bitchanger/components/ChangeableNumber.html create mode 100644 doc/0.1.4/de_public/bitchanger/components/ConvertingNumbers.html create mode 100644 doc/0.1.4/de_public/bitchanger/components/SimpleChangeableNumber.html create mode 100644 doc/0.1.4/de_public/bitchanger/components/class-use/Calculable.html create mode 100644 doc/0.1.4/de_public/bitchanger/components/class-use/ChangeableNumber.html create mode 100644 doc/0.1.4/de_public/bitchanger/components/class-use/ConvertingNumbers.html create mode 100644 doc/0.1.4/de_public/bitchanger/components/class-use/SimpleChangeableNumber.html create mode 100644 doc/0.1.4/de_public/bitchanger/components/package-summary.html create mode 100644 doc/0.1.4/de_public/bitchanger/components/package-tree.html create mode 100644 doc/0.1.4/de_public/bitchanger/components/package-use.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/Hauptfenster.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/class-use/Hauptfenster.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controller/AlphaNumGridController.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controller/AlphaNumKeysController.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controller/BasicMenuController.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controller/Controllable.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controller/ControllableApplication.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controller/Controller.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controller/ControllerBase.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controller/ConverterController.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controller/ConverterMenuController.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controller/IEEEController.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controller/IEEEMenuController.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controller/class-use/AlphaNumGridController.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controller/class-use/AlphaNumKeysController.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controller/class-use/BasicMenuController.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controller/class-use/Controllable.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controller/class-use/ControllableApplication.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controller/class-use/Controller.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controller/class-use/ControllerBase.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controller/class-use/ConverterController.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controller/class-use/ConverterMenuController.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controller/class-use/IEEEController.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controller/class-use/IEEEMenuController.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controller/package-summary.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controller/package-tree.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controller/package-use.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controls/AlphaNumGrid.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controls/AlphaNumKeys.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controls/BaseSpinner.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controls/BasicMenuBar.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controls/ConverterMenuBar.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controls/InformationDialog.InformationType.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controls/InformationDialog.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controls/SVGIcon.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controls/UnfocusedButton.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controls/ValueButton.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controls/ValueField.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controls/class-use/AlphaNumGrid.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controls/class-use/AlphaNumKeys.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controls/class-use/BaseSpinner.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controls/class-use/BasicMenuBar.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controls/class-use/ConverterMenuBar.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controls/class-use/InformationDialog.InformationType.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controls/class-use/InformationDialog.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controls/class-use/SVGIcon.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controls/class-use/UnfocusedButton.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controls/class-use/ValueButton.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controls/class-use/ValueField.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controls/package-summary.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controls/package-tree.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/controls/package-use.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/package-summary.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/package-tree.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/package-use.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/views/AlphaNumGridView.ConstraintType.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/views/AlphaNumGridView.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/views/CalculatorView.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/views/Controllable.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/views/ConverterView.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/views/IEEEView.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/views/ViewBase.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/views/Viewable.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/views/class-use/AlphaNumGridView.ConstraintType.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/views/class-use/AlphaNumGridView.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/views/class-use/CalculatorView.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/views/class-use/Controllable.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/views/class-use/ConverterView.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/views/class-use/IEEEView.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/views/class-use/ViewBase.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/views/class-use/Viewable.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/views/package-summary.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/views/package-tree.html create mode 100644 doc/0.1.4/de_public/bitchanger/gui/views/package-use.html create mode 100644 doc/0.1.4/de_public/bitchanger/main/BitchangerLauncher.html create mode 100644 doc/0.1.4/de_public/bitchanger/main/PrimaryFXApp.html create mode 100644 doc/0.1.4/de_public/bitchanger/main/class-use/BitchangerLauncher.html create mode 100644 doc/0.1.4/de_public/bitchanger/main/class-use/PrimaryFXApp.html create mode 100644 doc/0.1.4/de_public/bitchanger/main/package-summary.html create mode 100644 doc/0.1.4/de_public/bitchanger/main/package-tree.html create mode 100644 doc/0.1.4/de_public/bitchanger/main/package-use.html create mode 100644 doc/0.1.4/de_public/bitchanger/package-summary.html create mode 100644 doc/0.1.4/de_public/bitchanger/package-tree.html create mode 100644 doc/0.1.4/de_public/bitchanger/package-use.html create mode 100644 doc/0.1.4/de_public/bitchanger/preferences/Comma.html create mode 100644 doc/0.1.4/de_public/bitchanger/preferences/Preferences.html create mode 100644 doc/0.1.4/de_public/bitchanger/preferences/Style.html create mode 100644 doc/0.1.4/de_public/bitchanger/preferences/class-use/Comma.html create mode 100644 doc/0.1.4/de_public/bitchanger/preferences/class-use/Preferences.html create mode 100644 doc/0.1.4/de_public/bitchanger/preferences/class-use/Style.html create mode 100644 doc/0.1.4/de_public/bitchanger/preferences/package-summary.html create mode 100644 doc/0.1.4/de_public/bitchanger/preferences/package-tree.html create mode 100644 doc/0.1.4/de_public/bitchanger/preferences/package-use.html create mode 100644 doc/0.1.4/de_public/bitchanger/util/ArrayUtils.html create mode 100644 doc/0.1.4/de_public/bitchanger/util/FXUtils.html create mode 100644 doc/0.1.4/de_public/bitchanger/util/IconFactory.html create mode 100644 doc/0.1.4/de_public/bitchanger/util/Resources.html create mode 100644 doc/0.1.4/de_public/bitchanger/util/TriConsumer.html create mode 100644 doc/0.1.4/de_public/bitchanger/util/class-use/ArrayUtils.html create mode 100644 doc/0.1.4/de_public/bitchanger/util/class-use/FXUtils.html create mode 100644 doc/0.1.4/de_public/bitchanger/util/class-use/IconFactory.html create mode 100644 doc/0.1.4/de_public/bitchanger/util/class-use/Resources.html create mode 100644 doc/0.1.4/de_public/bitchanger/util/class-use/TriConsumer.html create mode 100644 doc/0.1.4/de_public/bitchanger/util/package-summary.html create mode 100644 doc/0.1.4/de_public/bitchanger/util/package-tree.html create mode 100644 doc/0.1.4/de_public/bitchanger/util/package-use.html create mode 100644 doc/0.1.4/de_public/constant-values.html create mode 100644 doc/0.1.4/de_public/deprecated-list.html create mode 100644 doc/0.1.4/de_public/element-list create mode 100644 doc/0.1.4/de_public/help-doc.html create mode 100644 doc/0.1.4/de_public/index-files/index-1.html create mode 100644 doc/0.1.4/de_public/index-files/index-10.html create mode 100644 doc/0.1.4/de_public/index-files/index-11.html create mode 100644 doc/0.1.4/de_public/index-files/index-12.html create mode 100644 doc/0.1.4/de_public/index-files/index-13.html create mode 100644 doc/0.1.4/de_public/index-files/index-14.html create mode 100644 doc/0.1.4/de_public/index-files/index-15.html create mode 100644 doc/0.1.4/de_public/index-files/index-16.html create mode 100644 doc/0.1.4/de_public/index-files/index-17.html create mode 100644 doc/0.1.4/de_public/index-files/index-18.html create mode 100644 doc/0.1.4/de_public/index-files/index-19.html create mode 100644 doc/0.1.4/de_public/index-files/index-2.html create mode 100644 doc/0.1.4/de_public/index-files/index-20.html create mode 100644 doc/0.1.4/de_public/index-files/index-21.html create mode 100644 doc/0.1.4/de_public/index-files/index-22.html create mode 100644 doc/0.1.4/de_public/index-files/index-23.html create mode 100644 doc/0.1.4/de_public/index-files/index-24.html create mode 100644 doc/0.1.4/de_public/index-files/index-3.html create mode 100644 doc/0.1.4/de_public/index-files/index-4.html create mode 100644 doc/0.1.4/de_public/index-files/index-5.html create mode 100644 doc/0.1.4/de_public/index-files/index-6.html create mode 100644 doc/0.1.4/de_public/index-files/index-7.html create mode 100644 doc/0.1.4/de_public/index-files/index-8.html create mode 100644 doc/0.1.4/de_public/index-files/index-9.html create mode 100644 doc/0.1.4/de_public/index.html create mode 100644 doc/0.1.4/de_public/jquery/external/jquery/jquery.js create mode 100644 doc/0.1.4/de_public/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 doc/0.1.4/de_public/jquery/images/ui-bg_flat_75_ffffff_40x100.png create mode 100644 doc/0.1.4/de_public/jquery/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100644 doc/0.1.4/de_public/jquery/images/ui-bg_glass_65_dadada_1x400.png create mode 100644 doc/0.1.4/de_public/jquery/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 doc/0.1.4/de_public/jquery/images/ui-bg_glass_75_dadada_1x400.png create mode 100644 doc/0.1.4/de_public/jquery/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 doc/0.1.4/de_public/jquery/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 doc/0.1.4/de_public/jquery/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100644 doc/0.1.4/de_public/jquery/images/ui-icons_222222_256x240.png create mode 100644 doc/0.1.4/de_public/jquery/images/ui-icons_2e83ff_256x240.png create mode 100644 doc/0.1.4/de_public/jquery/images/ui-icons_454545_256x240.png create mode 100644 doc/0.1.4/de_public/jquery/images/ui-icons_888888_256x240.png create mode 100644 doc/0.1.4/de_public/jquery/images/ui-icons_cd0a0a_256x240.png create mode 100644 doc/0.1.4/de_public/jquery/jquery-3.3.1.js create mode 100644 doc/0.1.4/de_public/jquery/jquery-migrate-3.0.1.js create mode 100644 doc/0.1.4/de_public/jquery/jquery-ui.css create mode 100644 doc/0.1.4/de_public/jquery/jquery-ui.js create mode 100644 doc/0.1.4/de_public/jquery/jquery-ui.min.css create mode 100644 doc/0.1.4/de_public/jquery/jquery-ui.min.js create mode 100644 doc/0.1.4/de_public/jquery/jquery-ui.structure.css create mode 100644 doc/0.1.4/de_public/jquery/jquery-ui.structure.min.css create mode 100644 doc/0.1.4/de_public/jquery/jszip-utils/dist/jszip-utils-ie.js create mode 100644 doc/0.1.4/de_public/jquery/jszip-utils/dist/jszip-utils-ie.min.js create mode 100644 doc/0.1.4/de_public/jquery/jszip-utils/dist/jszip-utils.js create mode 100644 doc/0.1.4/de_public/jquery/jszip-utils/dist/jszip-utils.min.js create mode 100644 doc/0.1.4/de_public/jquery/jszip/dist/jszip.js create mode 100644 doc/0.1.4/de_public/jquery/jszip/dist/jszip.min.js create mode 100644 doc/0.1.4/de_public/member-search-index.js create mode 100644 doc/0.1.4/de_public/member-search-index.zip create mode 100644 doc/0.1.4/de_public/overview-summary.html create mode 100644 doc/0.1.4/de_public/overview-tree.html create mode 100644 doc/0.1.4/de_public/package-search-index.js create mode 100644 doc/0.1.4/de_public/package-search-index.zip create mode 100644 doc/0.1.4/de_public/resources/glass.png create mode 100644 doc/0.1.4/de_public/resources/x.png create mode 100644 doc/0.1.4/de_public/script.js create mode 100644 doc/0.1.4/de_public/search.js create mode 100644 doc/0.1.4/de_public/stylesheet.css create mode 100644 doc/0.1.4/de_public/type-search-index.js create mode 100644 doc/0.1.4/de_public/type-search-index.zip create mode 100644 doc/0.1.4/en_private/allclasses-index.html create mode 100644 doc/0.1.4/en_private/allclasses.html create mode 100644 doc/0.1.4/en_private/allpackages-index.html create mode 100644 doc/0.1.4/en_private/bitchanger/BitchangerLauncherApp.html create mode 100644 doc/0.1.4/en_private/bitchanger/calculations/Calculable.html create mode 100644 doc/0.1.4/en_private/bitchanger/calculations/ChangeableNumber.html create mode 100644 doc/0.1.4/en_private/bitchanger/calculations/ConvertingNumbers.html create mode 100644 doc/0.1.4/en_private/bitchanger/calculations/SimpleChangeableNumber.html create mode 100644 doc/0.1.4/en_private/bitchanger/calculations/class-use/Calculable.html create mode 100644 doc/0.1.4/en_private/bitchanger/calculations/class-use/ChangeableNumber.html create mode 100644 doc/0.1.4/en_private/bitchanger/calculations/class-use/ConvertingNumbers.html create mode 100644 doc/0.1.4/en_private/bitchanger/calculations/class-use/SimpleChangeableNumber.html create mode 100644 doc/0.1.4/en_private/bitchanger/calculations/package-summary.html create mode 100644 doc/0.1.4/en_private/bitchanger/calculations/package-tree.html create mode 100644 doc/0.1.4/en_private/bitchanger/calculations/package-use.html create mode 100644 doc/0.1.4/en_private/bitchanger/class-use/BitchangerLauncherApp.html create mode 100644 doc/0.1.4/en_private/bitchanger/components/Calculable.html create mode 100644 doc/0.1.4/en_private/bitchanger/components/ChangeableNumber.html create mode 100644 doc/0.1.4/en_private/bitchanger/components/ConvertingNumbers.html create mode 100644 doc/0.1.4/en_private/bitchanger/components/SimpleChangeableNumber.html create mode 100644 doc/0.1.4/en_private/bitchanger/components/class-use/Calculable.html create mode 100644 doc/0.1.4/en_private/bitchanger/components/class-use/ChangeableNumber.html create mode 100644 doc/0.1.4/en_private/bitchanger/components/class-use/ConvertingNumbers.html create mode 100644 doc/0.1.4/en_private/bitchanger/components/class-use/SimpleChangeableNumber.html create mode 100644 doc/0.1.4/en_private/bitchanger/components/package-summary.html create mode 100644 doc/0.1.4/en_private/bitchanger/components/package-tree.html create mode 100644 doc/0.1.4/en_private/bitchanger/components/package-use.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/Hauptfenster.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/class-use/Hauptfenster.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controller/AlphaNumGridController.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controller/AlphaNumKeysController.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controller/BasicMenuController.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controller/Controllable.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controller/ControllableApplication.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controller/Controller.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controller/ControllerBase.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controller/ConverterController.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controller/ConverterMenuController.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controller/IEEEController.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controller/IEEEMenuController.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controller/class-use/AlphaNumGridController.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controller/class-use/AlphaNumKeysController.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controller/class-use/BasicMenuController.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controller/class-use/Controllable.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controller/class-use/ControllableApplication.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controller/class-use/Controller.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controller/class-use/ControllerBase.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controller/class-use/ConverterController.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controller/class-use/ConverterMenuController.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controller/class-use/IEEEController.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controller/class-use/IEEEMenuController.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controller/package-summary.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controller/package-tree.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controller/package-use.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controls/AlphaNumGrid.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controls/AlphaNumKeys.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controls/BaseSpinner.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controls/BasicMenuBar.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controls/ConverterMenuBar.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controls/InformationDialog.InformationType.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controls/InformationDialog.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controls/SVGIcon.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controls/UnfocusedButton.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controls/ValueButton.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controls/ValueField.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controls/class-use/AlphaNumGrid.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controls/class-use/AlphaNumKeys.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controls/class-use/BaseSpinner.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controls/class-use/BasicMenuBar.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controls/class-use/ConverterMenuBar.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controls/class-use/InformationDialog.InformationType.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controls/class-use/InformationDialog.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controls/class-use/SVGIcon.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controls/class-use/UnfocusedButton.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controls/class-use/ValueButton.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controls/class-use/ValueField.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controls/package-summary.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controls/package-tree.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/controls/package-use.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/package-summary.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/package-tree.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/package-use.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/views/AlphaNumGridView.ConstraintType.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/views/AlphaNumGridView.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/views/CalculatorView.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/views/Controllable.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/views/ConverterView.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/views/IEEEView.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/views/ViewBase.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/views/Viewable.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/views/class-use/AlphaNumGridView.ConstraintType.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/views/class-use/AlphaNumGridView.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/views/class-use/CalculatorView.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/views/class-use/Controllable.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/views/class-use/ConverterView.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/views/class-use/IEEEView.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/views/class-use/ViewBase.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/views/class-use/Viewable.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/views/package-summary.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/views/package-tree.html create mode 100644 doc/0.1.4/en_private/bitchanger/gui/views/package-use.html create mode 100644 doc/0.1.4/en_private/bitchanger/main/BitchangerLauncher.html create mode 100644 doc/0.1.4/en_private/bitchanger/main/PrimaryFXApp.html create mode 100644 doc/0.1.4/en_private/bitchanger/main/class-use/BitchangerLauncher.html create mode 100644 doc/0.1.4/en_private/bitchanger/main/class-use/PrimaryFXApp.html create mode 100644 doc/0.1.4/en_private/bitchanger/main/package-summary.html create mode 100644 doc/0.1.4/en_private/bitchanger/main/package-tree.html create mode 100644 doc/0.1.4/en_private/bitchanger/main/package-use.html create mode 100644 doc/0.1.4/en_private/bitchanger/package-summary.html create mode 100644 doc/0.1.4/en_private/bitchanger/package-tree.html create mode 100644 doc/0.1.4/en_private/bitchanger/package-use.html create mode 100644 doc/0.1.4/en_private/bitchanger/preferences/Comma.html create mode 100644 doc/0.1.4/en_private/bitchanger/preferences/Preferences.html create mode 100644 doc/0.1.4/en_private/bitchanger/preferences/Style.html create mode 100644 doc/0.1.4/en_private/bitchanger/preferences/class-use/Comma.html create mode 100644 doc/0.1.4/en_private/bitchanger/preferences/class-use/Preferences.html create mode 100644 doc/0.1.4/en_private/bitchanger/preferences/class-use/Style.html create mode 100644 doc/0.1.4/en_private/bitchanger/preferences/package-summary.html create mode 100644 doc/0.1.4/en_private/bitchanger/preferences/package-tree.html create mode 100644 doc/0.1.4/en_private/bitchanger/preferences/package-use.html create mode 100644 doc/0.1.4/en_private/bitchanger/util/ArrayUtils.html create mode 100644 doc/0.1.4/en_private/bitchanger/util/FXUtils.html create mode 100644 doc/0.1.4/en_private/bitchanger/util/IconFactory.html create mode 100644 doc/0.1.4/en_private/bitchanger/util/Resources.html create mode 100644 doc/0.1.4/en_private/bitchanger/util/TriConsumer.html create mode 100644 doc/0.1.4/en_private/bitchanger/util/class-use/ArrayUtils.html create mode 100644 doc/0.1.4/en_private/bitchanger/util/class-use/FXUtils.html create mode 100644 doc/0.1.4/en_private/bitchanger/util/class-use/IconFactory.html create mode 100644 doc/0.1.4/en_private/bitchanger/util/class-use/Resources.html create mode 100644 doc/0.1.4/en_private/bitchanger/util/class-use/TriConsumer.html create mode 100644 doc/0.1.4/en_private/bitchanger/util/package-summary.html create mode 100644 doc/0.1.4/en_private/bitchanger/util/package-tree.html create mode 100644 doc/0.1.4/en_private/bitchanger/util/package-use.html create mode 100644 doc/0.1.4/en_private/constant-values.html create mode 100644 doc/0.1.4/en_private/deprecated-list.html create mode 100644 doc/0.1.4/en_private/element-list create mode 100644 doc/0.1.4/en_private/help-doc.html create mode 100644 doc/0.1.4/en_private/index-files/index-1.html create mode 100644 doc/0.1.4/en_private/index-files/index-10.html create mode 100644 doc/0.1.4/en_private/index-files/index-11.html create mode 100644 doc/0.1.4/en_private/index-files/index-12.html create mode 100644 doc/0.1.4/en_private/index-files/index-13.html create mode 100644 doc/0.1.4/en_private/index-files/index-14.html create mode 100644 doc/0.1.4/en_private/index-files/index-15.html create mode 100644 doc/0.1.4/en_private/index-files/index-16.html create mode 100644 doc/0.1.4/en_private/index-files/index-17.html create mode 100644 doc/0.1.4/en_private/index-files/index-18.html create mode 100644 doc/0.1.4/en_private/index-files/index-19.html create mode 100644 doc/0.1.4/en_private/index-files/index-2.html create mode 100644 doc/0.1.4/en_private/index-files/index-20.html create mode 100644 doc/0.1.4/en_private/index-files/index-21.html create mode 100644 doc/0.1.4/en_private/index-files/index-22.html create mode 100644 doc/0.1.4/en_private/index-files/index-23.html create mode 100644 doc/0.1.4/en_private/index-files/index-24.html create mode 100644 doc/0.1.4/en_private/index-files/index-3.html create mode 100644 doc/0.1.4/en_private/index-files/index-4.html create mode 100644 doc/0.1.4/en_private/index-files/index-5.html create mode 100644 doc/0.1.4/en_private/index-files/index-6.html create mode 100644 doc/0.1.4/en_private/index-files/index-7.html create mode 100644 doc/0.1.4/en_private/index-files/index-8.html create mode 100644 doc/0.1.4/en_private/index-files/index-9.html create mode 100644 doc/0.1.4/en_private/index.html create mode 100644 doc/0.1.4/en_private/jquery/external/jquery/jquery.js create mode 100644 doc/0.1.4/en_private/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 doc/0.1.4/en_private/jquery/images/ui-bg_flat_75_ffffff_40x100.png create mode 100644 doc/0.1.4/en_private/jquery/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100644 doc/0.1.4/en_private/jquery/images/ui-bg_glass_65_dadada_1x400.png create mode 100644 doc/0.1.4/en_private/jquery/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 doc/0.1.4/en_private/jquery/images/ui-bg_glass_75_dadada_1x400.png create mode 100644 doc/0.1.4/en_private/jquery/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 doc/0.1.4/en_private/jquery/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 doc/0.1.4/en_private/jquery/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100644 doc/0.1.4/en_private/jquery/images/ui-icons_222222_256x240.png create mode 100644 doc/0.1.4/en_private/jquery/images/ui-icons_2e83ff_256x240.png create mode 100644 doc/0.1.4/en_private/jquery/images/ui-icons_454545_256x240.png create mode 100644 doc/0.1.4/en_private/jquery/images/ui-icons_888888_256x240.png create mode 100644 doc/0.1.4/en_private/jquery/images/ui-icons_cd0a0a_256x240.png create mode 100644 doc/0.1.4/en_private/jquery/jquery-3.3.1.js create mode 100644 doc/0.1.4/en_private/jquery/jquery-migrate-3.0.1.js create mode 100644 doc/0.1.4/en_private/jquery/jquery-ui.css create mode 100644 doc/0.1.4/en_private/jquery/jquery-ui.js create mode 100644 doc/0.1.4/en_private/jquery/jquery-ui.min.css create mode 100644 doc/0.1.4/en_private/jquery/jquery-ui.min.js create mode 100644 doc/0.1.4/en_private/jquery/jquery-ui.structure.css create mode 100644 doc/0.1.4/en_private/jquery/jquery-ui.structure.min.css create mode 100644 doc/0.1.4/en_private/jquery/jszip-utils/dist/jszip-utils-ie.js create mode 100644 doc/0.1.4/en_private/jquery/jszip-utils/dist/jszip-utils-ie.min.js create mode 100644 doc/0.1.4/en_private/jquery/jszip-utils/dist/jszip-utils.js create mode 100644 doc/0.1.4/en_private/jquery/jszip-utils/dist/jszip-utils.min.js create mode 100644 doc/0.1.4/en_private/jquery/jszip/dist/jszip.js create mode 100644 doc/0.1.4/en_private/jquery/jszip/dist/jszip.min.js create mode 100644 doc/0.1.4/en_private/member-search-index.js create mode 100644 doc/0.1.4/en_private/member-search-index.zip create mode 100644 doc/0.1.4/en_private/overview-summary.html create mode 100644 doc/0.1.4/en_private/overview-tree.html create mode 100644 doc/0.1.4/en_private/package-search-index.js create mode 100644 doc/0.1.4/en_private/package-search-index.zip create mode 100644 doc/0.1.4/en_private/resources/glass.png create mode 100644 doc/0.1.4/en_private/resources/x.png create mode 100644 doc/0.1.4/en_private/script.js create mode 100644 doc/0.1.4/en_private/search.js create mode 100644 doc/0.1.4/en_private/stylesheet.css create mode 100644 doc/0.1.4/en_private/type-search-index.js create mode 100644 doc/0.1.4/en_private/type-search-index.zip create mode 100644 doc/0.1.4/en_public/allclasses-index.html create mode 100644 doc/0.1.4/en_public/allclasses.html create mode 100644 doc/0.1.4/en_public/allpackages-index.html create mode 100644 doc/0.1.4/en_public/bitchanger/BitchangerLauncherApp.html create mode 100644 doc/0.1.4/en_public/bitchanger/calculations/Calculable.html create mode 100644 doc/0.1.4/en_public/bitchanger/calculations/ChangeableNumber.html create mode 100644 doc/0.1.4/en_public/bitchanger/calculations/ConvertingNumbers.html create mode 100644 doc/0.1.4/en_public/bitchanger/calculations/SimpleChangeableNumber.html create mode 100644 doc/0.1.4/en_public/bitchanger/calculations/class-use/Calculable.html create mode 100644 doc/0.1.4/en_public/bitchanger/calculations/class-use/ChangeableNumber.html create mode 100644 doc/0.1.4/en_public/bitchanger/calculations/class-use/ConvertingNumbers.html create mode 100644 doc/0.1.4/en_public/bitchanger/calculations/class-use/SimpleChangeableNumber.html create mode 100644 doc/0.1.4/en_public/bitchanger/calculations/package-summary.html create mode 100644 doc/0.1.4/en_public/bitchanger/calculations/package-tree.html create mode 100644 doc/0.1.4/en_public/bitchanger/calculations/package-use.html create mode 100644 doc/0.1.4/en_public/bitchanger/class-use/BitchangerLauncherApp.html create mode 100644 doc/0.1.4/en_public/bitchanger/components/Calculable.html create mode 100644 doc/0.1.4/en_public/bitchanger/components/ChangeableNumber.html create mode 100644 doc/0.1.4/en_public/bitchanger/components/ConvertingNumbers.html create mode 100644 doc/0.1.4/en_public/bitchanger/components/SimpleChangeableNumber.html create mode 100644 doc/0.1.4/en_public/bitchanger/components/class-use/Calculable.html create mode 100644 doc/0.1.4/en_public/bitchanger/components/class-use/ChangeableNumber.html create mode 100644 doc/0.1.4/en_public/bitchanger/components/class-use/ConvertingNumbers.html create mode 100644 doc/0.1.4/en_public/bitchanger/components/class-use/SimpleChangeableNumber.html create mode 100644 doc/0.1.4/en_public/bitchanger/components/package-summary.html create mode 100644 doc/0.1.4/en_public/bitchanger/components/package-tree.html create mode 100644 doc/0.1.4/en_public/bitchanger/components/package-use.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/Hauptfenster.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/class-use/Hauptfenster.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controller/AlphaNumGridController.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controller/AlphaNumKeysController.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controller/BasicMenuController.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controller/Controllable.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controller/ControllableApplication.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controller/Controller.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controller/ControllerBase.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controller/ConverterController.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controller/ConverterMenuController.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controller/IEEEController.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controller/IEEEMenuController.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controller/class-use/AlphaNumGridController.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controller/class-use/AlphaNumKeysController.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controller/class-use/BasicMenuController.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controller/class-use/Controllable.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controller/class-use/ControllableApplication.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controller/class-use/Controller.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controller/class-use/ControllerBase.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controller/class-use/ConverterController.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controller/class-use/ConverterMenuController.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controller/class-use/IEEEController.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controller/class-use/IEEEMenuController.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controller/package-summary.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controller/package-tree.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controller/package-use.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controls/AlphaNumGrid.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controls/AlphaNumKeys.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controls/BaseSpinner.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controls/BasicMenuBar.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controls/ConverterMenuBar.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controls/InformationDialog.InformationType.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controls/InformationDialog.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controls/SVGIcon.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controls/UnfocusedButton.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controls/ValueButton.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controls/ValueField.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controls/class-use/AlphaNumGrid.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controls/class-use/AlphaNumKeys.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controls/class-use/BaseSpinner.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controls/class-use/BasicMenuBar.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controls/class-use/ConverterMenuBar.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controls/class-use/InformationDialog.InformationType.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controls/class-use/InformationDialog.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controls/class-use/SVGIcon.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controls/class-use/UnfocusedButton.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controls/class-use/ValueButton.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controls/class-use/ValueField.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controls/package-summary.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controls/package-tree.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/controls/package-use.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/package-summary.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/package-tree.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/package-use.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/views/AlphaNumGridView.ConstraintType.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/views/AlphaNumGridView.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/views/CalculatorView.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/views/Controllable.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/views/ConverterView.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/views/IEEEView.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/views/ViewBase.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/views/Viewable.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/views/class-use/AlphaNumGridView.ConstraintType.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/views/class-use/AlphaNumGridView.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/views/class-use/CalculatorView.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/views/class-use/Controllable.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/views/class-use/ConverterView.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/views/class-use/IEEEView.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/views/class-use/ViewBase.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/views/class-use/Viewable.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/views/package-summary.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/views/package-tree.html create mode 100644 doc/0.1.4/en_public/bitchanger/gui/views/package-use.html create mode 100644 doc/0.1.4/en_public/bitchanger/main/BitchangerLauncher.html create mode 100644 doc/0.1.4/en_public/bitchanger/main/PrimaryFXApp.html create mode 100644 doc/0.1.4/en_public/bitchanger/main/class-use/BitchangerLauncher.html create mode 100644 doc/0.1.4/en_public/bitchanger/main/class-use/PrimaryFXApp.html create mode 100644 doc/0.1.4/en_public/bitchanger/main/package-summary.html create mode 100644 doc/0.1.4/en_public/bitchanger/main/package-tree.html create mode 100644 doc/0.1.4/en_public/bitchanger/main/package-use.html create mode 100644 doc/0.1.4/en_public/bitchanger/package-summary.html create mode 100644 doc/0.1.4/en_public/bitchanger/package-tree.html create mode 100644 doc/0.1.4/en_public/bitchanger/package-use.html create mode 100644 doc/0.1.4/en_public/bitchanger/preferences/Comma.html create mode 100644 doc/0.1.4/en_public/bitchanger/preferences/Preferences.html create mode 100644 doc/0.1.4/en_public/bitchanger/preferences/Style.html create mode 100644 doc/0.1.4/en_public/bitchanger/preferences/class-use/Comma.html create mode 100644 doc/0.1.4/en_public/bitchanger/preferences/class-use/Preferences.html create mode 100644 doc/0.1.4/en_public/bitchanger/preferences/class-use/Style.html create mode 100644 doc/0.1.4/en_public/bitchanger/preferences/package-summary.html create mode 100644 doc/0.1.4/en_public/bitchanger/preferences/package-tree.html create mode 100644 doc/0.1.4/en_public/bitchanger/preferences/package-use.html create mode 100644 doc/0.1.4/en_public/bitchanger/util/ArrayUtils.html create mode 100644 doc/0.1.4/en_public/bitchanger/util/FXUtils.html create mode 100644 doc/0.1.4/en_public/bitchanger/util/IconFactory.html create mode 100644 doc/0.1.4/en_public/bitchanger/util/Resources.html create mode 100644 doc/0.1.4/en_public/bitchanger/util/TriConsumer.html create mode 100644 doc/0.1.4/en_public/bitchanger/util/class-use/ArrayUtils.html create mode 100644 doc/0.1.4/en_public/bitchanger/util/class-use/FXUtils.html create mode 100644 doc/0.1.4/en_public/bitchanger/util/class-use/IconFactory.html create mode 100644 doc/0.1.4/en_public/bitchanger/util/class-use/Resources.html create mode 100644 doc/0.1.4/en_public/bitchanger/util/class-use/TriConsumer.html create mode 100644 doc/0.1.4/en_public/bitchanger/util/package-summary.html create mode 100644 doc/0.1.4/en_public/bitchanger/util/package-tree.html create mode 100644 doc/0.1.4/en_public/bitchanger/util/package-use.html create mode 100644 doc/0.1.4/en_public/constant-values.html create mode 100644 doc/0.1.4/en_public/deprecated-list.html create mode 100644 doc/0.1.4/en_public/element-list create mode 100644 doc/0.1.4/en_public/help-doc.html create mode 100644 doc/0.1.4/en_public/index-files/index-1.html create mode 100644 doc/0.1.4/en_public/index-files/index-10.html create mode 100644 doc/0.1.4/en_public/index-files/index-11.html create mode 100644 doc/0.1.4/en_public/index-files/index-12.html create mode 100644 doc/0.1.4/en_public/index-files/index-13.html create mode 100644 doc/0.1.4/en_public/index-files/index-14.html create mode 100644 doc/0.1.4/en_public/index-files/index-15.html create mode 100644 doc/0.1.4/en_public/index-files/index-16.html create mode 100644 doc/0.1.4/en_public/index-files/index-17.html create mode 100644 doc/0.1.4/en_public/index-files/index-18.html create mode 100644 doc/0.1.4/en_public/index-files/index-19.html create mode 100644 doc/0.1.4/en_public/index-files/index-2.html create mode 100644 doc/0.1.4/en_public/index-files/index-20.html create mode 100644 doc/0.1.4/en_public/index-files/index-21.html create mode 100644 doc/0.1.4/en_public/index-files/index-22.html create mode 100644 doc/0.1.4/en_public/index-files/index-23.html create mode 100644 doc/0.1.4/en_public/index-files/index-24.html create mode 100644 doc/0.1.4/en_public/index-files/index-3.html create mode 100644 doc/0.1.4/en_public/index-files/index-4.html create mode 100644 doc/0.1.4/en_public/index-files/index-5.html create mode 100644 doc/0.1.4/en_public/index-files/index-6.html create mode 100644 doc/0.1.4/en_public/index-files/index-7.html create mode 100644 doc/0.1.4/en_public/index-files/index-8.html create mode 100644 doc/0.1.4/en_public/index-files/index-9.html create mode 100644 doc/0.1.4/en_public/index.html create mode 100644 doc/0.1.4/en_public/jquery/external/jquery/jquery.js create mode 100644 doc/0.1.4/en_public/jquery/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100644 doc/0.1.4/en_public/jquery/images/ui-bg_flat_75_ffffff_40x100.png create mode 100644 doc/0.1.4/en_public/jquery/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100644 doc/0.1.4/en_public/jquery/images/ui-bg_glass_65_dadada_1x400.png create mode 100644 doc/0.1.4/en_public/jquery/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 doc/0.1.4/en_public/jquery/images/ui-bg_glass_75_dadada_1x400.png create mode 100644 doc/0.1.4/en_public/jquery/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 doc/0.1.4/en_public/jquery/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 doc/0.1.4/en_public/jquery/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100644 doc/0.1.4/en_public/jquery/images/ui-icons_222222_256x240.png create mode 100644 doc/0.1.4/en_public/jquery/images/ui-icons_2e83ff_256x240.png create mode 100644 doc/0.1.4/en_public/jquery/images/ui-icons_454545_256x240.png create mode 100644 doc/0.1.4/en_public/jquery/images/ui-icons_888888_256x240.png create mode 100644 doc/0.1.4/en_public/jquery/images/ui-icons_cd0a0a_256x240.png create mode 100644 doc/0.1.4/en_public/jquery/jquery-3.3.1.js create mode 100644 doc/0.1.4/en_public/jquery/jquery-migrate-3.0.1.js create mode 100644 doc/0.1.4/en_public/jquery/jquery-ui.css create mode 100644 doc/0.1.4/en_public/jquery/jquery-ui.js create mode 100644 doc/0.1.4/en_public/jquery/jquery-ui.min.css create mode 100644 doc/0.1.4/en_public/jquery/jquery-ui.min.js create mode 100644 doc/0.1.4/en_public/jquery/jquery-ui.structure.css create mode 100644 doc/0.1.4/en_public/jquery/jquery-ui.structure.min.css create mode 100644 doc/0.1.4/en_public/jquery/jszip-utils/dist/jszip-utils-ie.js create mode 100644 doc/0.1.4/en_public/jquery/jszip-utils/dist/jszip-utils-ie.min.js create mode 100644 doc/0.1.4/en_public/jquery/jszip-utils/dist/jszip-utils.js create mode 100644 doc/0.1.4/en_public/jquery/jszip-utils/dist/jszip-utils.min.js create mode 100644 doc/0.1.4/en_public/jquery/jszip/dist/jszip.js create mode 100644 doc/0.1.4/en_public/jquery/jszip/dist/jszip.min.js create mode 100644 doc/0.1.4/en_public/member-search-index.js create mode 100644 doc/0.1.4/en_public/member-search-index.zip create mode 100644 doc/0.1.4/en_public/overview-summary.html create mode 100644 doc/0.1.4/en_public/overview-tree.html create mode 100644 doc/0.1.4/en_public/package-search-index.js create mode 100644 doc/0.1.4/en_public/package-search-index.zip create mode 100644 doc/0.1.4/en_public/resources/glass.png create mode 100644 doc/0.1.4/en_public/resources/x.png create mode 100644 doc/0.1.4/en_public/script.js create mode 100644 doc/0.1.4/en_public/search.js create mode 100644 doc/0.1.4/en_public/stylesheet.css create mode 100644 doc/0.1.4/en_public/type-search-index.js create mode 100644 doc/0.1.4/en_public/type-search-index.zip diff --git a/.gitignore b/.gitignore index 09eab0d..3926a68 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,5 @@ /target/ /.settings/ .DS_Store -/doc/ /installer/ settings diff --git a/README.md b/README.md index a934c67..62ab1f3 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Bitchanger ist ein Programm zum umwandeln von diversen Zahlensystemen. Das Hauptmerkmal liegt bei der Umwandlung +Bitchanger ist ein Programm zum Umwandeln von diversen Zahlensystemen. Das Hauptmerkmal liegt bei der Umwandlung von verschiedenen Zahlensystemen mit Nachkommastellen. Zusätzlich ist es möglich in unterschiedlichen Zahlensystemen die Grundrechenarten und Bitoperationen durchzuführen. Auch die Umwandlung von Dezimalsystem zu IEEE-Norm (32-Bit oder 16-Bit) ist möglich. diff --git a/build_doc.bat b/build_doc.bat deleted file mode 100644 index c897bdc..0000000 --- a/build_doc.bat +++ /dev/null @@ -1,24 +0,0 @@ -@echo off -rem Dieses Script erstellt mit Hilfe des JavaDocParser Tools und Ant Build die -rem Dokumentation zum Bitchanger. Es werden eine öffentliche Dokumentation(alle -rem mit public oder protectet gekenzeichneten Klassen / Methoden) und eine private -rem Dokumentation (alles enthalten) jeweils in deutsch und in englisch erzeugt - - -rem ---- DocSource erzeugen ---------------------------------------------------------------------------------------------- - - - - -rem ---- Doc erzeugen ---------------------------------------------------------------------------------------------- - -echo. -echo -echo. - - - -rem ---- Auf Bestaetigung von Benutzer warten ----------------------------------------------------------------------------- -echo "Zum Abschliessen eine beliebige Taste druecken" -pause - diff --git a/build_installer_mac.command b/build_installer_mac.command index 52feea9..8a7b654 100755 --- a/build_installer_mac.command +++ b/build_installer_mac.command @@ -14,7 +14,7 @@ cd "$(dirname "$0")" # zum Pfad dieses Skriptes wechseln NAME="Bitchanger" DESCRIPTION="Rechner fuer beliebige Zahlensysteme" VERSION="0.1.4" -VENDOR="Entwicklungsprojekt_EB2020" +VENDOR="Entwicklungsprojekt_EB2020 by Tim Mühle and Moritz Wolter" # set COPYRIGHT = "" # set LICENSE_FILE = "" diff --git a/build_installer_win.bat b/build_installer_win.bat index 430674d..330dfe8 100644 --- a/build_installer_win.bat +++ b/build_installer_win.bat @@ -12,7 +12,7 @@ rem Mit den folgeneden Variablen koennen die Grundlegenden Daten fuer das Projek set NAME=Bitchanger set DESCRIPTION="Rechner fuer beliebige Zahlensysteme" if not defined VERSION set VERSION=0.1.4 -set VENDOR=Entwicklungsprojekt_EB2020 +set VENDOR="Entwicklungsprojekt_EB2020 by Tim Mühle and Moritz Wolter" rem set COPYRIGHT = "" rem set LICENSE_FILE = "" diff --git a/build_mvn_and_installer_linux.sh b/build_mvn_and_installer_linux.sh index 26a10bf..47bcf0b 100755 --- a/build_mvn_and_installer_linux.sh +++ b/build_mvn_and_installer_linux.sh @@ -18,7 +18,7 @@ cd "$(dirname "$0")" # zum Pfad dieses Skriptes wechseln NAME=Bitchanger DESCRIPTION="Rechner fuer beliebige Zahlensysteme" VERSION=0.1.4 -VENDOR=Entwicklungsprojekt_EB2020 +VENDOR="Entwicklungsprojekt_EB2020 by Tim Mühle and Moritz Wolter" # set COPYRIGHT = "" # set LICENSE_FILE = "" diff --git a/build_mvn_and_installer_linux_rpm.sh b/build_mvn_and_installer_linux_rpm.sh index 84ab7aa..a9dd68e 100755 --- a/build_mvn_and_installer_linux_rpm.sh +++ b/build_mvn_and_installer_linux_rpm.sh @@ -18,7 +18,7 @@ cd "$(dirname "$0")" # zum Pfad dieses Skriptes wechseln NAME=Bitchanger DESCRIPTION="Rechner fuer beliebige Zahlensysteme" VERSION=0.1.4 -VENDOR=Entwicklungsprojekt_EB2020 +VENDOR="Entwicklungsprojekt_EB2020 by Tim Mühle and Moritz Wolter" # set COPYRIGHT = "" # set LICENSE_FILE = "" diff --git a/build_mvn_and_installer_mac.command b/build_mvn_and_installer_mac.command index 9dcfcbd..3c4d9ad 100755 --- a/build_mvn_and_installer_mac.command +++ b/build_mvn_and_installer_mac.command @@ -18,7 +18,7 @@ cd "$(dirname "$0")" # zum Pfad dieses Skriptes wechseln NAME="Bitchanger" DESCRIPTION="Rechner fuer beliebige Zahlensysteme" VERSION="0.1.4" -VENDOR="Entwicklungsprojekt_EB2020" +VENDOR="Entwicklungsprojekt_EB2020 by Tim Mühle and Moritz Wolter" # set COPYRIGHT = "" # set LICENSE_FILE = "" diff --git a/build_mvn_and_installer_win.bat b/build_mvn_and_installer_win.bat index 63998ce..f6e30d3 100644 --- a/build_mvn_and_installer_win.bat +++ b/build_mvn_and_installer_win.bat @@ -9,7 +9,7 @@ rem Mit den folgeneden Variablen koennen die Grundlegenden Daten fuer das Projek set NAME=Bitchanger set DESCRIPTION="Rechner fuer beliebige Zahlensysteme" set VERSION=0.1.4 -set VENDOR=Entwicklungsprojekt_EB2020 +set VENDOR="Entwicklungsprojekt_EB2020 by Tim Mühle and Moritz Wolter" set INPUT=installer\source\Windows set OUT=installer\%VERSION%\Windows diff --git a/doc/0.1.4/de_private/allclasses-index.html b/doc/0.1.4/de_private/allclasses-index.html new file mode 100644 index 0000000..727e279 --- /dev/null +++ b/doc/0.1.4/de_private/allclasses-index.html @@ -0,0 +1,398 @@ + + + + + +All Classes + + + + + + + + + + + + + + + +
+ +
+
+
+

All Classes

+
+
+
    +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    All Classes Interface Summary Class Summary Enum Summary 
    ClassDescription
    AlphaNumGridView +
    View, die die Basis Scene für eine Tabelle aus einer Spalte mit Labels, einer Spalte mit Textfeldern + und einer Tastaturmatrix aus AlphaNumKeys erstellt.
    +
    AlphaNumGridView.ConstraintType +
    Aufzählung von möglichen Typen für Constraints einer GridPane
    +
    AlphaNumKeys +
    AlphaNumKeys stellt ein Tastaturlayout als 4x5 Matrix bereit.
    +
    AlphaNumKeysController +
    Dieser Controller gibt den Bedienelementen einer Instanz von AlphaNumKeys eine Funktion und bindet die Simulation der + Tastatur an die gekapselte Scene.
    +
    ArrayUtils +
    Klasse, die Werkzeug-Methoden für Arrays enthält.
    +
    BaseSpinner +
    Spinner, mit dem die Basis für ein Zahlensystem ausgewählt werden kann.
    +
    BasicMenuBar +
    Basis Menüleiste, die die allgemein benötigten Menüpunkte enthält.
    +
    BasicMenuController 
    BitchangerLauncher +
    Diese Klasse enthält die Main-Methode, die der Einstiegspunkt für die Applikation ist.
    +
    Calculable 
    CalculatorView 
    ChangeableNumber +
    Schnittstelle, die Methoden definiert, um eine Zahl aus einem beliebigen Zahlensystem + in beliebige andere Zahlensysteme umzuwandeln
    +
    Comma +
    Aufzählung der Wrapper-Klasse Comma, die das Zeichen für ein Komma repräsentiert.
    +
    Controllable +
    Schnittstelle, die Methoden definiert, um eine View mit einem Controller zu verbinden.
    +
    ControllableApplication +
    Schnittstelle, die Methoden definiert, um eine Application mit einem Controller zu verbinden.
    +
    Controller +
    Schnittstelle, die einen Controller beschreibt.
    +
    ControllerBase<T extends Controllable> +
    Basis für einen Controller, der einer Instanz von Controllable (z.B. eine View) eine Funktion gibt.
    +
    ConverterController +
    Controller, der die Funktion für eine ConverterView bereitstellt.
    +
    ConverterMenuBar 
    ConverterMenuController 
    ConverterView +
    View, die die Scene für die Umwandlung von Zahlensystemen enthält.
    +
    ConvertingNumbers +
    Die Klasse ConvertingNumbers enthält Methoden zum Umwandeln von Zahlen mit verschiedenen Zahlensystemen.
    +
    FXUtils +
    Utility-Klasse zur allgemeinen Verarbeitung von Objekten, die zur Oberfläche gehören.
    +
    IconFactory +
    Factory Klasse für das Erstellen von SVGIcons
    +
    IEEEController 
    IEEEMenuController 
    IEEEView +
    View, die die Scene für die Umwandlung zwischen dezimal Zahlen und der IEEE-Norm enthält.
    +
    InformationDialog 
    InformationDialog.InformationType 
    Preferences +
    Preferences ist die globale Sammlung für alle möglichen Einstellungen, die am Bitchanger vorgenommen + werden können.
    +
    PrimaryFXApp +
    Hauptfenster der Applikation mit javaFX
    +
    Resources +
    Enthält alle benötigten Ressourcen, wie Pfade zu den CSS Dateien oder den Icons
    +
    SimpleChangeableNumber +
    Die Klasse SimpleChangeableNumber bietet eine vollständige Implementierung von ChangeableNumber.
    +
    Style +
    Aufzählung für verschiedene Stile, die als CSS Datei für javaFX verfügbar sind
    +
    SVGIcon 
    TriConsumer<T,​U,​V> +
    Repräsentiert eine Operation, die drei Übergabeparameter akzeptiert und keine Rückgabe hat.
    +
    UnfocusedButton +
    Button, der beim Klick nicht den Fokus erhält und als Grundform ein Rechteck ohne abgerundete Ecken besitzt.
    +
    ValueButton +
    UnfocusedButton mit einer zusätzlichen Property für die Einstellung einer Basis.
    +
    ValueField +
    TextFeld, in dem eine Zahl zu einem bestimmten Zahlensystem eingegeben werden kann.
    +
    Viewable +
    Die Schnittstelle Viewable definiert die Basis für eine View.
    +
    ViewBase<T extends javafx.scene.Parent> +
    Basis-Klasse für alle View-Klassen, die das Interface Viewable implementieren und mit einem + Controller eine Funktion erhalten.
    +
    +
  • +
+
+
+ + + diff --git a/doc/0.1.4/de_private/allclasses.html b/doc/0.1.4/de_private/allclasses.html new file mode 100644 index 0000000..ea996b5 --- /dev/null +++ b/doc/0.1.4/de_private/allclasses.html @@ -0,0 +1,69 @@ + + + + + +All Classes + + + + + + + + + + + + + +

All Classes

+
+ +
+ + diff --git a/doc/0.1.4/de_private/allpackages-index.html b/doc/0.1.4/de_private/allpackages-index.html new file mode 100644 index 0000000..87c5e39 --- /dev/null +++ b/doc/0.1.4/de_private/allpackages-index.html @@ -0,0 +1,205 @@ + + + + + +All Packages + + + + + + + + + + + + + + + +
+ +
+
+
+

All Packages

+
+
+
    +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Package Summary 
    PackageDescription
    bitchanger.calculations +
    Bietet alle Klassen, die zur Berechnung der Daten benötigt werden.
    +
    bitchanger.gui.controller +
    Stellt Controller bereit, die den Views eine Funktion geben.
    +
    bitchanger.gui.controls +
    Stellt angepasste Bedienelemente und Funktionen für die Benutzeroberfläche zur Verfügung
    +
    bitchanger.gui.views +
    Bietet verschiedene Views, die auf einer graphischen Oberfläche präsentiert werden können
    +
    bitchanger.main +
    Beinhaltet den Launcher mit der Main-Methode und die JavaFX Applikation zum starten der grafischen Oberfläche.
    +
    bitchanger.preferences +
    Mit den Klassen aus diesem Package können alle Komponenten auf globale Einstellungen zugreifen und diese verändern.
    +
    bitchanger.util +
    Enthält Klassen mit allgemeinen und klassenübergreifend benötigten Methoden.
    +
    +
  • +
+
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/BitchangerLauncherApp.html b/doc/0.1.4/de_private/bitchanger/BitchangerLauncherApp.html new file mode 100644 index 0000000..cde8001 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/BitchangerLauncherApp.html @@ -0,0 +1,327 @@ + + + + + +BitchangerLauncherApp + + + + + + + + + + + + + + + +
+ +
+ +
+
+
Package bitchanger
+

Class BitchangerLauncherApp

+
+
+ +
+
    +
  • +
    +
    public class BitchangerLauncherApp
    +extends Object
    +
    Diese Klasse enthält die Main-Methode, die der Einstiegspunkt für die Applikation ist.
    +
    +
    Since:
    +
    0.1.0
    +
    Version:
    +
    0.1.0
    +
    Author:
    +
    Tim Mühle
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        BitchangerLauncherApp

        +
        public BitchangerLauncherApp()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        main

        +
        public static void main​(String[] args)
        +
        Die Main Methode liest zuerst alle gespeicherten Einstellungen für die Klasse Preferences ein. + Danach wird das Hauptfenster der Anwendung gestartet und gewartet, bis dieses geschlossen wurde.
        +
        +
        Parameters:
        +
        args - Argumente, die beim Programmstart übergeben werden. Die Argumente werden vom Programm ignoriert.
        +
        See Also:
        +
        Preferences, +Hauptfenster.main(String[])
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/calculations/Calculable.html b/doc/0.1.4/de_private/bitchanger/calculations/Calculable.html new file mode 100644 index 0000000..9d9419f --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/calculations/Calculable.html @@ -0,0 +1,191 @@ + + + + + +Calculable + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface Calculable

+
+
+
+
    +
  • +
    +
    public interface Calculable
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/calculations/ChangeableNumber.html b/doc/0.1.4/de_private/bitchanger/calculations/ChangeableNumber.html new file mode 100644 index 0000000..1e09cac --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/calculations/ChangeableNumber.html @@ -0,0 +1,565 @@ + + + + + +ChangeableNumber + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface ChangeableNumber

+
+
+
+
    +
  • +
    +
    All Known Implementing Classes:
    +
    SimpleChangeableNumber
    +
    +
    +
    public interface ChangeableNumber
    +
    Schnittstelle, die Methoden definiert, um eine Zahl aus einem beliebigen Zahlensystem + in beliebige andere Zahlensysteme umzuwandeln
    +
    +
    Since:
    +
    Bitchanger 0.1.0
    +
    Version:
    +
    0.1.4
    +
    Author:
    +
    Tim Mühle
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Abstract Methods Default Methods 
      Modifier and TypeMethodDescription
      default doubleasDouble() 
      voidreset() +
      Setzt den eingeschlossenen Wert zurück.
      +
      default voidset​(double decValue) 
      voidsetBin​(String binValue) +
      Setzt den Wert dieser ChangeableNumber auf den Wert eines binären Strings
      +
      voidsetDec​(String decValue) +
      Setzt den Wert dieser ChangeableNumber auf den Wert eines dezimalen Strings
      +
      voidsetHex​(String hexValue) +
      Setzt den Wert dieser ChangeableNumber auf den Wert eines hexadezimalen Strings
      +
      voidsetOct​(String octValue) +
      Setzt den Wert dieser ChangeableNumber auf den Wert eines oktalen Strings
      +
      voidsetValue​(String value, + int baseOfValue) +
      Setzt den Wert dieser ChangeableNumber auf einen Wert in einem beliebigen Zahlensystem
      +
      StringtoBaseString​(int base) +
      Gibt die String-Darstellung dieser ChangeableNumber zu einer beliebigen Basis zurück.
      +
      StringtoBinString() +
      Gibt die String-Darstellung dieser ChangeableNumber als binären String zurück.
      +
      StringtoDecString() +
      Gibt die String-Darstellung dieser ChangeableNumber als dezimalen String zurück.
      +
      StringtoHexString() +
      Gibt die String-Darstellung dieser ChangeableNumber als hexadezimalen String zurück.
      +
      StringtoOctString() +
      Gibt die String-Darstellung dieser ChangeableNumber als oktalen String zurück.
      +
      +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        asDouble

        +
        default double asDouble()
        +
      • +
      + + + +
        +
      • +

        set

        +
        default void set​(double decValue)
        +
      • +
      + + + + + + + + + + + + + + + + + + + + + + + +
        +
      • +

        reset

        +
        void reset()
        +
        Setzt den eingeschlossenen Wert zurück. Der vorherige Wert wird gelöscht! Wird nach dieser Methode + eine der toString-Methoden aufgerufen, wird ein leerer String zurückgegeben. +

        + Mit einer der set-Methoden kann der eingeschlossene Wert wieder neu gesetzt werden. +

        +
      • +
      + + + +
        +
      • +

        toHexString

        +
        String toHexString()
        +
        Gibt die String-Darstellung dieser ChangeableNumber als hexadezimalen String zurück. +

        + Der String wird nicht als hexadezimal gekennzeichnet, es wird also nicht das Präfix 0x vorangestellt! +

        +
        +
        Returns:
        +
        hexadezimale String-Darstellung dieser ChangeableNumber
        +
        +
      • +
      + + + +
        +
      • +

        toDecString

        +
        String toDecString()
        +
        Gibt die String-Darstellung dieser ChangeableNumber als dezimalen String zurück.
        +
        +
        Returns:
        +
        dezimale String-Darstellung dieser ChangeableNumber
        +
        +
      • +
      + + + +
        +
      • +

        toOctString

        +
        String toOctString()
        +
        Gibt die String-Darstellung dieser ChangeableNumber als oktalen String zurück. +

        + Der String wird nicht als oktal gekennzeichnet, es wird also kein Präfix vorangestellt! +

        +
        +
        Returns:
        +
        oktale String-Darstellung dieser ChangeableNumber
        +
        +
      • +
      + + + +
        +
      • +

        toBinString

        +
        String toBinString()
        +
        Gibt die String-Darstellung dieser ChangeableNumber als binären String zurück. +

        + Der String wird nicht als binär gekennzeichnet, es wird also nicht das Präfix 0b vorangestellt! +

        +
        +
        Returns:
        +
        binäre String-Darstellung dieser ChangeableNumber
        +
        +
      • +
      + + + +
        +
      • +

        toBaseString

        +
        String toBaseString​(int base)
        +             throws IllegalArgumentException
        +
        Gibt die String-Darstellung dieser ChangeableNumber zu einer beliebigen Basis zurück. +

        + Der String wird nicht durch ein Präfix gekennzeichnet! +

        +
        +
        Parameters:
        +
        base - Basis des Zahlensystems, in dem diese ChangeableNumber dargestellt werden soll
        +
        Returns:
        +
        String-Darstellung dieser ChangeableNumber zur übergebenen Basis
        +
        Throws:
        +
        IllegalArgumentException - wenn base den Wertebereich [2, 36] verlässt   -   see ConvertingNumbers.isValueToBase(int, String)
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/calculations/ConvertingNumbers.html b/doc/0.1.4/de_private/bitchanger/calculations/ConvertingNumbers.html new file mode 100644 index 0000000..b2cc98d --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/calculations/ConvertingNumbers.html @@ -0,0 +1,1058 @@ + + + + + +ConvertingNumbers + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ConvertingNumbers

+
+
+ +
+
    +
  • +
    +
    public class ConvertingNumbers
    +extends Object
    +
    Die Klasse ConvertingNumbers enthält Methoden zum Umwandeln von Zahlen mit verschiedenen Zahlensystemen. +

    + Die Methoden dieser Klasse können sowohl ganze Zahlen als auch Kommazahlen mit positiven oder negativen Wert umwandeln. + Es werden beliebige Zahlensysteme von der Basis 2 bis zur Basis 36 unterstützt, was dem Zeichenvorrat 0-9 und A-Z entspricht. + In der String-Darstellung können Zahlen mit Ziffern, Großbuchstaben und Kleinbuchstaben an die Methoden dieser Klasse + übergeben werden, allerdings enthalten die Rückgaben in der String-Darstellung aller Methoden ausschließlich Zahlen + und Großbuchstaben. +

    +

    + Das Komma-Zeichen kann mit der Klasse Preferences auf Deutsch (,) oder Englisch (.) eingestellt werden. + Ebenso kann der Indikator für abgeschnittene Nachkommastellen (...) aktiviert oder deaktiviert werden. +

    +
    +
    Since:
    +
    Bitchanger 0.1.0
    +
    Version:
    +
    0.1.4
    +
    Author:
    +
    Tim Mühle, Moritz Wolter
    +
    See Also:
    +
    Preferences
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      static StringFRACTIONAL_PRECISION_INDICATOR +
      Indikator für Abgeschnittene Nachkommastellen bei der Umwandlung vom Zehnersystem in ein anderes, beliebiges Zahlensystem
      +
      static intMAX_BASE +
      Eine Konstante für die größtmögliche Basis bei einem Zeichenvorrat von 0-9 und A-Z
      +
      static intMIN_BASE +
      Eine Konstante für die kleinstmögliche Basis
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + +
      Constructors 
      ModifierConstructorDescription
      private ConvertingNumbers() +
      Diese Klasse ist nicht instanziierbar
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Concrete Methods 
      Modifier and TypeMethodDescription
      static doublebaseToDec​(int base, + String value) +
      Wandelt die übergebene Zahl value zur beliebigen Basis base in eine Zahl zur Basis 10 als double um.
      +
      private static doublebaseToDecFractionalPart​(int base, + String fractionalPart) +
      Wandelt den übergebenen Nachkommateil einer Zahl zu einer beliebigen Basis ins Zehnersystem um.
      +
      private static doublebaseToDecIntPart​(int base, + String integerPart) +
      Wandelt die übergebene ganze Zahl integerPart zur beliebigen Basis base ins Zehnersystem um.
      +
      static StringbaseToDecString​(int base, + String value) +
      Wandelt die übergebene Zahl value zur beliebigen Basis base in eine Zahl zur Basis 10 in der String-Darstellung um.
      +
      static StringbaseToDecString​(int base, + String value, + char comma) +
      Wandelt die übergebene Zahl value zur beliebigen Basis base in eine Zahl zur Basis 10 in der String-Darstellung um.
      +
      private static voidcheckValue​(int base, + String value) +
      Überprüft, ob der übergebene String value eine Zahl zur Basis base ist + und wirft eine Exception, wenn dies nicht der Fall ist.
      +
      private static StringconvertDecFractionalToBaseString​(int newBase, + double fractionalPart, + int fractionalPrecision, + char comma) +
      Wandelt einen Nachkommateil vom Zehnersystem in einen Wert zu einer beliebigen Basis in der String-Darstellung um.
      +
      private static StringconvertDecIntegerToBaseString​(int newBase, + long integerPart) +
      Wandelt einen ganzzahligen Wert vom Zehnersystem in einen Wert zu einer beliebigen Basis in der String-Darstellung um.
      +
      static StringdecToBase​(int newBase, + String decValue) +
      Wandelt die übergebene Zahl decValue zur Basis 10 in eine Zahl zur beliebigen Basis newBase in der String-Darstellung um.
      +
      static StringdecToBase​(int newBase, + String decValue, + char comma) +
      Wandelt die übergebene Zahl decValue zur Basis 10 in eine Zahl zur beliebigen Basis newBase in der String-Darstellung um.
      +
      static StringdecToBase​(int newBase, + String decValue, + char comma, + int fractionalPrecision) +
      Wandelt die übergebene Zahl decValue zur Basis 10 in eine Zahl zur beliebigen Basis newBase in der String-Darstellung um.
      +
      static StringdecToBaseBlocks​(int newBase, + String decValue, + char comma, + int blockSize) +
      Wandelt die übergebene Zahl decValue zur Basis 10 in eine Zahl zur beliebigen Basis newBase in der String-Darstellung um + und unterteilt die Zahl in Blöcke der gewünschten Länge.
      +
      private static chardigitOfValue​(int value) +
      Berechnet das Zeichen für eine Stellenwertigkeit.
      +
      private static StringgetFirstComma​(String value) +
      überprüft, ob bei dem übergebenen String zuerst ein deutsches Komma (,) oder ein englisches Komma (.) auftaucht.
      +
      private static StringBufferinsertSpace​(StringBuffer sb, + int blockSize) +
      Unterteilt den übergebenen StringBuffer in Blöcke mit bestimmter Länge
      +
      static booleanisValueToBase​(int base, + String value) +
      Prüft, ob value eine Zahl zur geforderten Basis base repräsentiert.
      +
      private static String[]separateByComma​(String value) +
      Separiert den Anteil vor und nach dem Komma bzw.
      +
      static StringsplitInBlocks​(String value, + int blockSize) +
      Unterteilt den übergebenen String in Blöcke mit der gegebenen Länge, beispielsweise + zur Tausendertrennung
      +
      private static StringtrimToNumberString​(String value) +
      Schneidet den übergebenen String so zu, dass dieser nicht mehr den Indikator für abgeschnittene Nachkommastellen + und keine Leerzeichen enthält und wandelt alle Buchstaben in Großbuchstaben um.
      +
      private static intvalueOfDigit​(char digit) +
      Berechnet die Stellenwertigkeit, die von einem Zeichen repräsentiert wird.
      +
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        MIN_BASE

        +
        public static final int MIN_BASE
        +
        Eine Konstante für die kleinstmögliche Basis
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        MAX_BASE

        +
        public static final int MAX_BASE
        +
        Eine Konstante für die größtmögliche Basis bei einem Zeichenvorrat von 0-9 und A-Z
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        FRACTIONAL_PRECISION_INDICATOR

        +
        public static final String FRACTIONAL_PRECISION_INDICATOR
        +
        Indikator für Abgeschnittene Nachkommastellen bei der Umwandlung vom Zehnersystem in ein anderes, beliebiges Zahlensystem
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ConvertingNumbers

        +
        private ConvertingNumbers()
        +
        Diese Klasse ist nicht instanziierbar
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        isValueToBase

        +
        public static boolean isValueToBase​(int base,
        +                                    String value)
        +                             throws IllegalArgumentException
        +
        Prüft, ob value eine Zahl zur geforderten Basis base repräsentiert. + Ist der Indikator für abgeschnittene Nachkommastellen aktiviert, wird dieser bei der Auswertung ignoriert. + Leerzeichen können als Tausender-Trennung verwendet werden und werden von dieser Methode ebenfalls ignoriert.
        +
        +
        Parameters:
        +
        value - zu prüfende Zahl repräsentiert als String
        +
        base - geforderte Basis von value - erlaubt sind nur Werte von 2 bis 36 (einschließlich)
        +
        Returns:
        +
        true, wenn value eine Zahl zur geforderten Basis base + repräsentiert, andernfalls wird false zurückgegeben
        +
        Throws:
        +
        IllegalArgumentException - wenn basis den Wertebereich [2, 36] verlässt
        +
        +
      • +
      + + + + + + + + + + + +
        +
      • +

        baseToDecString

        +
        public static String baseToDecString​(int base,
        +                                     String value,
        +                                     char comma)
        +                              throws NullPointerException,
        +                                     NumberFormatException,
        +                                     IllegalArgumentException
        +
        Wandelt die übergebene Zahl value zur beliebigen Basis base in eine Zahl zur Basis 10 in der String-Darstellung um.
        +
        +
        Parameters:
        +
        base - die spezifische Basis des übergebenen Wertes value
        +
        value - der Zahlenwert, der umgewandelt werden soll, in der String-Darstellung
        +
        comma - das Zeichen, welches als Komma in Gleitpunktzahlen verwendet wird
        +
        Returns:
        +
        Wert der Zahl im Zehnersystem in der String-Darstellung
        +
        Throws:
        +
        NullPointerException - wenn der Parameter value null ist
        +
        NumberFormatException - wenn der Parameter value keine Zahl zur Basis base ist
        +
        IllegalArgumentException - wenn value ein leerer String ist oder wenn basis den Wertebereich [2, 36] verlässt   -   see isValueToBase(int,java.lang.String)
        +
        +
      • +
      + + + +
        +
      • +

        decToBase

        +
        public static String decToBase​(int newBase,
        +                               String decValue)
        +                        throws NullPointerException,
        +                               NumberFormatException
        +
        Wandelt die übergebene Zahl decValue zur Basis 10 in eine Zahl zur beliebigen Basis newBase in der String-Darstellung um. +

        + Wenn in der Klasse Preferences der Indikator für Nachkommastellen aktiviert ist, werden die wegen der + maximalen Anzahl von Nachkommastellen abgeschnittenen Nachkommastellen durch "..." angedeutet. +

        +
        +
        Parameters:
        +
        newBase - Basis des neuen Zahlensystems, in das die Zahl decValue umgewandelt werden soll
        +
        decValue - Wert der Zahl im Zehnersystem in der String-Darstellung
        +
        Returns:
        +
        umgewandelte Zahl zur übergebenen Basis in der String-Darstellung mit dem standardmäßig eingestellten Komma
        +
        Throws:
        +
        NullPointerException - wenn der Parameter decValue null ist
        +
        NumberFormatException - wenn der Parameter decValue keine Zahl zur Basis 10 ist
        +
        IllegalArgumentException - wenn decValue ein leerer String ist oder wenn newBase den Wertebereich [2, 36] verlässt   -   see isValueToBase(int,java.lang.String)
        +
        See Also:
        +
        Preferences
        +
        +
      • +
      + + + +
        +
      • +

        decToBase

        +
        public static String decToBase​(int newBase,
        +                               String decValue,
        +                               char comma)
        +                        throws NullPointerException,
        +                               NumberFormatException,
        +                               IllegalArgumentException
        +
        Wandelt die übergebene Zahl decValue zur Basis 10 in eine Zahl zur beliebigen Basis newBase in der String-Darstellung um. +

        + Wenn in der Klasse Preferences der Indikator für Nachkommastellen aktiviert ist, werden die wegen der + maximalen Anzahl von Nachkommastellen abgeschnittenen Nachkommastellen durch "..." angedeutet. +

        +
        +
        Parameters:
        +
        newBase - Basis des neuen Zahlensystems, in das die Zahl decValue umgewandelt werden soll
        +
        decValue - Wert der Zahl im Zehnersystem in der String-Darstellung
        +
        comma - das Zeichen, welches als Komma in Gleitpunktzahlen verwendet wird
        +
        Returns:
        +
        umgewandelte Zahl zur übergebenen Basis in der String-Darstellung mit maximal 15 Nachkommastellen
        +
        Throws:
        +
        NullPointerException - wenn der Parameter decValue null ist
        +
        NumberFormatException - wenn der Parameter decValue keine Zahl zur Basis 10 ist
        +
        IllegalArgumentException - wenn decValue ein leerer String ist oder wenn newBase den Wertebereich [2, 36] verlässt   -   see isValueToBase(int,java.lang.String)
        +
        See Also:
        +
        Preferences
        +
        +
      • +
      + + + +
        +
      • +

        decToBase

        +
        public static String decToBase​(int newBase,
        +                               String decValue,
        +                               char comma,
        +                               int fractionalPrecision)
        +                        throws NullPointerException,
        +                               NumberFormatException,
        +                               IllegalArgumentException,
        +                               UnsupportedOperationException
        +
        Wandelt die übergebene Zahl decValue zur Basis 10 in eine Zahl zur beliebigen Basis newBase in der String-Darstellung um. +

        + Wenn in der Klasse Preferences der Indikator für Nachkommastellen aktiviert ist, werden die wegen der + maximalen Anzahl von Nachkommastellen abgeschnittenen Nachkommastellen durch "..." angedeutet. +

        +
        +
        Parameters:
        +
        newBase - Basis des neuen Zahlensystems, in das die Zahl decValue umgewandelt werden soll
        +
        decValue - Wert der Zahl im Zehnersystem in der String-Darstellung
        +
        comma - das Zeichen, welches als Komma in Gleitpunktzahlen verwendet wird
        +
        fractionalPrecision - maximale Anzahl der Nachkommastellen
        +
        Returns:
        +
        umgewandelte Zahl zur übergebenen Basis in der String-Darstellung
        +
        Throws:
        +
        NullPointerException - wenn der Parameter decValue null ist
        +
        NumberFormatException - wenn der Parameter decValue keine Zahl zur Basis 10 ist
        +
        IllegalArgumentException - wenn decValue ein leerer String ist oder wenn newBase den Wertebereich [2, 36] verlässt   -   see isValueToBase(int,java.lang.String)
        +
        UnsupportedOperationException - wenn decValue negativ ist und Nachkommastellen enthält und gleichzeitig newBase zwei ist
        +
        See Also:
        +
        Preferences
        +
        +
      • +
      + + + +
        +
      • +

        decToBaseBlocks

        +
        public static String decToBaseBlocks​(int newBase,
        +                                     String decValue,
        +                                     char comma,
        +                                     int blockSize)
        +                              throws NullPointerException,
        +                                     NumberFormatException,
        +                                     IllegalArgumentException
        +
        Wandelt die übergebene Zahl decValue zur Basis 10 in eine Zahl zur beliebigen Basis newBase in der String-Darstellung um + und unterteilt die Zahl in Blöcke der gewünschten Länge. +

        + Wenn in der Klasse Preferences der Indikator für Nachkommastellen aktiviert ist, werden die wegen der + maximalen Anzahl von Nachkommastellen abgeschnittenen Nachkommastellen durch "..." angedeutet. +

        +
        +
        Parameters:
        +
        newBase - Basis des neuen Zahlensystems, in das die Zahl decValue umgewandelt werden soll
        +
        decValue - Wert der Zahl im Zehnersystem in der String-Darstellung
        +
        comma - das Zeichen, welches als Komma in Gleitpunktzahlen verwendet wird
        +
        blockSize - Länge der Blöcke, in die der String unterteilt wird
        +
        Returns:
        +
        umgewandelte Zahl zur übergebenen Basis in der String-Darstellung
        +
        Throws:
        +
        NullPointerException - wenn der Parameter decValue null ist
        +
        NumberFormatException - wenn der Parameter decValue keine Zahl zur Basis 10 ist
        +
        IllegalArgumentException - wenn decValue ein leerer String ist oder wenn newBase den Wertebereich [2, 36] verlässt   -   see isValueToBase(int,java.lang.String)
        +
        Since:
        +
        Bitchanger 0.1.4
        +
        See Also:
        +
        Preferences, +decToBase(int, String, char), +splitInBlocks(String, int)
        +
        +
      • +
      + + + +
        +
      • +

        splitInBlocks

        +
        public static String splitInBlocks​(String value,
        +                                   int blockSize)
        +
        Unterteilt den übergebenen String in Blöcke mit der gegebenen Länge, beispielsweise + zur Tausendertrennung
        +
        +
        Parameters:
        +
        value - String, der aufgeteilt wird
        +
        blockSize - Länge der Blöcke
        +
        Returns:
        +
        Aufgeteilter String mit Blöcken
        +
        Since:
        +
        Bitchanger 0.1.4
        +
        +
      • +
      + + + + + + + +
        +
      • +

        baseToDecIntPart

        +
        private static double baseToDecIntPart​(int base,
        +                                       String integerPart)
        +
        Wandelt die übergebene ganze Zahl integerPart zur beliebigen Basis base ins Zehnersystem um. + Zur Umwandlung von einem beliebigen Zahlensystem in das Zehnersystem wird das Horner-Schema verwendet.
        +
        +
        Parameters:
        +
        base - beliebige Basis des Zahlensystems von integerPart im Bereich [2; 36]
        +
        integerPart - umzuwandelnde Zahl in der String-Darstellung
        +
        Returns:
        +
        Wert der übergebenen Zahl im Zehnersystem als double
        +
        +
      • +
      + + + +
        +
      • +

        baseToDecFractionalPart

        +
        private static double baseToDecFractionalPart​(int base,
        +                                              String fractionalPart)
        +
        Wandelt den übergebenen Nachkommateil einer Zahl zu einer beliebigen Basis ins Zehnersystem um. + Zur Umwandlung von einem beliebigen Zahlensystem in das Zehnersystem wird das Horner-Schema verwendet.
        +
        +
        Parameters:
        +
        base - beliebige Basis des Zahlensystems von fractionalPart im Bereich [2; 36]
        +
        fractionalPart - umzuwandelnder Nachkommateil einer Zahl ohne Komma und als ganze Zahl in der String-Darstellung
        +
        Returns:
        +
        Wert des übergebenen Nachkommaanteils im Zehnersystem als double
        +
        +
      • +
      + + + +
        +
      • +

        convertDecIntegerToBaseString

        +
        private static String convertDecIntegerToBaseString​(int newBase,
        +                                                    long integerPart)
        +
        Wandelt einen ganzzahligen Wert vom Zehnersystem in einen Wert zu einer beliebigen Basis in der String-Darstellung um.
        +
        +
        Parameters:
        +
        newBase - Basis des neuen Zahlensystems
        +
        integerPart - ganzzahligen Wert im Zehnersystem
        +
        Returns:
        +
        umgewandelter Wert zur Basis basis in String-Darstellung
        +
        +
      • +
      + + + +
        +
      • +

        convertDecFractionalToBaseString

        +
        private static String convertDecFractionalToBaseString​(int newBase,
        +                                                       double fractionalPart,
        +                                                       int fractionalPrecision,
        +                                                       char comma)
        +
        Wandelt einen Nachkommateil vom Zehnersystem in einen Wert zu einer beliebigen Basis in der String-Darstellung um. + Wenn in der Klasse Preferences der Indikator für Nachkommastellen aktiviert ist, werden die wegen der + maximalen Anzahl von Nachkommastellen abgeschnittenen Nachkommastellen durch "..." angedeutet.
        +
        +
        Parameters:
        +
        newBase - Basis des neuen Zahlensystems
        +
        fractionalPart - Nachkommateil im Zehnersystem
        +
        fractionalPrecision - Maximale Anzahl von Nachkommastellen im Ergebnis
        +
        comma - Zeichen, das als Komma vor dem Nachkommateil platziert wird
        +
        Returns:
        +
        umgewandelter Nachkommateil zur neuen Basis in String-Darstellung mit führendem Komma
        +
        See Also:
        +
        Preferences.setIndicateFractionalPrecision(boolean)
        +
        +
      • +
      + + + +
        +
      • +

        digitOfValue

        +
        private static char digitOfValue​(int value)
        +
        Berechnet das Zeichen für eine Stellenwertigkeit. + Die Ziffern 0 bis 9 entsprechen der Wertigkeit 0 bis 9, die Buchstaben A bis Z entsprechen der Wertigkeit 10 bis 35.
        +
        +
        Parameters:
        +
        value - Wert der gesuchten Stelle zur Basis 10
        +
        Returns:
        +
        Zeichen, das die Stellenwertigkeit des übergebenen Wertes repräsentiert
        +
        See Also:
        +
        valueOfDigit(char)
        +
        +
      • +
      + + + +
        +
      • +

        valueOfDigit

        +
        private static int valueOfDigit​(char digit)
        +
        Berechnet die Stellenwertigkeit, die von einem Zeichen repräsentiert wird. + Die Ziffern 0 bis 9 entsprechen der Wertigkeit 0 bis 9, die Buchstaben A bis Z entsprechen der Wertigkeit 10 bis 35.
        +
        +
        Parameters:
        +
        digit - Zeichen, dessen Wertigkeit berechnet wird
        +
        Returns:
        +
        Stellenwertigkeit, die von digit repräsentiert wird
        +
        See Also:
        +
        digitOfValue(int)
        +
        +
      • +
      + + + +
        +
      • +

        separateByComma

        +
        private static String[] separateByComma​(String value)
        +                                 throws NumberFormatException
        +
        Separiert den Anteil vor und nach dem Komma bzw. Punkt (je nach Format) des übergebenen String value, + der eine Zahl zu der Basis base repräsentiert, und gibt diese beiden separierten Strings ohne führende 0 + im Nachkommateil zurück.
        +
        +
        Parameters:
        +
        value - Zahl, die zerlegt werden soll
        +
        Returns:
        +
        ganzen Anteil im Index 0 und Nachkommateil im Index 1, jeweils als ganze Zahl in der String-Darstellung
        +
        Throws:
        +
        NumberFormatException - Wenn es sich bei value nicht um eine Zahl in der String-Darstellung handelt, da zu viele Kommata vorhanden sind
        +
        +
      • +
      + + + +
        +
      • +

        getFirstComma

        +
        private static String getFirstComma​(String value)
        +
        überprüft, ob bei dem übergebenen String zuerst ein deutsches Komma (,) oder ein englisches Komma (.) auftaucht.
        +
        +
        Parameters:
        +
        value - String, der auf Kommata überprüft wird
        +
        Returns:
        +
        das Komma, welches zuerst in dem String auftaucht oder null, wenn kein Komma enthalten ist
        +
        +
      • +
      + + + +
        +
      • +

        trimToNumberString

        +
        private static String trimToNumberString​(String value)
        +
        Schneidet den übergebenen String so zu, dass dieser nicht mehr den Indikator für abgeschnittene Nachkommastellen + und keine Leerzeichen enthält und wandelt alle Buchstaben in Großbuchstaben um.
        +
        +
        Parameters:
        +
        value - String, der formatiert werden soll
        +
        Returns:
        +
        zugeschnittener String
        +
        +
      • +
      + + + +
        +
      • +

        insertSpace

        +
        private static StringBuffer insertSpace​(StringBuffer sb,
        +                                        int blockSize)
        +
        Unterteilt den übergebenen StringBuffer in Blöcke mit bestimmter Länge
        +
        +
        Parameters:
        +
        sb - StringBuffer, der unterteilt wird
        +
        blockSize - Länge der Blöcke
        +
        Returns:
        +
        den veränderten StringBuffer, der auch übergeben wurde
        +
        Since:
        +
        Bitchanger 0.1.4
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/calculations/SimpleChangeableNumber.html b/doc/0.1.4/de_private/bitchanger/calculations/SimpleChangeableNumber.html new file mode 100644 index 0000000..1de947b --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/calculations/SimpleChangeableNumber.html @@ -0,0 +1,817 @@ + + + + + +SimpleChangeableNumber + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class SimpleChangeableNumber

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    ChangeableNumber
    +
    +
    +
    public class SimpleChangeableNumber
    +extends Object
    +implements ChangeableNumber
    +
    Die Klasse SimpleChangeableNumber bietet eine vollständige Implementierung von ChangeableNumber. +

    + Jede Instanz dieser Klasse schließt einen Wert ein, der aus beliebigen Zahlensystemen gesetzt und in + verschiedene Zahlensysteme umgewandelt werden kann. Die String-Darstellungen in den verschiedenen + Zahlensystemen enthalten keine Präfixe, die auf die Basis hinweisen. +

    +

    + Die String Darstellungen der Zahlensysteme werden für bessere Lesbarkeit in Blöcke unterteilt. + Beim Hexadezimal- und Binärsystem sind die Blöcke vier Zeichen lang, in allen anderen Zahlensystemen + haben die Blöcke eine Länge von drei Zeichen. +

    +
    +
    Since:
    +
    Bitchanger 0.1.0
    +
    Version:
    +
    0.1.4
    +
    Author:
    +
    Tim Mühle, Moritz Wolter
    +
    See Also:
    +
    ChangeableNumber
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      private StringbinValue +
      eingeschlossener Wert in der binären String-Darstellung
      +
      private StringdecValue +
      eingeschlossener Wert in der dezimalen String-Darstellung
      +
      private StringhexValue +
      eingeschlossener Wert in der hexadezimalen String-Darstellung
      +
      private StringoctalValue +
      eingeschlossener Wert in der oktalen String-Darstellung
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      SimpleChangeableNumber() +
      Erzeugt eine neue Instanz mit dem eingeschlossenen Wert 0
      +
      SimpleChangeableNumber​(String decValue) +
      Erzeugt eine neue Instanz, die den übergebenen dezimal-Wert repräsentiert
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethodDescription
      private voidinitDecimal​(String decValue) +
      Setzt den eingeschlossenen Wert dieser SimpleChangeableNumber auf den übergebenen dezimal-Wert.
      +
      voidreset() +
      Setzt den eingeschlossenen Wert zurück.
      +
      voidsetBin​(String binValue) +
      Setzt den Wert dieser ChangeableNumber auf den Wert eines binären Strings
      +
      voidsetDec​(String decValue) +
      Setzt den Wert dieser ChangeableNumber auf den Wert eines dezimalen Strings
      +
      voidsetHex​(String hexValue) +
      Setzt den Wert dieser ChangeableNumber auf den Wert eines hexadezimalen Strings
      +
      voidsetOct​(String octValue) +
      Setzt den Wert dieser ChangeableNumber auf den Wert eines oktalen Strings
      +
      voidsetValue​(String value, + int baseOfValue) +
      Setzt den Wert dieser ChangeableNumber auf einen Wert in einem beliebigen Zahlensystem
      +
      StringtoBaseString​(int base) +
      Gibt die String-Darstellung dieser ChangeableNumber zu einer beliebigen Basis zurück.
      +
      StringtoBinString() +
      Gibt die String-Darstellung dieser ChangeableNumber als binären String zurück.
      +
      StringtoDecString() +
      Gibt die String-Darstellung dieser ChangeableNumber als dezimalen String zurück.
      +
      StringtoHexString() +
      Gibt die String-Darstellung dieser ChangeableNumber als hexadezimalen String zurück.
      +
      StringtoOctString() +
      Gibt die String-Darstellung dieser ChangeableNumber als oktalen String zurück.
      +
      StringtoString() +
      Gibt einen String zurück, der die hexadezimale, dezimale, oktale und + binäre Darstellung des eingeschlossenen Wertes enthält.
      +
      + + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        binValue

        +
        private String binValue
        +
        eingeschlossener Wert in der binären String-Darstellung
        +
      • +
      + + + +
        +
      • +

        decValue

        +
        private String decValue
        +
        eingeschlossener Wert in der dezimalen String-Darstellung
        +
      • +
      + + + +
        +
      • +

        hexValue

        +
        private String hexValue
        +
        eingeschlossener Wert in der hexadezimalen String-Darstellung
        +
      • +
      + + + +
        +
      • +

        octalValue

        +
        private String octalValue
        +
        eingeschlossener Wert in der oktalen String-Darstellung
        +
      • +
      +
    • +
    +
    + +
    + +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        initDecimal

        +
        private void initDecimal​(String decValue)
        +                  throws NullPointerException,
        +                         NumberFormatException,
        +                         IllegalArgumentException
        +
        Setzt den eingeschlossenen Wert dieser SimpleChangeableNumber auf den übergebenen dezimal-Wert. + Die String-Darstellungen für das Hexadezimal-, Oktal- und Binärsystem werden berechnet und in den Attributen gespeichert.
        +
        +
        Parameters:
        +
        decValue - neuer Wert, den diese SimpleChangeableNumber repräsentiert
        +
        Throws:
        +
        NullPointerException - wenn der Parameter decValue null ist
        +
        NumberFormatException - wenn der Parameter decValue keine Zahl zur Basis 10 ist
        +
        IllegalArgumentException - wenn decValue ein leerer String ist
        +
        +
      • +
      + + + + + + + + + + + + + + + + + + + + + + + +
        +
      • +

        reset

        +
        public void reset()
        +
        Setzt den eingeschlossenen Wert zurück. Der vorherige Wert wird gelöscht! Wird nach dieser Methode + eine der toString-Methoden aufgerufen, wird ein leerer String zurückgegeben. +

        + Mit einer der set-Methoden kann der eingeschlossene Wert wieder neu gesetzt werden. +

        +
        +
        Specified by:
        +
        reset in interface ChangeableNumber
        +
        +
      • +
      + + + +
        +
      • +

        toHexString

        +
        public String toHexString()
        +
        Gibt die String-Darstellung dieser ChangeableNumber als hexadezimalen String zurück. +

        + Der String wird nicht als hexadezimal gekennzeichnet, es wird also nicht das Präfix 0x vorangestellt! +

        +
        +
        Specified by:
        +
        toHexString in interface ChangeableNumber
        +
        Returns:
        +
        hexadezimale String-Darstellung dieser ChangeableNumber
        +
        +
      • +
      + + + +
        +
      • +

        toDecString

        +
        public String toDecString()
        +
        Gibt die String-Darstellung dieser ChangeableNumber als dezimalen String zurück.
        +
        +
        Specified by:
        +
        toDecString in interface ChangeableNumber
        +
        Returns:
        +
        dezimale String-Darstellung dieser ChangeableNumber
        +
        +
      • +
      + + + +
        +
      • +

        toOctString

        +
        public String toOctString()
        +
        Gibt die String-Darstellung dieser ChangeableNumber als oktalen String zurück. +

        + Der String wird nicht als oktal gekennzeichnet, es wird also kein Präfix vorangestellt! +

        +
        +
        Specified by:
        +
        toOctString in interface ChangeableNumber
        +
        Returns:
        +
        oktale String-Darstellung dieser ChangeableNumber
        +
        +
      • +
      + + + +
        +
      • +

        toBinString

        +
        public String toBinString()
        +
        Gibt die String-Darstellung dieser ChangeableNumber als binären String zurück. +

        + Der String wird nicht als binär gekennzeichnet, es wird also nicht das Präfix 0b vorangestellt! +

        +
        +
        Specified by:
        +
        toBinString in interface ChangeableNumber
        +
        Returns:
        +
        binäre String-Darstellung dieser ChangeableNumber
        +
        +
      • +
      + + + +
        +
      • +

        toBaseString

        +
        public String toBaseString​(int base)
        +                    throws IllegalArgumentException
        +
        Gibt die String-Darstellung dieser ChangeableNumber zu einer beliebigen Basis zurück. +

        + Der String wird nicht durch ein Präfix gekennzeichnet! +

        +
        +
        Specified by:
        +
        toBaseString in interface ChangeableNumber
        +
        Parameters:
        +
        base - Basis des Zahlensystems, in dem diese ChangeableNumber dargestellt werden soll
        +
        Returns:
        +
        String-Darstellung dieser ChangeableNumber zur übergebenen Basis
        +
        Throws:
        +
        IllegalArgumentException - wenn base den Wertebereich [2, 36] verlässt   -   see ConvertingNumbers.isValueToBase(int, String)
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString()
        +
        Gibt einen String zurück, der die hexadezimale, dezimale, oktale und + binäre Darstellung des eingeschlossenen Wertes enthält.
        +
        +
        Overrides:
        +
        toString in class Object
        +
        Returns:
        +
        String bestehend aus der hexadezimalen, dezimalen, oktalen und binären String-Darstellung des eingeschlossenen + Wertes, hintereinander aufgelistet
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/calculations/class-use/Calculable.html b/doc/0.1.4/de_private/bitchanger/calculations/class-use/Calculable.html new file mode 100644 index 0000000..b52cd64 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/calculations/class-use/Calculable.html @@ -0,0 +1,149 @@ + + + + + +Uses of Interface bitchanger.calculations.Calculable + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
bitchanger.calculations.Calculable

+
+
No usage of bitchanger.calculations.Calculable
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/calculations/class-use/ChangeableNumber.html b/doc/0.1.4/de_private/bitchanger/calculations/class-use/ChangeableNumber.html new file mode 100644 index 0000000..21983b1 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/calculations/class-use/ChangeableNumber.html @@ -0,0 +1,227 @@ + + + + + +Uses of Interface bitchanger.calculations.ChangeableNumber + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
bitchanger.calculations.ChangeableNumber

+
+
+ +
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/calculations/class-use/ConvertingNumbers.html b/doc/0.1.4/de_private/bitchanger/calculations/class-use/ConvertingNumbers.html new file mode 100644 index 0000000..2b8f91f --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/calculations/class-use/ConvertingNumbers.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.calculations.ConvertingNumbers + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.calculations.ConvertingNumbers

+
+
No usage of bitchanger.calculations.ConvertingNumbers
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/calculations/class-use/SimpleChangeableNumber.html b/doc/0.1.4/de_private/bitchanger/calculations/class-use/SimpleChangeableNumber.html new file mode 100644 index 0000000..b668711 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/calculations/class-use/SimpleChangeableNumber.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.calculations.SimpleChangeableNumber + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.calculations.SimpleChangeableNumber

+
+
No usage of bitchanger.calculations.SimpleChangeableNumber
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/calculations/package-summary.html b/doc/0.1.4/de_private/bitchanger/calculations/package-summary.html new file mode 100644 index 0000000..e0af086 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/calculations/package-summary.html @@ -0,0 +1,202 @@ + + + + + +bitchanger.calculations + + + + + + + + + + + + + + + +
+ +
+
+
+

Package bitchanger.calculations

+
+
+
+ + +
Bietet alle Klassen, die zur Berechnung der Daten benötigt werden.
+
+
    +
  • + + + + + + + + + + + + + + + + +
    Interface Summary 
    InterfaceDescription
    Calculable 
    ChangeableNumber +
    Schnittstelle, die Methoden definiert, um eine Zahl aus einem beliebigen Zahlensystem + in beliebige andere Zahlensysteme umzuwandeln
    +
    +
  • +
  • + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    ConvertingNumbers +
    Die Klasse ConvertingNumbers enthält Methoden zum Umwandeln von Zahlen mit verschiedenen Zahlensystemen.
    +
    SimpleChangeableNumber +
    Die Klasse SimpleChangeableNumber bietet eine vollständige Implementierung von ChangeableNumber.
    +
    +
  • +
+
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/calculations/package-tree.html b/doc/0.1.4/de_private/bitchanger/calculations/package-tree.html new file mode 100644 index 0000000..b1e8305 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/calculations/package-tree.html @@ -0,0 +1,172 @@ + + + + + +bitchanger.calculations Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package bitchanger.calculations

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+

Interface Hierarchy

+ +
+
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/calculations/package-use.html b/doc/0.1.4/de_private/bitchanger/calculations/package-use.html new file mode 100644 index 0000000..ed581de --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/calculations/package-use.html @@ -0,0 +1,215 @@ + + + + + +Uses of Package bitchanger.calculations + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
bitchanger.calculations

+
+
+ +
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/class-use/BitchangerLauncherApp.html b/doc/0.1.4/de_private/bitchanger/class-use/BitchangerLauncherApp.html new file mode 100644 index 0000000..0cf9b4a --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/class-use/BitchangerLauncherApp.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.BitchangerLauncherApp + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.BitchangerLauncherApp

+
+
No usage of bitchanger.BitchangerLauncherApp
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/components/Calculable.html b/doc/0.1.4/de_private/bitchanger/components/Calculable.html new file mode 100644 index 0000000..ccf263a --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/components/Calculable.html @@ -0,0 +1,191 @@ + + + + + +Calculable + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface Calculable

+
+
+
+
    +
  • +
    +
    public interface Calculable
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/components/ChangeableNumber.html b/doc/0.1.4/de_private/bitchanger/components/ChangeableNumber.html new file mode 100644 index 0000000..4b94f17 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/components/ChangeableNumber.html @@ -0,0 +1,537 @@ + + + + + +ChangeableNumber + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface ChangeableNumber

+
+
+
+
    +
  • +
    +
    All Known Implementing Classes:
    +
    SimpleChangeableNumber
    +
    +
    +
    public interface ChangeableNumber
    +
    Schnittstelle, die Methoden definiert, um eine Zahl aus einem beliebigen Zahlensystem + in beliebige andere Zahlensysteme umzuwandeln
    +
    +
    Since:
    +
    Bitchanger 0.1.0
    +
    Version:
    +
    0.1.4
    +
    Author:
    +
    Tim
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Abstract Methods 
      Modifier and TypeMethodDescription
      voidreset() +
      Setzt den eingeschlossenen Wert zurück.
      +
      voidsetBin​(String binValue) +
      Setzt den Wert dieser ChangeableNumber auf den Wert eines binären Strings
      +
      voidsetDec​(String decValue) +
      Setzt den Wert dieser ChangeableNumber auf den Wert eines dezimalen Strings
      +
      voidsetHex​(String hexValue) +
      Setzt den Wert dieser ChangeableNumber auf den Wert eines hexadezimalen Strings
      +
      voidsetOct​(String octValue) +
      Setzt den Wert dieser ChangeableNumber auf den Wert eines oktalen Strings
      +
      voidsetValue​(String value, + int baseOfValue) +
      Setzt den Wert dieser ChangeableNumber auf einen Wert in einem beliebigen Zahlensystem
      +
      StringtoBaseString​(int base) +
      Gibt die String-Darstellung dieser ChangeableNumber zu einer beliebigen Basis zurück.
      +
      StringtoBinString() +
      Gibt die String-Darstellung dieser ChangeableNumber als binären String zurück.
      +
      StringtoDecString() +
      Gibt die String-Darstellung dieser ChangeableNumber als dezimalen String zurück.
      +
      StringtoHexString() +
      Gibt die String-Darstellung dieser ChangeableNumber als hexadezimalen String zurück.
      +
      StringtoOctString() +
      Gibt die String-Darstellung dieser ChangeableNumber als oktalen String zurück.
      +
      +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + + + + + + + + + + + + + + + + + + + + + +
        +
      • +

        toHexString

        +
        String toHexString()
        +
        Gibt die String-Darstellung dieser ChangeableNumber als hexadezimalen String zurück. +

        + Der String wird nicht als hexadezimal gekennzeichnet, es wird also nicht das Präfix 0x vorangestellt! +

        +
        +
        Returns:
        +
        hexadezimale String-Darstellung dieser ChangeableNumber
        +
        +
      • +
      + + + +
        +
      • +

        toDecString

        +
        String toDecString()
        +
        Gibt die String-Darstellung dieser ChangeableNumber als dezimalen String zurück.
        +
        +
        Returns:
        +
        dezimale String-Darstellung dieser ChangeableNumber
        +
        +
      • +
      + + + +
        +
      • +

        toOctString

        +
        String toOctString()
        +
        Gibt die String-Darstellung dieser ChangeableNumber als oktalen String zurück. +

        + Der String wird nicht als oktal gekennzeichnet, es wird also kein Präfix vorangestellt! +

        +
        +
        Returns:
        +
        oktale String-Darstellung dieser ChangeableNumber
        +
        +
      • +
      + + + +
        +
      • +

        toBinString

        +
        String toBinString()
        +
        Gibt die String-Darstellung dieser ChangeableNumber als binären String zurück. +

        + Der String wird nicht als binär gekennzeichnet, es wird also nicht das Präfix 0b vorangestellt! +

        +
        +
        Returns:
        +
        binäre String-Darstellung dieser ChangeableNumber
        +
        +
      • +
      + + + +
        +
      • +

        toBaseString

        +
        String toBaseString​(int base)
        +             throws IllegalArgumentException
        +
        Gibt die String-Darstellung dieser ChangeableNumber zu einer beliebigen Basis zurück. +

        + Der String wird nicht durch ein Präfix gekennzeichnet! +

        +
        +
        Parameters:
        +
        base - Basis des Zahlensystems, in dem diese ChangeableNumber dargestellt werden soll
        +
        Returns:
        +
        String-Darstellung dieser ChangeableNumber zur übergebenen Basis
        +
        Throws:
        +
        IllegalArgumentException - wenn base den Wertebereich [2, 36] verlässt   -   see ConvertingNumbers.isValueToBase(int, String)
        +
        +
      • +
      + + + +
        +
      • +

        reset

        +
        void reset()
        +
        Setzt den eingeschlossenen Wert zurück. Der vorherige Wert wird gelöscht! Wird nach dieser Methode + eine der toString-Methoden aufgerufen, wird ein leerer String zurückgegeben. +

        + Mit einer der set-Methoden kann der eingeschlossene Wert wieder neu gesetzt werden. +

        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/components/ConvertingNumbers.html b/doc/0.1.4/de_private/bitchanger/components/ConvertingNumbers.html new file mode 100644 index 0000000..f545ff4 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/components/ConvertingNumbers.html @@ -0,0 +1,925 @@ + + + + + +ConvertingNumbers + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ConvertingNumbers

+
+
+ +
+
    +
  • +
    +
    public class ConvertingNumbers
    +extends Object
    +
    Die Klasse ConvertingNumbers enthält Methoden zum Umwandeln von Zahlen mit verschiedenen Zahlensystemen. +

    + Die Methoden dieser Klasse können sowohl ganze Zahlen als auch Kommazahlen mit positiven oder negativen Wert umwandeln. + Es werden beliebige Zahlensysteme von der Basis 2 bis zur Basis 36 unterstützt, was dem Zeichenvorrat 0-9 und A-Z entspricht. + In der String-Darstellung können Zahlen mit Ziffern, Großbuchstaben und Kleinbuchstaben an die Methoden dieser Klasse + übergeben werden, allerdings enthalten die Rückgaben in der String-Darstellung aller Methoden ausschließlich Zahlen + und Großbuchstaben. +

    +

    + Das Komma-Zeichen kann mit der Klasse Preferences auf Deutsch (,) oder Englisch (.) eingestellt werden. + Ebenso kann der Indikator für abgeschnittene Nachkommastellen (...) aktiviert oder deaktiviert werden. +

    +
    +
    Since:
    +
    Bitchanger 0.1.0
    +
    Version:
    +
    0.1.4
    +
    Author:
    +
    Tim Mühle, Moritz Wolter
    +
    See Also:
    +
    Preferences
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      static StringFRACTIONAL_PRECISION_INDICATOR +
      Indikator für Abgeschnittene Nachkommastellen bei der Umwandlung vom Zehnersystem in ein anderes, beliebiges Zahlensystem
      +
      static intMAX_BASE +
      Eine Konstante für die größtmögliche Basis bei einem Zeichenvorrat von 0-9 und A-Z
      +
      static intMIN_BASE +
      Eine Konstante für die kleinstmögliche Basis
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + +
      Constructors 
      ModifierConstructorDescription
      private ConvertingNumbers() +
      Diese Klasse ist nicht instanziierbar
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Concrete Methods 
      Modifier and TypeMethodDescription
      static doublebaseToDec​(int base, + String value) +
      Wandelt die übergebene Zahl value zur beliebigen Basis base in eine Zahl zur Basis 10 als double um.
      +
      private static doublebaseToDecFractionalPart​(int base, + String fractionalPart) +
      Wandelt den übergebenen Nachkommateil einer Zahl zu einer beliebigen Basis ins Zehnersystem um.
      +
      private static doublebaseToDecIntPart​(int base, + String integerPart) +
      Wandelt die übergebene ganze Zahl integerPart zur beliebigen Basis base ins Zehnersystem um.
      +
      static StringbaseToDecString​(int base, + String value) +
      Wandelt die übergebene Zahl value zur beliebigen Basis base in eine Zahl zur Basis 10 in der String-Darstellung um.
      +
      static StringbaseToDecString​(int base, + String value, + char comma) +
      Wandelt die übergebene Zahl value zur beliebigen Basis base in eine Zahl zur Basis 10 in der String-Darstellung um.
      +
      private static voidcheckValue​(int base, + String value) +
      Überprüft, ob der übergebene String value eine Zahl zur Basis base ist + und wirft eine Exception, wenn dies nicht der Fall ist.
      +
      private static StringconvertDecFractionalToBaseString​(int newBase, + double fractionalPart, + int fractionalPrecision, + char comma) +
      Wandelt einen Nachkommateil vom Zehnersystem in einen Wert zu einer beliebigen Basis in der String-Darstellung um.
      +
      private static StringconvertDecIntegerToBaseString​(int newBase, + long integerPart) +
      Wandelt einen ganzzahligen Wert vom Zehnersystem in einen Wert zu einer beliebigen Basis in der String-Darstellung um.
      +
      static StringdecToBase​(int newBase, + String decValue) +
      Wandelt die übergebene Zahl decValue zur Basis 10 in eine Zahl zur beliebigen Basis newBase in der String-Darstellung um.
      +
      static StringdecToBase​(int newBase, + String decValue, + char comma) +
      Wandelt die übergebene Zahl decValue zur Basis 10 in eine Zahl zur beliebigen Basis newBase in der String-Darstellung um.
      +
      static StringdecToBase​(int newBase, + String decValue, + char comma, + int fractionalPrecision) +
      Wandelt die übergebene Zahl decValue zur Basis 10 in eine Zahl zur beliebigen Basis newBase in der String-Darstellung um.
      +
      private static chardigitOfValue​(int value) +
      Berechnet das Zeichen für eine Stellenwertigkeit.
      +
      private static StringgetFirstComma​(String value) +
      überprüft, ob bei dem übergebenen String zuerst ein deutsches Komma (,) oder ein englisches Komma (.) auftaucht.
      +
      static booleanisValueToBase​(int base, + String value) +
      Prüft, ob value eine Zahl zur geforderten Basis base repräsentiert.
      +
      private static String[]separateByComma​(int base, + String value) +
      Separiert den Anteil vor und nach dem Komma bzw.
      +
      private static intvalueOfDigit​(char digit) +
      Berechnet die Stellenwertigkeit, die von einem Zeichen repräsentiert wird.
      +
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        MIN_BASE

        +
        public static final int MIN_BASE
        +
        Eine Konstante für die kleinstmögliche Basis
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        MAX_BASE

        +
        public static final int MAX_BASE
        +
        Eine Konstante für die größtmögliche Basis bei einem Zeichenvorrat von 0-9 und A-Z
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        FRACTIONAL_PRECISION_INDICATOR

        +
        public static final String FRACTIONAL_PRECISION_INDICATOR
        +
        Indikator für Abgeschnittene Nachkommastellen bei der Umwandlung vom Zehnersystem in ein anderes, beliebiges Zahlensystem
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ConvertingNumbers

        +
        private ConvertingNumbers()
        +
        Diese Klasse ist nicht instanziierbar
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        isValueToBase

        +
        public static boolean isValueToBase​(int base,
        +                                    String value)
        +                             throws IllegalArgumentException
        +
        Prüft, ob value eine Zahl zur geforderten Basis base repräsentiert. + Ist der Indikator für abgeschnittene Nachkommastellen aktiviert, wird dieser bei der Auswertung ignoriert. + Leerzeichen können als Tausender-Trennung verwendet werden und werden von dieser Methode ebenfalls ignoriert.
        +
        +
        Parameters:
        +
        value - zu prüfende Zahl repräsentiert als String
        +
        base - geforderte Basis von value - erlaubt sind nur Werte von 2 bis 36 (einschließlich)
        +
        Returns:
        +
        true, wenn value eine Zahl zur geforderten Basis base + repräsentiert, andernfalls wird false zurückgegeben
        +
        Throws:
        +
        IllegalArgumentException - wenn basis den Wertebereich [2, 36] verlässt
        +
        +
      • +
      + + + + + + + + + + + +
        +
      • +

        baseToDecString

        +
        public static String baseToDecString​(int base,
        +                                     String value,
        +                                     char comma)
        +                              throws NullPointerException,
        +                                     NumberFormatException,
        +                                     IllegalArgumentException
        +
        Wandelt die übergebene Zahl value zur beliebigen Basis base in eine Zahl zur Basis 10 in der String-Darstellung um.
        +
        +
        Parameters:
        +
        base - die spezifische Basis des übergebenen Wertes value
        +
        value - der Zahlenwert, der umgewandelt werden soll, in der String-Darstellung
        +
        comma - das Zeichen, welches als Komma in Gleitpunktzahlen verwendet wird
        +
        Returns:
        +
        Wert der Zahl im Zehnersystem in der String-Darstellung
        +
        Throws:
        +
        NullPointerException - wenn der Parameter value null ist
        +
        NumberFormatException - wenn der Parameter value keine Zahl zur Basis base ist
        +
        IllegalArgumentException - wenn value ein leerer String ist oder wenn basis den Wertebereich [2, 36] verlässt   -   see isValueToBase(int,java.lang.String)
        +
        +
      • +
      + + + +
        +
      • +

        decToBase

        +
        public static String decToBase​(int newBase,
        +                               String decValue)
        +                        throws NullPointerException,
        +                               NumberFormatException
        +
        Wandelt die übergebene Zahl decValue zur Basis 10 in eine Zahl zur beliebigen Basis newBase in der String-Darstellung um. +

        + Wenn in der Klasse Preferences der Indikator für Nachkommastellen aktiviert ist, werden die wegen der + maximalen Anzahl von Nachkommastellen abgeschnittenen Nachkommastellen durch "..." angedeutet. +

        +
        +
        Parameters:
        +
        newBase - Basis des neuen Zahlensystems, in das die Zahl decValue umgewandelt werden soll
        +
        decValue - Wert der Zahl im Zehnersystem in der String-Darstellung
        +
        Returns:
        +
        umgewandelte Zahl zur übergebenen Basis in der String-Darstellung mit dem standardmäßig eingestellten Komma
        +
        Throws:
        +
        NullPointerException - wenn der Parameter decValue null ist
        +
        NumberFormatException - wenn der Parameter decValue keine Zahl zur Basis 10 ist
        +
        IllegalArgumentException - wenn decValue ein leerer String ist oder wenn newBase den Wertebereich [2, 36] verlässt   -   see isValueToBase(int,java.lang.String)
        +
        See Also:
        +
        Preferences
        +
        +
      • +
      + + + +
        +
      • +

        decToBase

        +
        public static String decToBase​(int newBase,
        +                               String decValue,
        +                               char comma)
        +                        throws NullPointerException,
        +                               NumberFormatException,
        +                               IllegalArgumentException
        +
        Wandelt die übergebene Zahl decValue zur Basis 10 in eine Zahl zur beliebigen Basis newBase in der String-Darstellung um. +

        + Wenn in der Klasse Preferences der Indikator für Nachkommastellen aktiviert ist, werden die wegen der + maximalen Anzahl von Nachkommastellen abgeschnittenen Nachkommastellen durch "..." angedeutet. +

        +
        +
        Parameters:
        +
        newBase - Basis des neuen Zahlensystems, in das die Zahl decValue umgewandelt werden soll
        +
        decValue - Wert der Zahl im Zehnersystem in der String-Darstellung
        +
        comma - das Zeichen, welches als Komma in Gleitpunktzahlen verwendet wird
        +
        Returns:
        +
        umgewandelte Zahl zur übergebenen Basis in der String-Darstellung mit maximal 15 Nachkommastellen
        +
        Throws:
        +
        NullPointerException - wenn der Parameter decValue null ist
        +
        NumberFormatException - wenn der Parameter decValue keine Zahl zur Basis 10 ist
        +
        IllegalArgumentException - wenn decValue ein leerer String ist oder wenn newBase den Wertebereich [2, 36] verlässt   -   see isValueToBase(int,java.lang.String)
        +
        See Also:
        +
        Preferences
        +
        +
      • +
      + + + +
        +
      • +

        decToBase

        +
        public static String decToBase​(int newBase,
        +                               String decValue,
        +                               char comma,
        +                               int fractionalPrecision)
        +                        throws NullPointerException,
        +                               NumberFormatException,
        +                               IllegalArgumentException
        +
        Wandelt die übergebene Zahl decValue zur Basis 10 in eine Zahl zur beliebigen Basis newBase in der String-Darstellung um. +

        + Wenn in der Klasse Preferences der Indikator für Nachkommastellen aktiviert ist, werden die wegen der + maximalen Anzahl von Nachkommastellen abgeschnittenen Nachkommastellen durch "..." angedeutet. +

        +
        +
        Parameters:
        +
        newBase - Basis des neuen Zahlensystems, in das die Zahl decValue umgewandelt werden soll
        +
        decValue - Wert der Zahl im Zehnersystem in der String-Darstellung
        +
        comma - das Zeichen, welches als Komma in Gleitpunktzahlen verwendet wird
        +
        fractionalPrecision - maximale Anzahl der Nachkommastellen
        +
        Returns:
        +
        umgewandelte Zahl zur übergebenen Basis in der String-Darstellung
        +
        Throws:
        +
        NullPointerException - wenn der Parameter decValue null ist
        +
        NumberFormatException - wenn der Parameter decValue keine Zahl zur Basis 10 ist
        +
        IllegalArgumentException - wenn decValue ein leerer String ist oder wenn newBase den Wertebereich [2, 36] verlässt   -   see isValueToBase(int,java.lang.String)
        +
        See Also:
        +
        Preferences
        +
        +
      • +
      + + + + + + + +
        +
      • +

        baseToDecIntPart

        +
        private static double baseToDecIntPart​(int base,
        +                                       String integerPart)
        +
        Wandelt die übergebene ganze Zahl integerPart zur beliebigen Basis base ins Zehnersystem um. + Zur Umwandlung von einem beliebigen Zahlensystem in das Zehnersystem wird das Horner-Schema verwendet.
        +
        +
        Parameters:
        +
        base - beliebige Basis des Zahlensystems von integerPart im Bereich [2; 36]
        +
        integerPart - umzuwandelnde Zahl in der String-Darstellung
        +
        Returns:
        +
        Wert der übergebenen Zahl im Zehnersystem als double
        +
        +
      • +
      + + + +
        +
      • +

        baseToDecFractionalPart

        +
        private static double baseToDecFractionalPart​(int base,
        +                                              String fractionalPart)
        +
        Wandelt den übergebenen Nachkommateil einer Zahl zu einer beliebigen Basis ins Zehnersystem um. + Zur Umwandlung von einem beliebigen Zahlensystem in das Zehnersystem wird das Horner-Schema verwendet.
        +
        +
        Parameters:
        +
        base - beliebige Basis des Zahlensystems von fractionalPart im Bereich [2; 36]
        +
        fractionalPart - umzuwandelnder Nachkommateil einer Zahl ohne Komma und als ganze Zahl in der String-Darstellung
        +
        Returns:
        +
        Wert des übergebenen Nachkommaanteils im Zehnersystem als double
        +
        +
      • +
      + + + +
        +
      • +

        convertDecIntegerToBaseString

        +
        private static String convertDecIntegerToBaseString​(int newBase,
        +                                                    long integerPart)
        +
        Wandelt einen ganzzahligen Wert vom Zehnersystem in einen Wert zu einer beliebigen Basis in der String-Darstellung um.
        +
        +
        Parameters:
        +
        newBase - Basis des neuen Zahlensystems
        +
        integerPart - ganzzahligen Wert im Zehnersystem
        +
        Returns:
        +
        umgewandelter Wert zur Basis basis in String-Darstellung
        +
        +
      • +
      + + + +
        +
      • +

        convertDecFractionalToBaseString

        +
        private static String convertDecFractionalToBaseString​(int newBase,
        +                                                       double fractionalPart,
        +                                                       int fractionalPrecision,
        +                                                       char comma)
        +
        Wandelt einen Nachkommateil vom Zehnersystem in einen Wert zu einer beliebigen Basis in der String-Darstellung um. + Wenn in der Klasse Preferences der Indikator für Nachkommastellen aktiviert ist, werden die wegen der + maximalen Anzahl von Nachkommastellen abgeschnittenen Nachkommastellen durch "..." angedeutet.
        +
        +
        Parameters:
        +
        newBase - Basis des neuen Zahlensystems
        +
        fractionalPart - Nachkommateil im Zehnersystem
        +
        fractionalPrecision - Maximale Anzahl von Nachkommastellen im Ergebnis
        +
        comma - Zeichen, das als Komma vor dem Nachkommateil platziert wird
        +
        Returns:
        +
        umgewandelter Nachkommateil zur neuen Basis in String-Darstellung mit führendem Komma
        +
        See Also:
        +
        Preferences.setIndicateFractionalPrecision(boolean)
        +
        +
      • +
      + + + +
        +
      • +

        digitOfValue

        +
        private static char digitOfValue​(int value)
        +
        Berechnet das Zeichen für eine Stellenwertigkeit. + Die Ziffern 0 bis 9 entsprechen der Wertigkeit 0 bis 9, die Buchstaben A bis Z entsprechen der Wertigkeit 10 bis 35.
        +
        +
        Parameters:
        +
        value - Wert der gesuchten Stelle zur Basis 10
        +
        Returns:
        +
        Zeichen, das die Stellenwertigkeit des übergebenen Wertes repräsentiert
        +
        See Also:
        +
        valueOfDigit(char)
        +
        +
      • +
      + + + +
        +
      • +

        valueOfDigit

        +
        private static int valueOfDigit​(char digit)
        +
        Berechnet die Stellenwertigkeit, die von einem Zeichen repräsentiert wird. + Die Ziffern 0 bis 9 entsprechen der Wertigkeit 0 bis 9, die Buchstaben A bis Z entsprechen der Wertigkeit 10 bis 35.
        +
        +
        Parameters:
        +
        digit - Zeichen, dessen Wertigkeit berechnet wird
        +
        Returns:
        +
        Stellenwertigkeit, die von digit repräsentiert wird
        +
        See Also:
        +
        digitOfValue(int)
        +
        +
      • +
      + + + +
        +
      • +

        separateByComma

        +
        private static String[] separateByComma​(int base,
        +                                        String value)
        +                                 throws NumberFormatException
        +
        Separiert den Anteil vor und nach dem Komma bzw. Punkt (je nach Format) des übergebenen String value, + der eine Zahl zu der Basis base repräsentiert, und gibt diese beiden separierten Strings ohne führende 0 + im Nachkommateil zurück.
        +
        +
        Parameters:
        +
        base - Basis des Zahlensystems von value
        +
        value - Zahl, die zerlegt werden soll
        +
        Returns:
        +
        ganzen Anteil im Index 0 und Nachkommateil im Index 1, jeweils als ganze Zahl in der String-Darstellung
        +
        Throws:
        +
        NumberFormatException - Wenn es sich bei value nicht um eine Zahl in der String-Darstellung handelt, da zu viele Kommata vorhanden sind
        +
        +
      • +
      + + + +
        +
      • +

        getFirstComma

        +
        private static String getFirstComma​(String value)
        +
        überprüft, ob bei dem übergebenen String zuerst ein deutsches Komma (,) oder ein englisches Komma (.) auftaucht.
        +
        +
        Parameters:
        +
        value - String, der auf Kommata überprüft wird
        +
        Returns:
        +
        das Komma, welches zuerst in dem String auftaucht oder null, wenn kein Komma enthalten ist
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/components/SimpleChangeableNumber.html b/doc/0.1.4/de_private/bitchanger/components/SimpleChangeableNumber.html new file mode 100644 index 0000000..a9f62f3 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/components/SimpleChangeableNumber.html @@ -0,0 +1,805 @@ + + + + + +SimpleChangeableNumber + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class SimpleChangeableNumber

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    ChangeableNumber
    +
    +
    +
    public class SimpleChangeableNumber
    +extends Object
    +implements ChangeableNumber
    +
    Die Klasse SimpleChangeableNumber bietet eine vollständige Implementierung von ChangeableNumber. +

    + Jede Instanz dieser Klasse schließt einen Wert ein, der aus beliebigen Zahlensystemen gesetzt und in + verschiedene Zahlensysteme umgewandelt werden kann. Die String-Darstellungen in den verschiedenen + Zahlensystemen enthalten keine Präfixe, die auf die Basis hinweisen. +

    +
    +
    Since:
    +
    Bitchanger 0.1.0
    +
    Version:
    +
    0.1.4
    +
    Author:
    +
    Tim, Moritz Wolter
    +
    See Also:
    +
    ChangeableNumber
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      private StringbinValue +
      eingeschlossener Wert in der binären String-Darstellung
      +
      private StringdecValue +
      eingeschlossener Wert in der dezimalen String-Darstellung
      +
      private StringhexValue +
      eingeschlossener Wert in der hexadezimalen String-Darstellung
      +
      private StringoctalValue +
      eingeschlossener Wert in der oktalen String-Darstellung
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      SimpleChangeableNumber() +
      Erzeugt eine neue Instanz mit dem eingeschlossenen Wert 0
      +
      SimpleChangeableNumber​(String dezimalWert) +
      Erzeugt eine neue Instanz, die den übergebenen dezimal-Wert repräsentiert
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethodDescription
      private voidinitDecimal​(String decValue) +
      Setzt den eingeschlossenen Wert dieser SimpleChangeableNumber auf den übergebenen dezimal-Wert.
      +
      voidreset() +
      Setzt den eingeschlossenen Wert zurück.
      +
      voidsetBin​(String binValue) +
      Setzt den Wert dieser ChangeableNumber auf den Wert eines binären Strings
      +
      voidsetDec​(String decValue) +
      Setzt den Wert dieser ChangeableNumber auf den Wert eines dezimalen Strings
      +
      voidsetHex​(String hexValue) +
      Setzt den Wert dieser ChangeableNumber auf den Wert eines hexadezimalen Strings
      +
      voidsetOct​(String octValue) +
      Setzt den Wert dieser ChangeableNumber auf den Wert eines oktalen Strings
      +
      voidsetValue​(String value, + int baseOfValue) +
      Setzt den Wert dieser ChangeableNumber auf einen Wert in einem beliebigen Zahlensystem
      +
      StringtoBaseString​(int base) +
      Gibt die String-Darstellung dieser ChangeableNumber zu einer beliebigen Basis zurück.
      +
      StringtoBinString() +
      Gibt die String-Darstellung dieser ChangeableNumber als binären String zurück.
      +
      StringtoDecString() +
      Gibt die String-Darstellung dieser ChangeableNumber als dezimalen String zurück.
      +
      StringtoHexString() +
      Gibt die String-Darstellung dieser ChangeableNumber als hexadezimalen String zurück.
      +
      StringtoOctString() +
      Gibt die String-Darstellung dieser ChangeableNumber als oktalen String zurück.
      +
      StringtoString() +
      Gibt einen String zurück, der die hexadezimale, dezimale, oktale und + binäre Darstellung des eingeschlossenen Wertes enthält.
      +
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        binValue

        +
        private String binValue
        +
        eingeschlossener Wert in der binären String-Darstellung
        +
      • +
      + + + +
        +
      • +

        decValue

        +
        private String decValue
        +
        eingeschlossener Wert in der dezimalen String-Darstellung
        +
      • +
      + + + +
        +
      • +

        hexValue

        +
        private String hexValue
        +
        eingeschlossener Wert in der hexadezimalen String-Darstellung
        +
      • +
      + + + +
        +
      • +

        octalValue

        +
        private String octalValue
        +
        eingeschlossener Wert in der oktalen String-Darstellung
        +
      • +
      +
    • +
    +
    + +
    + +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        initDecimal

        +
        private void initDecimal​(String decValue)
        +                  throws NullPointerException,
        +                         NumberFormatException,
        +                         IllegalArgumentException
        +
        Setzt den eingeschlossenen Wert dieser SimpleChangeableNumber auf den übergebenen dezimal-Wert. + Die String-Darstellungen für das Hexadezimal-, Oktal- und Binärsystem werden berechnet und in den Attributen gespeichert.
        +
        +
        Parameters:
        +
        decValue - neuer Wert, den diese SimpleChangeableNumber repräsentiert
        +
        Throws:
        +
        NullPointerException - wenn der Parameter decValue null ist
        +
        NumberFormatException - wenn der Parameter decValue keine Zahl zur Basis 10 ist
        +
        IllegalArgumentException - wenn decValue ein leerer String ist
        +
        +
      • +
      + + + + + + + + + + + + + + + + + + + + + + + +
        +
      • +

        reset

        +
        public void reset()
        +
        Setzt den eingeschlossenen Wert zurück. Der vorherige Wert wird gelöscht! Wird nach dieser Methode + eine der toString-Methoden aufgerufen, wird ein leerer String zurückgegeben. +

        + Mit einer der set-Methoden kann der eingeschlossene Wert wieder neu gesetzt werden. +

        +
        +
        Specified by:
        +
        reset in interface ChangeableNumber
        +
        +
      • +
      + + + +
        +
      • +

        toHexString

        +
        public String toHexString()
        +
        Gibt die String-Darstellung dieser ChangeableNumber als hexadezimalen String zurück. +

        + Der String wird nicht als hexadezimal gekennzeichnet, es wird also nicht das Präfix 0x vorangestellt! +

        +
        +
        Specified by:
        +
        toHexString in interface ChangeableNumber
        +
        Returns:
        +
        hexadezimale String-Darstellung dieser ChangeableNumber
        +
        +
      • +
      + + + +
        +
      • +

        toDecString

        +
        public String toDecString()
        +
        Gibt die String-Darstellung dieser ChangeableNumber als dezimalen String zurück.
        +
        +
        Specified by:
        +
        toDecString in interface ChangeableNumber
        +
        Returns:
        +
        dezimale String-Darstellung dieser ChangeableNumber
        +
        +
      • +
      + + + +
        +
      • +

        toOctString

        +
        public String toOctString()
        +
        Gibt die String-Darstellung dieser ChangeableNumber als oktalen String zurück. +

        + Der String wird nicht als oktal gekennzeichnet, es wird also kein Präfix vorangestellt! +

        +
        +
        Specified by:
        +
        toOctString in interface ChangeableNumber
        +
        Returns:
        +
        oktale String-Darstellung dieser ChangeableNumber
        +
        +
      • +
      + + + +
        +
      • +

        toBinString

        +
        public String toBinString()
        +
        Gibt die String-Darstellung dieser ChangeableNumber als binären String zurück. +

        + Der String wird nicht als binär gekennzeichnet, es wird also nicht das Präfix 0b vorangestellt! +

        +
        +
        Specified by:
        +
        toBinString in interface ChangeableNumber
        +
        Returns:
        +
        binäre String-Darstellung dieser ChangeableNumber
        +
        +
      • +
      + + + +
        +
      • +

        toBaseString

        +
        public String toBaseString​(int base)
        +                    throws IllegalArgumentException
        +
        Gibt die String-Darstellung dieser ChangeableNumber zu einer beliebigen Basis zurück. +

        + Der String wird nicht durch ein Präfix gekennzeichnet! +

        +
        +
        Specified by:
        +
        toBaseString in interface ChangeableNumber
        +
        Parameters:
        +
        base - Basis des Zahlensystems, in dem diese ChangeableNumber dargestellt werden soll
        +
        Returns:
        +
        String-Darstellung dieser ChangeableNumber zur übergebenen Basis
        +
        Throws:
        +
        IllegalArgumentException - wenn base den Wertebereich [2, 36] verlässt   -   see ConvertingNumbers.isValueToBase(int, String)
        +
        +
      • +
      + + + +
        +
      • +

        toString

        +
        public String toString()
        +
        Gibt einen String zurück, der die hexadezimale, dezimale, oktale und + binäre Darstellung des eingeschlossenen Wertes enthält.
        +
        +
        Overrides:
        +
        toString in class Object
        +
        Returns:
        +
        String bestehend aus der hexadezimalen, dezimalen, oktalen und binären String-Darstellung des eingeschlossenen + Wertes, hintereinander aufgelistet
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/components/class-use/Calculable.html b/doc/0.1.4/de_private/bitchanger/components/class-use/Calculable.html new file mode 100644 index 0000000..3e1a611 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/components/class-use/Calculable.html @@ -0,0 +1,149 @@ + + + + + +Uses of Interface bitchanger.components.Calculable + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
bitchanger.components.Calculable

+
+
No usage of bitchanger.components.Calculable
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/components/class-use/ChangeableNumber.html b/doc/0.1.4/de_private/bitchanger/components/class-use/ChangeableNumber.html new file mode 100644 index 0000000..1f7ee46 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/components/class-use/ChangeableNumber.html @@ -0,0 +1,221 @@ + + + + + +Uses of Interface bitchanger.components.ChangeableNumber + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
bitchanger.components.ChangeableNumber

+
+
+ +
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/components/class-use/ConvertingNumbers.html b/doc/0.1.4/de_private/bitchanger/components/class-use/ConvertingNumbers.html new file mode 100644 index 0000000..8829f68 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/components/class-use/ConvertingNumbers.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.components.ConvertingNumbers + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.components.ConvertingNumbers

+
+
No usage of bitchanger.components.ConvertingNumbers
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/components/class-use/SimpleChangeableNumber.html b/doc/0.1.4/de_private/bitchanger/components/class-use/SimpleChangeableNumber.html new file mode 100644 index 0000000..03b7fe2 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/components/class-use/SimpleChangeableNumber.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.components.SimpleChangeableNumber + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.components.SimpleChangeableNumber

+
+
No usage of bitchanger.components.SimpleChangeableNumber
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/components/package-summary.html b/doc/0.1.4/de_private/bitchanger/components/package-summary.html new file mode 100644 index 0000000..270b49e --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/components/package-summary.html @@ -0,0 +1,197 @@ + + + + + +bitchanger.components + + + + + + + + + + + + + + + +
+ +
+
+
+

Package bitchanger.components

+
+
+
    +
  • + + + + + + + + + + + + + + + + +
    Interface Summary 
    InterfaceDescription
    Calculable 
    ChangeableNumber +
    Schnittstelle, die Methoden definiert, um eine Zahl aus einem beliebigen Zahlensystem + in beliebige andere Zahlensysteme umzuwandeln
    +
    +
  • +
  • + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    ConvertingNumbers +
    Die Klasse ConvertingNumbers enthält Methoden zum Umwandeln von Zahlen mit verschiedenen Zahlensystemen.
    +
    SimpleChangeableNumber +
    Die Klasse SimpleChangeableNumber bietet eine vollständige Implementierung von ChangeableNumber.
    +
    +
  • +
+
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/components/package-tree.html b/doc/0.1.4/de_private/bitchanger/components/package-tree.html new file mode 100644 index 0000000..0ed0928 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/components/package-tree.html @@ -0,0 +1,172 @@ + + + + + +bitchanger.components Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package bitchanger.components

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+

Interface Hierarchy

+ +
+
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/components/package-use.html b/doc/0.1.4/de_private/bitchanger/components/package-use.html new file mode 100644 index 0000000..68d6320 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/components/package-use.html @@ -0,0 +1,211 @@ + + + + + +Uses of Package bitchanger.components + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
bitchanger.components

+
+
+ +
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/Hauptfenster.html b/doc/0.1.4/de_private/bitchanger/gui/Hauptfenster.html new file mode 100644 index 0000000..35f03a9 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/Hauptfenster.html @@ -0,0 +1,526 @@ + + + + + +Hauptfenster + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class Hauptfenster

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • javafx.application.Application
    • +
    • +
        +
      • bitchanger.gui.Hauptfenster
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    public class Hauptfenster
    +extends javafx.application.Application
    +
    Hauptfenster der Applikation mit javaFX +

    + Das Fenster bietet verschiedene Szenen zum Rechnen und Umwandeln von verschiedenen Zahlensystemen. + Über eine Menüleiste kann zwischen den Szenen gewechselt werden, sowie die Programm-Einstellungen geöffnet werden. +

    +
    +
    Since:
    +
    Bitchanger 0.1.0
    +
    Version:
    +
    0.1.4
    +
    Author:
    +
    Tim
    +
    See Also:
    +
    ConverterView, +ConverterController
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Nested Class Summary

      +
        +
      • + + +

        Nested classes/interfaces inherited from class javafx.application.Application

        +javafx.application.Application.Parameters
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      private ViewableconverterView +
      View für die Umwandlung von Zahlensystemen
      +
      private ViewablecurrentView +
      aktuell im Fenster dargestellte View
      +
      +
        +
      • + + +

        Fields inherited from class javafx.application.Application

        +STYLESHEET_CASPIAN, STYLESHEET_MODENA
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      Hauptfenster() 
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and TypeMethodDescription
      private javafx.scene.control.MenuBarcreateMenuBar() +
      Erstellt eine Menübar, die die das Auswählen der verschiedenen Szenen erlaubt, Programm Einstellungen bietet und + Informationen über die Applikation enthält.
      +
      static voidmain​(String[] args) +
      Startet die Anwendung und öffnet das Applikationsfenster.
      +
      private voidsetStageSize​(javafx.stage.Stage primaryStage) +
      Passt die minimale und die maximale Größe des Fensters an die Größe der aktuellen Szene (currentView) an
      +
      voidstart​(javafx.stage.Stage primaryStage) +
      Diese Methode erstellt den Inhalt für das Hauptfenster und öffnet dieses.
      +
      +
        +
      • + + +

        Methods inherited from class javafx.application.Application

        +getHostServices, getParameters, getUserAgentStylesheet, init, launch, launch, notifyPreloader, setUserAgentStylesheet, stop
      • +
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        currentView

        +
        private Viewable currentView
        +
        aktuell im Fenster dargestellte View
        +
      • +
      + + + +
        +
      • +

        converterView

        +
        private Viewable converterView
        +
        View für die Umwandlung von Zahlensystemen
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Hauptfenster

        +
        public Hauptfenster()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        main

        +
        public static void main​(String[] args)
        +
        Startet die Anwendung und öffnet das Applikationsfenster.
        +
        +
        Parameters:
        +
        args - Argumente, die beim Programmstart übergeben werden. Die Argumente werden an die Methode launch weitergegeben und ansonsten ignoriert.
        +
        See Also:
        +
        Application.launch(String...)
        +
        +
      • +
      + + + +
        +
      • +

        start

        +
        public void start​(javafx.stage.Stage primaryStage)
        +           throws Exception
        +
        Diese Methode erstellt den Inhalt für das Hauptfenster und öffnet dieses. +

        + - Es wird eine Menübar erstellt, die in jeder Szene die Steuerung des Fensters erlaubt. +

        +

        + - Die verschiedenen Views für die unterschiedlichen Oberflächen werden erzeugt. +

        +

        + - Die zuletzt geöffnete Szene wird geladen. +

        +

        + - Das in den Einstellungen ausgewählte Stylesheet wird geladen. +

        +

        + - Das Fenster wird formatiert und geöffnet. +

        + + Diese Methode wird erst beendet, wenn das Hauptfenster geschlossen wurde
        +
        +
        Specified by:
        +
        start in class javafx.application.Application
        +
        Throws:
        +
        Exception
        +
        See Also:
        +
        ConverterView
        +
        +
      • +
      + + + + + + + +
        +
      • +

        createMenuBar

        +
        private javafx.scene.control.MenuBar createMenuBar()
        +
        Erstellt eine Menübar, die die das Auswählen der verschiedenen Szenen erlaubt, Programm Einstellungen bietet und + Informationen über die Applikation enthält. +

        + Alle benötigten Elemente werden einer neuen MenuBar hinzugefügt. + Alle Actions werden gesetzt und müssen nicht mehr angepasst werden. +

        +
        +
        Returns:
        +
        eine neue MenuBar mit dem benötigten Inhalt
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/class-use/Hauptfenster.html b/doc/0.1.4/de_private/bitchanger/gui/class-use/Hauptfenster.html new file mode 100644 index 0000000..632835f --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/class-use/Hauptfenster.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.Hauptfenster + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.gui.Hauptfenster

+
+
No usage of bitchanger.gui.Hauptfenster
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controller/AlphaNumGridController.html b/doc/0.1.4/de_private/bitchanger/gui/controller/AlphaNumGridController.html new file mode 100644 index 0000000..ed707b6 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controller/AlphaNumGridController.html @@ -0,0 +1,755 @@ + + + + + +AlphaNumGridController + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class AlphaNumGridController

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Controller
    +
    +
    +
    public class AlphaNumGridController
    +extends ControllerBase
    +
    +
    Since:
    +
    Bitchanger 0.1.0
    +
    Version:
    +
    0.1.4
    +
    Author:
    +
    Tim
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      private javafx.scene.layout.HBoxarrowButtons +
      HBox mit den Buttons, mit denen durch die Tastatur gescrollt werden kann.
      +
      private ArrayList<javafx.scene.Node>buttonList +
      Liste, die alle Buttons der Tastatur-Matrix enthält
      +
      private javafx.scene.control.ButtoncommaBtn +
      Button, mit dem ein Komma eingegeben werden kann
      +
      private booleanisShowingKeyboard +
      Merker für den derzeitigen Tastaturmodus
      +
      private javafx.scene.control.ButtonkeyboardBtn +
      Button zum Umschalten zwischen Nummernfeld und Alphabet-Ansicht
      +
      private javafx.scene.control.ButtonnextBtn +
      Button, mit dem durch die Tastatur vorwärts gescrollt werden kann
      +
      private javafx.scene.control.ButtonpreviousBtn +
      Button, mit dem durch die Tastatur zurück gescrollt werden kann
      +
      private javafx.scene.control.ButtonsignBtn +
      Button, mit dem das Vorzeichen der eingegebenen Zahl gewechselt wird
      +
      private javafx.scene.control.ButtonzeroBtn +
      Button, mit dem die Zahl 0 eingegeben wird
      +
      + +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      AlphaNumGridController​(AlphaNumGrid view) +
      Erzeugt einen neuen Controller, der einer AlphaNumGrid eine Funktion gibt.
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethodDescription
      private voidchangeToKeyboard() +
      Wechselt das Tastaturlayout in die Alphabet-Ansicht
      +
      private voidchangeToNums() +
      Wechselt das Tastaturlayout in die Kombination aus sechs Buchstaben-Buttons und Nummernfeld
      +
      protected voidinitControls() +
      Initialisiert alle benötigten Bedienelemente mit Referenzen aus den zur Verfügung stehenden Maps.
      +
      voidsetActions() +
      Setzt alle für die View benötigten Funktionen
      +
      private voidsetAllToKeyboard​(char startLetter) +
      Setzt bei allen Buttons die Texte.
      +
      private voidsetAlphaButtons​(char startLetter) +
      Setzt die Texte der Alpha-Buttons in der Reihenfolge von AlphaNumGrid.ALPHA_KEYS.
      +
      private voidsetCommaBinding() +
      Bindet den Text des Komma-Buttons an das CommaProperty.
      +
      private voidsetKeyboardBtnAction() +
      Setzt die Funktion zum Wechseln des Tastatur-Modus beim Klick auf den Button keyboardBtn.
      +
      private voidsetNextBtnAction() +
      Setzt die Funktion zum vorwärts scrollen durch die Alpha-Tastatur beim Klick auf den Button nextBtn.
      +
      private voidsetNextBtnDisable() +
      Setzt ChangeListener beim letzten Alpha-Button und beim letzten Nummer-Button, um zu überwachen, ob das Ende des Alphabets erreicht wurde.
      +
      private voidsetNumButtons() +
      Setzt die Texte der nummerischen-Buttons in der Reihenfolge von AlphaNumGrid.NUM_KEYS.
      +
      private voidsetPreviousBtnAction() +
      Setzt die Funktion zum rückwärts scrollen durch die Alpha-Tastatur beim Klick auf den Button previousBtn.
      +
      private voidsetPreviousBtnDisable() +
      Setzt einen ChangeListener beim ersten Alpha-Button, um zu überwachen, ob der Anfang des Alphabets erreicht wurde.
      +
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        buttonList

        +
        private ArrayList<javafx.scene.Node> buttonList
        +
        Liste, die alle Buttons der Tastatur-Matrix enthält
        +
      • +
      + + + +
        +
      • +

        keyboardBtn

        +
        private javafx.scene.control.Button keyboardBtn
        +
        Button zum Umschalten zwischen Nummernfeld und Alphabet-Ansicht
        +
      • +
      + + + +
        +
      • +

        previousBtn

        +
        private javafx.scene.control.Button previousBtn
        +
        Button, mit dem durch die Tastatur zurück gescrollt werden kann
        +
      • +
      + + + +
        +
      • +

        nextBtn

        +
        private javafx.scene.control.Button nextBtn
        +
        Button, mit dem durch die Tastatur vorwärts gescrollt werden kann
        +
      • +
      + + + +
        +
      • +

        signBtn

        +
        private javafx.scene.control.Button signBtn
        +
        Button, mit dem das Vorzeichen der eingegebenen Zahl gewechselt wird
        +
      • +
      + + + +
        +
      • +

        zeroBtn

        +
        private javafx.scene.control.Button zeroBtn
        +
        Button, mit dem die Zahl 0 eingegeben wird
        +
      • +
      + + + +
        +
      • +

        commaBtn

        +
        private javafx.scene.control.Button commaBtn
        +
        Button, mit dem ein Komma eingegeben werden kann
        +
      • +
      + + + +
        +
      • +

        arrowButtons

        +
        private javafx.scene.layout.HBox arrowButtons
        +
        HBox mit den Buttons, mit denen durch die Tastatur gescrollt werden kann.
        +
      • +
      + + + +
        +
      • +

        isShowingKeyboard

        +
        private boolean isShowingKeyboard
        +
        Merker für den derzeitigen Tastaturmodus
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        AlphaNumGridController

        +
        public AlphaNumGridController​(AlphaNumGrid view)
        +
        Erzeugt einen neuen Controller, der einer AlphaNumGrid eine Funktion gibt.
        +
        +
        Parameters:
        +
        view - AlphaNumGrid, die an diesen Controller gebunden wird
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        initControls

        +
        protected void initControls()
        +
        Initialisiert alle benötigten Bedienelemente mit Referenzen aus den zur Verfügung stehenden Maps.
        +
        +
        Specified by:
        +
        initControls in class ControllerBase
        +
        +
      • +
      + + + +
        +
      • +

        setActions

        +
        public void setActions()
        +
        Setzt alle für die View benötigten Funktionen
        +
      • +
      + + + +
        +
      • +

        setAlphaButtons

        +
        private void setAlphaButtons​(char startLetter)
        +
        Setzt die Texte der Alpha-Buttons in der Reihenfolge von AlphaNumGrid.ALPHA_KEYS. + Mit jedem Button wird das Zeichen für den Text inkrementiert.
        +
        +
        Parameters:
        +
        startLetter - Zeichen, das der Erste Alpha-Button erhält
        +
        +
      • +
      + + + +
        +
      • +

        setNumButtons

        +
        private void setNumButtons()
        +
        Setzt die Texte der nummerischen-Buttons in der Reihenfolge von AlphaNumGrid.NUM_KEYS. + Jedem Button wird die Nummer aus dem Schlüssel in AlphaNumGrid.NUM_KEYS zugewiesen.
        +
      • +
      + + + +
        +
      • +

        setAllToKeyboard

        +
        private void setAllToKeyboard​(char startLetter)
        +
        Setzt bei allen Buttons die Texte. Der erste Button erhält den übergebenen Buchstaben als Text, für jeden weiteren + Button in buttonList wird der Buchstabe inkrementiert. Diese Methode setzt nur die Zeichen 'A' bis 'Z' als + Text der Buttons, wird dieser Bereich verlassen wird stattdessen ein leerer String gesetzt.
        +
        +
        Parameters:
        +
        startLetter - Buchstabe des ersten Tastatur-Buttons
        +
        +
      • +
      + + + +
        +
      • +

        setCommaBinding

        +
        private void setCommaBinding()
        +
        Bindet den Text des Komma-Buttons an das CommaProperty.
        +
        +
        See Also:
        +
        Preferences.getCommaProperty()
        +
        +
      • +
      + + + +
        +
      • +

        setNextBtnDisable

        +
        private void setNextBtnDisable()
        +
        Setzt ChangeListener beim letzten Alpha-Button und beim letzten Nummer-Button, um zu überwachen, ob das Ende des Alphabets erreicht wurde. + Dadurch wird der Button zum weiter-scrollen der Alpha-Tastatur in beiden Tastaturmodi automatisch aktiviert und deaktiviert.
        +
      • +
      + + + +
        +
      • +

        setPreviousBtnDisable

        +
        private void setPreviousBtnDisable()
        +
        Setzt einen ChangeListener beim ersten Alpha-Button, um zu überwachen, ob der Anfang des Alphabets erreicht wurde. + Dadurch wird der Button zum zurück-scrollen der Alpha-Tastatur in beiden Tastaturmodi automatisch aktiviert und deaktiviert.
        +
      • +
      + + + +
        +
      • +

        setNextBtnAction

        +
        private void setNextBtnAction()
        +
        Setzt die Funktion zum vorwärts scrollen durch die Alpha-Tastatur beim Klick auf den Button nextBtn.
        +
      • +
      + + + +
        +
      • +

        setPreviousBtnAction

        +
        private void setPreviousBtnAction()
        +
        Setzt die Funktion zum rückwärts scrollen durch die Alpha-Tastatur beim Klick auf den Button previousBtn.
        +
      • +
      + + + +
        +
      • +

        setKeyboardBtnAction

        +
        private void setKeyboardBtnAction()
        +
        Setzt die Funktion zum Wechseln des Tastatur-Modus beim Klick auf den Button keyboardBtn. + Wechselt das Tastaturlayout zwischen einer Kombination aus sechs Buchstaben-Buttons mit Nummernfeld + und voller Buchstabenansicht.
        +
        +
        See Also:
        +
        changeToKeyboard(), +changeToNums()
        +
        +
      • +
      + + + +
        +
      • +

        changeToKeyboard

        +
        private void changeToKeyboard()
        +
        Wechselt das Tastaturlayout in die Alphabet-Ansicht
        +
      • +
      + + + +
        +
      • +

        changeToNums

        +
        private void changeToNums()
        +
        Wechselt das Tastaturlayout in die Kombination aus sechs Buchstaben-Buttons und Nummernfeld
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controller/AlphaNumKeysController.html b/doc/0.1.4/de_private/bitchanger/gui/controller/AlphaNumKeysController.html new file mode 100644 index 0000000..e51db8f --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controller/AlphaNumKeysController.html @@ -0,0 +1,933 @@ + + + + + +AlphaNumKeysController + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class AlphaNumKeysController

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Controller
    +
    +
    +
    public class AlphaNumKeysController
    +extends ControllerBase<AlphaNumKeys>
    +
    Dieser Controller gibt den Bedienelementen einer Instanz von AlphaNumKeys eine Funktion und bindet die Simulation der + Tastatur an die gekapselte Scene. +

    + Die Hauptfunktion ist die Simulation einer Tastatur mit den alphanumerischen Buttons. Beim Klick auf einer dieser + Buttons werden die benötigten KeyEvents ausgelöst und an die gebundene Scene weitergeleitet. + Die zur weiteren zur Verfügung gestellten Funktionen sind das Umschalten zwischen den Tastaturmodi, scrollen durch die Tastatur, + Aktualisierung des Komma-Buttons bei Änderung der CommaProperty aus Preferences. +

    +

    + Die Funktion des +/- Buttons zum Vorzeichenwechsel bleibt unbelegt, da weitere Bedienelemente benötigt werden. Die Funktion dieses + Buttons muss in einem anderen Controller implementiert werden. +

    +
    +
    Since:
    +
    Bitchanger 0.1.0
    +
    Version:
    +
    0.1.4
    +
    Author:
    +
    Tim Mühle
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      private javafx.scene.layout.HBoxarrowButtons +
      HBox mit den Buttons, mit denen durch die Tastatur gescrollt werden kann.
      +
      private ArrayList<javafx.scene.Node>buttonList +
      Liste, die alle Buttons der Tastatur-Matrix enthält
      +
      private javafx.scene.control.ButtoncommaBtn +
      Button, mit dem ein Komma eingegeben werden kann
      +
      private booleanisShowingKeyboard +
      Merker für den derzeitigen Tastaturmodus
      +
      private javafx.scene.control.ButtonkeyboardBtn +
      Button zum Umschalten zwischen Nummernfeld und Alphabet-Ansicht
      +
      private SVGIconkeyboardCloseGraphic 
      private SVGIconkeyboardOpenGraphic 
      private javafx.scene.control.ButtonnextBtn +
      Button, mit dem durch die Tastatur vorwärts gescrollt werden kann
      +
      private javafx.scene.control.ButtonpreviousBtn +
      Button, mit dem durch die Tastatur zurück gescrollt werden kann
      +
      private javafx.scene.Scenescene +
      Scene, an die dieser Controller gebunden wird und die alle simulierten KeyEvents erhält
      +
      private javafx.scene.control.ButtonsignBtn +
      Button, mit dem das Vorzeichen der eingegebenen Zahl gewechselt wird
      +
      private javafx.scene.control.ButtonzeroBtn +
      Button, mit dem die Zahl 0 eingegeben wird
      +
      + + +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      AlphaNumKeysController​(AlphaNumKeys keys, + javafx.scene.Scene scene) +
      Erzeugt einen neuen Controller, der einer AlphaNumKeys eine Funktion gibt.
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethodDescription
      private voidchangeToKeyboard() +
      Wechselt das Tastaturlayout in die Alphabet-Ansicht
      +
      private voidchangeToNums() +
      Wechselt das Tastaturlayout in die Kombination aus sechs Buchstaben-Buttons und Nummernfeld
      +
      protected voidinitControls() +
      Initialisiert alle benötigten Bedienelemente mit Referenzen aus den zur Verfügung stehenden Maps.
      +
      voidsetActions() +
      Setzt die Actions zum Umschalten zwischen den Tastaturmodi, zum scrollen durch die Tastatur, zur Aktualisierung des Komma-Buttons + und simuliert die Tastatureingaben für die alphanumerischen Buttons.
      +
      private voidsetAllToKeyboard​(char startLetter) +
      Setzt bei allen Buttons die Texte.
      +
      private voidsetAlphaButtonTexts​(char startLetter) +
      Setzt die Texte der Alpha-Buttons in der Reihenfolge von AlphaNumKeys.ALPHA_KEYS.
      +
      private voidsetArrowScaleFactors​(double factor) 
      private voidsetCommaBinding() +
      Bindet den Text des Komma-Buttons an das CommaProperty.
      +
      private voidsetKeyboardBtnAction() +
      Setzt die Funktion zum Wechseln des Tastatur-Modus beim Klick auf den Button keyboardBtn.
      +
      private voidsetNextBtnAction() +
      Setzt die Funktion zum vorwärts scrollen durch die Alpha-Tastatur beim Klick auf den Button nextBtn.
      +
      private voidsetNextBtnDisable() +
      Setzt ChangeListener beim letzten Alpha-Button und beim letzten Nummer-Button, um zu überwachen, ob das Ende des Alphabets erreicht wurde.
      +
      private voidsetNumButtonTexts() +
      Setzt die Texte der nummerischen-Buttons in der Reihenfolge von AlphaNumKeys.NUM_KEYS.
      +
      private voidsetPreviousBtnAction() +
      Setzt die Funktion zum rückwärts scrollen durch die Alpha-Tastatur beim Klick auf den Button previousBtn.
      +
      private voidsetPreviousBtnDisable() +
      Setzt einen ChangeListener beim ersten Alpha-Button, um zu überwachen, ob der Anfang des Alphabets erreicht wurde.
      +
      private voidsetSimulateKeyEvents() +
      Setzt die Actions aller alphanumerischen Buttons und des Komma-Buttons, um mit diesen Buttons eine Tastatur zu simulieren.
      +
      private voidsetSimulateKeyOnAction​(javafx.scene.control.Button b) +
      Fügt einem Button die Funktion hinzu, dass dieser beim Klick einen Druck einer Taste auf der Tastatur simuliert.
      +
      private voidsimulateKey​(javafx.scene.control.Button b, + javafx.scene.input.KeyCode keycode) +
      Simuliert den Druck der Taste auf einer Tastatur mit dem spezifischen keycode und feuert nacheinander die KeyEvents + KeyEvent.KEY_PRESSED, KeyEvent.KEY_TYPED und KeyEvent.KEY_RELEASED.
      +
      + + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        buttonList

        +
        private final ArrayList<javafx.scene.Node> buttonList
        +
        Liste, die alle Buttons der Tastatur-Matrix enthält
        +
      • +
      + + + +
        +
      • +

        scene

        +
        private final javafx.scene.Scene scene
        +
        Scene, an die dieser Controller gebunden wird und die alle simulierten KeyEvents erhält
        +
      • +
      + + + +
        +
      • +

        keyboardOpenGraphic

        +
        private final SVGIcon keyboardOpenGraphic
        +
      • +
      + + + +
        +
      • +

        keyboardCloseGraphic

        +
        private final SVGIcon keyboardCloseGraphic
        +
      • +
      + + + +
        +
      • +

        keyboardBtn

        +
        private javafx.scene.control.Button keyboardBtn
        +
        Button zum Umschalten zwischen Nummernfeld und Alphabet-Ansicht
        +
      • +
      + + + +
        +
      • +

        previousBtn

        +
        private javafx.scene.control.Button previousBtn
        +
        Button, mit dem durch die Tastatur zurück gescrollt werden kann
        +
      • +
      + + + +
        +
      • +

        nextBtn

        +
        private javafx.scene.control.Button nextBtn
        +
        Button, mit dem durch die Tastatur vorwärts gescrollt werden kann
        +
      • +
      + + + +
        +
      • +

        signBtn

        +
        private javafx.scene.control.Button signBtn
        +
        Button, mit dem das Vorzeichen der eingegebenen Zahl gewechselt wird
        +
      • +
      + + + +
        +
      • +

        zeroBtn

        +
        private javafx.scene.control.Button zeroBtn
        +
        Button, mit dem die Zahl 0 eingegeben wird
        +
      • +
      + + + +
        +
      • +

        commaBtn

        +
        private javafx.scene.control.Button commaBtn
        +
        Button, mit dem ein Komma eingegeben werden kann
        +
      • +
      + + + +
        +
      • +

        arrowButtons

        +
        private javafx.scene.layout.HBox arrowButtons
        +
        HBox mit den Buttons, mit denen durch die Tastatur gescrollt werden kann.
        +
      • +
      + + + +
        +
      • +

        isShowingKeyboard

        +
        private boolean isShowingKeyboard
        +
        Merker für den derzeitigen Tastaturmodus
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        AlphaNumKeysController

        +
        public AlphaNumKeysController​(AlphaNumKeys keys,
        +                              javafx.scene.Scene scene)
        +
        Erzeugt einen neuen Controller, der einer AlphaNumKeys eine Funktion gibt.
        +
        +
        Parameters:
        +
        keys - AlphaNumKeys, die an diesen Controller gebunden wird
        +
        scene - Scene, an die dieser Controller gebunden wird, um alle KeyEvents zum Simulieren einer Tastatur weiterzugeben
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        initControls

        +
        protected void initControls()
        +
        Initialisiert alle benötigten Bedienelemente mit Referenzen aus den zur Verfügung stehenden Maps.
        +
        +
        Specified by:
        +
        initControls in class ControllerBase<AlphaNumKeys>
        +
        +
      • +
      + + + +
        +
      • +

        setActions

        +
        public void setActions()
        +
        Setzt die Actions zum Umschalten zwischen den Tastaturmodi, zum scrollen durch die Tastatur, zur Aktualisierung des Komma-Buttons + und simuliert die Tastatureingaben für die alphanumerischen Buttons. +

        + Die Funktion des +/- Buttons zum Vorzeichenwechsel bleibt unbelegt, da weitere Bedienelemente benötigt werden. Die Funktion dieses + Buttons muss in einem anderen Controller implementiert werden. +

        +
      • +
      + + + +
        +
      • +

        changeToKeyboard

        +
        private void changeToKeyboard()
        +
        Wechselt das Tastaturlayout in die Alphabet-Ansicht
        +
      • +
      + + + +
        +
      • +

        changeToNums

        +
        private void changeToNums()
        +
        Wechselt das Tastaturlayout in die Kombination aus sechs Buchstaben-Buttons und Nummernfeld
        +
      • +
      + + + +
        +
      • +

        setArrowScaleFactors

        +
        private void setArrowScaleFactors​(double factor)
        +
      • +
      + + + +
        +
      • +

        setAlphaButtonTexts

        +
        private void setAlphaButtonTexts​(char startLetter)
        +
        Setzt die Texte der Alpha-Buttons in der Reihenfolge von AlphaNumKeys.ALPHA_KEYS. + Mit jedem Button wird das Zeichen für den Text inkrementiert. Diese Methode setzt nur die Zeichen 'A' bis 'Z' als + Text der Buttons, wird dieser Bereich verlassen wird stattdessen ein leerer String gesetzt und der betroffene Button + ausgeblendet.
        +
        +
        Parameters:
        +
        startLetter - Zeichen, das der Erste Alpha-Button erhält
        +
        +
      • +
      + + + +
        +
      • +

        setNumButtonTexts

        +
        private void setNumButtonTexts()
        +
        Setzt die Texte der nummerischen-Buttons in der Reihenfolge von AlphaNumKeys.NUM_KEYS. + Jedem Button wird die Nummer aus dem Schlüssel in AlphaNumKeys.NUM_KEYS zugewiesen.
        +
      • +
      + + + +
        +
      • +

        setAllToKeyboard

        +
        private void setAllToKeyboard​(char startLetter)
        +
        Setzt bei allen Buttons die Texte. Der erste Button erhält den übergebenen Buchstaben als Text, für jeden weiteren + Button in buttonList wird der Buchstabe inkrementiert. Diese Methode setzt nur die Zeichen 'A' bis 'Z' als + Text der Buttons, wird dieser Bereich verlassen wird stattdessen ein leerer String gesetzt und der betroffene Button + ausgeblendet.
        +
        +
        Parameters:
        +
        startLetter - Buchstabe des ersten Tastatur-Buttons
        +
        +
      • +
      + + + + + + + +
        +
      • +

        setNextBtnDisable

        +
        private void setNextBtnDisable()
        +
        Setzt ChangeListener beim letzten Alpha-Button und beim letzten Nummer-Button, um zu überwachen, ob das Ende des Alphabets erreicht wurde. + Dadurch wird der Button zum weiter-scrollen der Alpha-Tastatur in beiden Tastaturmodi automatisch aktiviert und deaktiviert.
        +
      • +
      + + + +
        +
      • +

        setPreviousBtnDisable

        +
        private void setPreviousBtnDisable()
        +
        Setzt einen ChangeListener beim ersten Alpha-Button, um zu überwachen, ob der Anfang des Alphabets erreicht wurde. + Dadurch wird der Button zum zurück-scrollen der Alpha-Tastatur in beiden Tastaturmodi automatisch aktiviert und deaktiviert.
        +
      • +
      + + + +
        +
      • +

        setNextBtnAction

        +
        private void setNextBtnAction()
        +
        Setzt die Funktion zum vorwärts scrollen durch die Alpha-Tastatur beim Klick auf den Button nextBtn.
        +
      • +
      + + + +
        +
      • +

        setPreviousBtnAction

        +
        private void setPreviousBtnAction()
        +
        Setzt die Funktion zum rückwärts scrollen durch die Alpha-Tastatur beim Klick auf den Button previousBtn.
        +
      • +
      + + + +
        +
      • +

        setKeyboardBtnAction

        +
        private void setKeyboardBtnAction()
        +
        Setzt die Funktion zum Wechseln des Tastatur-Modus beim Klick auf den Button keyboardBtn. + Wechselt das Tastaturlayout zwischen einer Kombination aus sechs Buchstaben-Buttons mit Nummernfeld + und voller Buchstabenansicht.
        +
        +
        See Also:
        +
        changeToKeyboard(), +changeToNums()
        +
        +
      • +
      + + + +
        +
      • +

        setSimulateKeyEvents

        +
        private void setSimulateKeyEvents()
        +
        Setzt die Actions aller alphanumerischen Buttons und des Komma-Buttons, um mit diesen Buttons eine Tastatur zu simulieren.
        +
        +
        Since:
        +
        Bitchanger 0.1.4
        +
        See Also:
        +
        setSimulateKeyOnAction(Button)
        +
        +
      • +
      + + + +
        +
      • +

        setSimulateKeyOnAction

        +
        private void setSimulateKeyOnAction​(javafx.scene.control.Button b)
        +
        Fügt einem Button die Funktion hinzu, dass dieser beim Klick einen Druck einer Taste auf der Tastatur simuliert. + Die simulierte Taste wird durch den Text des Buttons festgelegt.
        +
        +
        Parameters:
        +
        b - Button, dessen Action gesetzt wird
        +
        Since:
        +
        Bitchanger 0.1.4
        +
        See Also:
        +
        simulateKey(Button, KeyCode)
        +
        +
      • +
      + + + +
        +
      • +

        simulateKey

        +
        private void simulateKey​(javafx.scene.control.Button b,
        +                         javafx.scene.input.KeyCode keycode)
        +
        Simuliert den Druck der Taste auf einer Tastatur mit dem spezifischen keycode und feuert nacheinander die KeyEvents + KeyEvent.KEY_PRESSED, KeyEvent.KEY_TYPED und KeyEvent.KEY_RELEASED. Die Events werden an die Scene + weitergeleitet, an die dieser Controller gebunden ist.
        +
        +
        Parameters:
        +
        b - Quelle für die gefeuerten Events
        +
        keycode - KeyCode der simulierten Taste
        +
        Since:
        +
        Bitchanger 0.1.4
        +
        See Also:
        +
        ControllerBase.simulateKeyEvents(Button, Node, Scene, String, String, KeyCode)
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controller/BasicMenuController.html b/doc/0.1.4/de_private/bitchanger/gui/controller/BasicMenuController.html new file mode 100644 index 0000000..ed02875 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controller/BasicMenuController.html @@ -0,0 +1,691 @@ + + + + + +BasicMenuController + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class BasicMenuController

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        modusConverter

        +
        protected javafx.scene.control.MenuItem modusConverter
        +
      • +
      + + + +
        +
      • +

        modusIEEE

        +
        protected javafx.scene.control.MenuItem modusIEEE
        +
      • +
      + + + +
        +
      • +

        modusCalculator

        +
        protected javafx.scene.control.MenuItem modusCalculator
        +
      • +
      + + + +
        +
      • +

        options

        +
        protected javafx.scene.control.Menu options
        +
      • +
      + + + +
        +
      • +

        styleMenu

        +
        protected javafx.scene.control.Menu styleMenu
        +
      • +
      + + + +
        +
      • +

        styleLight

        +
        protected javafx.scene.control.MenuItem styleLight
        +
      • +
      + + + +
        +
      • +

        styleDark

        +
        protected javafx.scene.control.MenuItem styleDark
        +
      • +
      + + + +
        +
      • +

        moveToScreen

        +
        protected javafx.scene.control.Menu moveToScreen
        +
      • +
      + + + +
        +
      • +

        showFullscreen

        +
        protected javafx.scene.control.CheckMenuItem showFullscreen
        +
      • +
      + + + +
        +
      • +

        about

        +
        protected javafx.scene.control.MenuItem about
        +
      • +
      + + + +
        +
      • +

        version

        +
        protected javafx.scene.control.MenuItem version
        +
      • +
      + + + +
        +
      • +

        resetPreferences

        +
        protected javafx.scene.control.MenuItem resetPreferences
        +
      • +
      + + + + +
    • +
    +
    + +
    + +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        initControls

        +
        protected void initControls()
        +
        Initialisiert alle benötigten Bedienelemente mit Referenzen aus den zur Verfügung stehenden Maps.
        +
        +
        Specified by:
        +
        initControls in class ControllerBase<BasicMenuBar>
        +
        +
      • +
      + + + +
        +
      • +

        setActions

        +
        public void setActions()
        +
        Setzt alle für die View benötigten Funktionen.
        +
      • +
      + + + +
        +
      • +

        changeToViewAction

        +
        private void changeToViewAction​(javafx.scene.control.MenuItem source,
        +                                Viewable view)
        +
      • +
      + + + +
        +
      • +

        changeStyleAction

        +
        private void changeStyleAction()
        +
      • +
      + + + +
        +
      • +

        switchFullscreenAction

        +
        private void switchFullscreenAction()
        +
      • +
      + + + +
        +
      • +

        showAboutAction

        +
        private void showAboutAction()
        +
      • +
      + + + +
        +
      • +

        showVersionAction

        +
        private void showVersionAction()
        +
      • +
      + + + +
        +
      • +

        resetPreferencesAction

        +
        private void resetPreferencesAction()
        +
      • +
      + + + +
        +
      • +

        listenScreenConfig

        +
        private void listenScreenConfig()
        +
      • +
      + + + +
        +
      • +

        setScreenItems

        +
        private void setScreenItems()
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controller/Controllable.html b/doc/0.1.4/de_private/bitchanger/gui/controller/Controllable.html new file mode 100644 index 0000000..9aad6ec --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controller/Controllable.html @@ -0,0 +1,429 @@ + + + + + +Controllable + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface Controllable

+
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      static Map<String,​javafx.scene.control.Button>EMPTY_BUTTON_MAP +
      Leere und unveränderliche Map, die als Platzhalter verwendet werden kann, wenn ein Controllable keine + Buttons an seinen Controller übergeben muss
      +
      static Map<String,​javafx.scene.Node>EMPTY_NODE_MAP +
      Leere und unveränderliche Map, die als Platzhalter verwendet werden kann, wenn ein Controllable keine + Nodes an seinen Controller übergeben muss
      +
      static Map<String,​javafx.scene.control.TextField>EMPTY_TEXTFIELD_MAP +
      Leere und unveränderliche Map, die als Platzhalter verwendet werden kann, wenn ein Controllable keine + Textfelder an seinen Controller übergeben muss
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Abstract Methods 
      Modifier and TypeMethodDescription
      Map<String,​javafx.scene.control.Button>getButtonMap() +
      Gibt eine Map mit allen Buttons der View zurück.
      +
      Map<String,​javafx.scene.Node>getNodeMap() +
      Gibt eine Map mit allen Elemente (Nodes) der View zurück, die keine Buttons oder Textfelder sind und im Controller benötigt werden.
      +
      Map<String,​javafx.scene.control.TextField>getTextFieldMap() +
      Gibt eine Map mit allen Textfelder der View zurück.
      +
      +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        EMPTY_TEXTFIELD_MAP

        +
        static final Map<String,​javafx.scene.control.TextField> EMPTY_TEXTFIELD_MAP
        +
        Leere und unveränderliche Map, die als Platzhalter verwendet werden kann, wenn ein Controllable keine + Textfelder an seinen Controller übergeben muss
        +
        +
        See Also:
        +
        Collections.emptyMap()
        +
        +
      • +
      + + + +
        +
      • +

        EMPTY_BUTTON_MAP

        +
        static final Map<String,​javafx.scene.control.Button> EMPTY_BUTTON_MAP
        +
        Leere und unveränderliche Map, die als Platzhalter verwendet werden kann, wenn ein Controllable keine + Buttons an seinen Controller übergeben muss
        +
        +
        See Also:
        +
        Collections.emptyMap()
        +
        +
      • +
      + + + +
        +
      • +

        EMPTY_NODE_MAP

        +
        static final Map<String,​javafx.scene.Node> EMPTY_NODE_MAP
        +
        Leere und unveränderliche Map, die als Platzhalter verwendet werden kann, wenn ein Controllable keine + Nodes an seinen Controller übergeben muss
        +
        +
        See Also:
        +
        Collections.emptyMap()
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getTextFieldMap

        +
        Map<String,​javafx.scene.control.TextField> getTextFieldMap()
        +
        Gibt eine Map mit allen Textfelder der View zurück. Jedes Textfeld ist einem eindeutigen Schlüsselwort zugeordnet, + mit dem es aus der Map herausgesucht werden kann. +

        + Jedes Schlüsselwort sollte einen Sinnvollen Bezug zum Einsatz des Textfeldes haben! +

        +
        +
        Returns:
        +
        Map, die alle Textfelder einer View enthält
        +
        +
      • +
      + + + +
        +
      • +

        getButtonMap

        +
        Map<String,​javafx.scene.control.Button> getButtonMap()
        +
        Gibt eine Map mit allen Buttons der View zurück. Jeder Button ist einem eindeutigen Schlüsselwort zugeordnet, + mit dem er aus der Map herausgesucht werden kann. +

        + Jedes Schlüsselwort sollte einen Sinnvollen Bezug zum Einsatz des Buttons haben! +

        +
        +
        Returns:
        +
        Map, die alle Buttons einer View enthält
        +
        +
      • +
      + + + +
        +
      • +

        getNodeMap

        +
        Map<String,​javafx.scene.Node> getNodeMap()
        +
        Gibt eine Map mit allen Elemente (Nodes) der View zurück, die keine Buttons oder Textfelder sind und im Controller benötigt werden. + Jedes Element ist einem eindeutigen Schlüsselwort zugeordnet, mit dem es aus der Map herausgesucht werden kann. +

        + Jedes Schlüsselwort sollte einen Sinnvollen Bezug zum Einsatz des Elements haben! +

        +
        +
        Returns:
        +
        Map, die alle Elemente einer View enthält, die keine Buttons oder Textfelder sind und im Controller benötigt werden
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controller/ControllableApplication.html b/doc/0.1.4/de_private/bitchanger/gui/controller/ControllableApplication.html new file mode 100644 index 0000000..162d542 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controller/ControllableApplication.html @@ -0,0 +1,338 @@ + + + + + +ControllableApplication + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface ControllableApplication

+
+
+
+
    +
  • +
    +
    All Known Implementing Classes:
    +
    PrimaryFXApp
    +
    +
    +
    public interface ControllableApplication
    +
    Schnittstelle, die Methoden definiert, um eine Application mit einem Controller zu verbinden.
    +
    +
    Since:
    +
    Bitchanger 0.1.4
    +
    Version:
    +
    0.1.4
    +
    Author:
    +
    Tim Mühle
    +
    See Also:
    +
    Controller
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        changeView

        +
        default void changeView​(Viewable newView)
        +
        Wechselt die Scene der primaryStage zu Scene des übergebenen Viewable
        +
        +
        Parameters:
        +
        newView - Neue View, die dargestellt werden soll
        +
        +
      • +
      + + + +
        +
      • +

        getPrimaryStage

        +
        javafx.stage.Stage getPrimaryStage()
        +
        Returns the main application window
        +
        +
        Returns:
        +
        main application window
        +
        +
      • +
      + + + +
        +
      • +

        getViewable

        +
        Viewable getViewable​(String key)
        +
        Gibt die mit dem String key verknüpfte View zurück
        +
        +
        Parameters:
        +
        key - Schlüsselwort für die View
        +
        Returns:
        +
        View, die dem Schlüssel zugeordnet ist oder null, wenn keine passende View gefunden wird
        +
        +
      • +
      + + + +
        +
      • +

        getCurrentViewProperty

        +
        javafx.beans.property.ObjectProperty<Viewable> getCurrentViewProperty()
        +
        Gibt die CurrentViewProperty zurück
        +
        +
        Returns:
        +
        CurrentViewProperty
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controller/Controller.html b/doc/0.1.4/de_private/bitchanger/gui/controller/Controller.html new file mode 100644 index 0000000..309316d --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controller/Controller.html @@ -0,0 +1,442 @@ + + + + + +Controller + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface Controller

+
+
+
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        REGISTERED_CONTROLLERS

        +
        static final HashMap<Class<? extends Controllable>,​Class<? extends Controller>> REGISTERED_CONTROLLERS
        +
        Map, die die für ein Controllable registrierten Controller speichert und diese verknüpft
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        register

        +
        static void register​(Class<? extends Controllable> controllable,
        +                     Class<? extends Controller> controller)
        +
        Registriert eine Controller-Klasse für die Factory-Methode of(Controllable) + und ordnet diese einer Controllable-Klasse zu.
        +
        +
        Parameters:
        +
        controllable - Controllable-Klasse, der die Controller-Klasse zugeordnet wird
        +
        controller - Controller-Klasse, die registriert wird
        +
        +
      • +
      + + + +
        +
      • +

        of

        +
        static Controller of​(Controllable c)
        +
        Factory-Methode, die einen neuen Controller für das übergebene Controllable erzeugt und zurückgibt. +

        + Der registrierte Controller muss einen öffentlichen Konstruktor haben, der als einzigen Parameter + das Controllable übergeben bekommt. +

        +

        + Es kann nur ein passender Controller zurückgegeben werden, wenn ein Passendes Wertepaar in + der Map REGISTERED_CONTROLLERS vorhanden ist. Ein Controllable kann einen Controller + mit der Methode register(Class, Class) zugeordnet bekommen. +

        +
        +
        Parameters:
        +
        c - Controllable, das durch den neuen Controller eine Funktion erhalten soll
        +
        Returns:
        +
        neuer Controller, der an das Controllable gebunden ist oder null, wenn kein Controller registriert wurde
        +
        Since:
        +
        Bitchanger 0.1.4
        +
        See Also:
        +
        register(Class, Class)
        +
        +
      • +
      + + + +
        +
      • +

        ofArg

        +
        static Controller ofArg​(Controllable c,
        +                        Object... args)
        +
        Factory-Methode, die einen neuen Controller für das übergebene Controllable erzeugt und zurückgibt. +

        + Der registrierte Controller muss einen öffentlichen Konstruktor haben, der als ersten Parameter + das Controllable übergeben bekommt und alle weiteren übergebenen Objekte ebenfalls in der selben + Reihenfolge erhält, in der diese übergeben wurden. +

        +

        + Es kann nur ein passender Controller zurückgegeben werden, wenn ein Passendes Wertepaar in + der Map REGISTERED_CONTROLLERS vorhanden ist. Ein Controllable kann einen Controller + mit der Methode register(Class, Class) zugeordnet bekommen. +

        +
        +
        Parameters:
        +
        c - Controllable, das durch den neuen Controller eine Funktion erhalten soll
        +
        args - Parameter in der Reihenfolge, wie diese vom Konstruktor benötigt werden
        +
        Returns:
        +
        neuer Controller, der an das Controllable gebunden ist oder null, wenn kein Controller registriert wurde
        +
        Since:
        +
        Bitchanger 0.1.4
        +
        See Also:
        +
        register(Class, Class)
        +
        +
      • +
      + + + +
        +
      • +

        getConstructorForArgs

        +
        private static Controller getConstructorForArgs​(Class<? extends Controller> controllerClass,
        +                                                Class<?>[] argClasses,
        +                                                Object[] constructorArgs)
        +
      • +
      + + + +
        +
      • +

        setActions

        +
        void setActions()
        +
        Setzt alle für die View benötigten Funktionen.
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controller/ControllerBase.html b/doc/0.1.4/de_private/bitchanger/gui/controller/ControllerBase.html new file mode 100644 index 0000000..b7df304 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controller/ControllerBase.html @@ -0,0 +1,574 @@ + + + + + +ControllerBase + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ControllerBase<T extends Controllable>

+
+
+ +
+
    +
  • +
    +
    Type Parameters:
    +
    T - Typ des Controllable (wird benötigt, um auf weitere Methoden zugreifen zu können, die nicht in + Controllable definiert sind)
    +
    +
    +
    All Implemented Interfaces:
    +
    Controller
    +
    +
    +
    Direct Known Subclasses:
    +
    AlphaNumKeysController, BasicMenuController, ConverterController, IEEEController
    +
    +
    +
    public abstract class ControllerBase<T extends Controllable>
    +extends Object
    +implements Controller
    +
    Basis für einen Controller, der einer Instanz von Controllable (z.B. eine View) eine Funktion gibt. Die wichtigsten Attribute, + die benötigt werden um Zugriff auf die Bedienelemente des Controllables zu erhalten, werden im Konstruktor initialisiert und sind in + allen Subklassen sichtbar. +

    + Subklassen müssen die Methoden initControls() und Controller.setActions() implementieren, um die Bedienelemente + mit einer Funktion zu belegen. +

    +

    + Jedem Controller kann nur ein einziges Controllable zugewiesen werden. Umgekehrt ist es möglich ein Controllable mit mehreren + Controllern für verschiedene Funktionen zu verbinden. +

    +
    +
    Since:
    +
    Bitchanger 0.1.0
    +
    Version:
    +
    0.1.4
    +
    Author:
    +
    Tim Mühle
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      protected Map<String,​javafx.scene.control.Button>buttonMap +
      Map, die alle Buttons des gekapselten Controllables enthält
      +
      protected Tcontrollable +
      gekapseltes Controllable, dem durch diesen Controller eine Funktion gegeben wird
      +
      protected Map<String,​javafx.scene.Node>nodeMap +
      Map, die alle Nodes des gekapselten Controllables enthält, die eine Funktion erhalten + und weder eine Instanz von Button noch von Textfeld sind
      +
      protected Map<String,​javafx.scene.control.TextField>textFieldMap +
      Map, die alle Textfelder des gekapselten Controllables enthält
      +
      + +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + +
      Constructors 
      ModifierConstructorDescription
      protected ControllerBase​(T controllable) +
      Kapselt das übergebene Controllable und initialisiert die Maps mit den Bedienelementen mit Referenzen + auf die zugehörigen Maps des Controllables.
      +
      +
    • +
    +
    + +
    + +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        textFieldMap

        +
        protected Map<String,​javafx.scene.control.TextField> textFieldMap
        +
        Map, die alle Textfelder des gekapselten Controllables enthält
        +
      • +
      + + + +
        +
      • +

        buttonMap

        +
        protected Map<String,​javafx.scene.control.Button> buttonMap
        +
        Map, die alle Buttons des gekapselten Controllables enthält
        +
      • +
      + + + +
        +
      • +

        nodeMap

        +
        protected Map<String,​javafx.scene.Node> nodeMap
        +
        Map, die alle Nodes des gekapselten Controllables enthält, die eine Funktion erhalten + und weder eine Instanz von Button noch von Textfeld sind
        +
      • +
      + + + +
        +
      • +

        controllable

        +
        protected final T extends Controllable controllable
        +
        gekapseltes Controllable, dem durch diesen Controller eine Funktion gegeben wird
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Detail

      + + + + + +
        +
      • +

        ControllerBase

        +
        protected ControllerBase​(T controllable)
        +
        Kapselt das übergebene Controllable und initialisiert die Maps mit den Bedienelementen mit Referenzen + auf die zugehörigen Maps des Controllables. +

        + Nach der Initialisierung der allgemeinen Attribute wird die Methode initControls() aufgerufen. +

        +
        +
        Parameters:
        +
        controllable - Controllable, das mit diesem Controller eine Funktion erhält
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        initControls

        +
        protected abstract void initControls()
        +
        Initialisiert alle benötigten Bedienelemente mit Referenzen aus den zur Verfügung stehenden Maps.
        +
      • +
      + + + +
        +
      • +

        simulateKeyEvents

        +
        protected void simulateKeyEvents​(javafx.scene.control.Button source,
        +                                 javafx.scene.Node target,
        +                                 javafx.scene.Scene scene,
        +                                 String character,
        +                                 String text,
        +                                 javafx.scene.input.KeyCode keycode,
        +                                 boolean shiftDown,
        +                                 boolean controlDown,
        +                                 boolean altDown,
        +                                 boolean metaDown)
        +
        Simuliert den Druck der Taste auf einer Tastatur mit dem spezifischen keycode und feuert nacheinander die KeyEvents + KeyEvent.KEY_PRESSED, KeyEvent.KEY_TYPED und KeyEvent.KEY_RELEASED an den gewählten Empfänger + target. Wenn target den Wert null hat, werden die Events an die übergebene Scene scene + weitergeleitet. Sind sowohl target als auch scene null, werden die Events an die Scene von + controllable weitergeleitet, sofern controllable die Schnittstelle Viewable implementiert. +

        + Wenn die Parameter target und scene beide den Wert null haben und controllable nicht die Schnittstelle + Viewable implementiert, werden keine Events gefeuert und die Methode hat keine weiteren Auswirkungen. + Insbesondere wird auch keine Exception geworfen! +

        +
        +
        Parameters:
        +
        source - Quelle des Events, darf null sein
        +
        target - Ziel des Events, darf null sein, wenn das Attribut controllable eine Instanz von Viewable ist
        +
        scene - Scene, die die KeyEvents konsumiert, wenn target den Wert null hat. Darf null sein
        +
        character - Zeichen oder Zeichenkette, die mit dem Event verbunden wird
        +
        text - String, der den KeyCode beschreibt
        +
        keycode - KeyCode, der die Taste repräsentiert
        +
        shiftDown - true, wenn "Shift" gedrückt ist
        +
        controlDown - true, wenn "Strg" gedrückt ist
        +
        altDown - true, wenn "Alt" gedrückt ist
        +
        metaDown - true, wenn die "Meta-"Taste gedrückt wurde (Command-Taste auf macOS bzw. Windows-Taste auf Windows)
        +
        Since:
        +
        Bitchanger 0.1.4
        +
        See Also:
        +
        KeyEvent(Object, javafx.event.EventTarget, javafx.event.EventType, String, String, KeyCode, boolean, boolean, boolean, boolean)
        +
        +
      • +
      + + + + +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controller/ConverterController.html b/doc/0.1.4/de_private/bitchanger/gui/controller/ConverterController.html new file mode 100644 index 0000000..8d83ad5 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controller/ConverterController.html @@ -0,0 +1,1036 @@ + + + + + +ConverterController + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ConverterController

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Controller
    +
    +
    +
    public class ConverterController
    +extends ControllerBase<ConverterView>
    +
    Controller, der die Funktion für eine ConverterView bereitstellt.
    +
    +
    Since:
    +
    Bitchanger 0.1.0
    +
    Version:
    +
    0.1.4
    +
    Author:
    +
    Tim Mühle
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      private javafx.scene.control.Button[]alphaNumButtons +
      alphanumerische Buttons zur Simulation einer Tastatur
      +
      private BaseSpinneranyBase +
      Spinner für die auswählbare, beliebige Basis
      +
      private javafx.scene.control.ButtonbackspcBtn +
      Button that simulate the backspace key
      +
      private javafx.beans.property.IntegerPropertybaseProperty +
      Property zum Einstellen der Basis des aktuell fokussierten Textfelds
      +
      private javafx.scene.control.ButtonclearBtn +
      Button zum Löschen und Zurücksetzen von value
      +
      private ValueFieldfocusedTF +
      Hilfsvariable mit Referenz auf das aktuell oder zuletzt fokussierte Textfeld
      +
      private javafx.scene.control.ButtonsignBtn +
      Button, mit dem das Vorzeichen der Zahl gewechselt werden kann
      +
      private ValueFieldtfAny +
      Textfeld für die Darstellung zu einer wählbaren Basis
      +
      private ValueFieldtfBin +
      Textfeld für die binäre Darstellung
      +
      private ValueFieldtfDec +
      Textfeld für die dezimale Darstellung
      +
      private ValueFieldtfHex +
      Textfeld für die hexadezimale Darstellung
      +
      private ValueFieldtfOct +
      Textfeld für die oktale Darstellung
      +
      private ChangeableNumbervalue +
      Zahl, die in die verschiedenen Zahlensysteme umgewandelt wird
      +
      + + +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      ConverterController​(ConverterView view) +
      Konstruiert einen neuen Controller für eine ConverterView und verknüpft die benötigten Attribute mit + Referenzen auf die Bedienelemente aus der ConverterView.
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethodDescription
      private voidfocusTF​(javafx.event.Event e) +
      Fokussiert das Textfeld focusedTF.
      +
      private voidinitButtons() +
      Sucht die benötigten Referenzen zu den Buttons aus der buttonMap und speichert diese in den Attributen
      +
      protected voidinitControls() +
      Initialisiert alle benötigten Bedienelemente mit Referenzen aus den zur Verfügung stehenden Maps.
      +
      private voidinitTextFields() +
      Sucht die benötigten Referenzen zu den Textfeldern aus der textFieldMap, speichert diese in den Attributen und setzt die Basis der einzelnen Textfelder.
      +
      private booleanisArrowButton​(javafx.scene.Node n) +
      Prüft, ob die übergebene Node einer der Pfeil-Buttons zum Scrollen in einem Spinner ist.
      +
      voidsetActions() +
      Setzt alle für die View benötigten Funktionen.
      +
      private voidsetAlphaNumBindings() +
      Bindet die baseProperty aller alphanumerischen Buttons an das Attribut baseProperty, um die Buttons + bei einem Wechsel der Basis automatisch aus- oder einzublenden.
      +
      private voidsetAnyValListener() +
      Setzt den Listener für tfAny, um die Eingabe direkt umzuwandeln und die anderen Textfelder zu aktualisieren.
      +
      private voidsetBackspaceAction() +
      Lässt den Backspace-Button die Backspace-Taste auf der Tastatur simulieren.
      +
      private voidsetBinValListener() +
      Setzt den Listener für tfBin, um die Eingabe direkt umzuwandeln und die anderen Textfelder zu aktualisieren.
      +
      private voidsetButtonActions() +
      Setzt die Actions für alle Buttons
      +
      private voidsetClearAction() +
      Setzt value bei Klick auf den Clear-Button zurück und aktualisiert alle Textfelder.
      +
      private voidsetDecValListener() +
      Setzt den Listener für tfDec, um die Eingabe direkt umzuwandeln und die anderen Textfelder zu aktualisieren.
      +
      private voidsetHexValListener() +
      Setzt den Listener für tfHex, um die Eingabe direkt umzuwandeln und die anderen Textfelder zu aktualisieren.
      +
      private voidsetInitialState() +
      Setzt die Attribute auf den Ausgangszustand.
      +
      private voidsetOctValListener() +
      Setzt den Listener für tfOct, um die Eingabe direkt umzuwandeln und die anderen Textfelder zu aktualisieren.
      +
      private voidsetSignAction() +
      Kehrt das Vorzeichen von value beim Klick auf den Vorzeichen-Button um und aktualisiert alle Textfelder.
      +
      private voidsetSpinnerActions() +
      Aktualisiert die Basis von tfAny, wenn sich die valueProperty von anyBase ändert.
      +
      private voidsetTextFieldActions() +
      Setzt Listener für die Textfelder, um die Eingabe direkt in alle anderen Zahlensysteme umzuwandeln.
      +
      private voidsetTexts​(boolean setHex, + boolean setDec, + boolean setOct, + boolean setBin, + boolean setAny) +
      Aktualisiert die Texte der gewählten Textfelder mit dem aktuellen Wert von value in der + zum Textfeld gehörenden Darstellung.
      +
      private voidsetTFSelection() +
      Aktualisiert das Attribut focusedTF bei Auswahl eines Textfeldes durch einen Mausklick und + verbindet baseProperty mit der baseProperty des Textfelds.
      +
      + + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        value

        +
        private ChangeableNumber value
        +
        Zahl, die in die verschiedenen Zahlensysteme umgewandelt wird
        +
      • +
      + + + +
        +
      • +

        anyBase

        +
        private BaseSpinner anyBase
        +
        Spinner für die auswählbare, beliebige Basis
        +
      • +
      + + + +
        +
      • +

        baseProperty

        +
        private javafx.beans.property.IntegerProperty baseProperty
        +
        Property zum Einstellen der Basis des aktuell fokussierten Textfelds
        +
      • +
      + + + +
        +
      • +

        tfHex

        +
        private ValueField tfHex
        +
        Textfeld für die hexadezimale Darstellung
        +
      • +
      + + + +
        +
      • +

        tfDec

        +
        private ValueField tfDec
        +
        Textfeld für die dezimale Darstellung
        +
      • +
      + + + +
        +
      • +

        tfBin

        +
        private ValueField tfBin
        +
        Textfeld für die binäre Darstellung
        +
      • +
      + + + +
        +
      • +

        tfOct

        +
        private ValueField tfOct
        +
        Textfeld für die oktale Darstellung
        +
      • +
      + + + +
        +
      • +

        tfAny

        +
        private ValueField tfAny
        +
        Textfeld für die Darstellung zu einer wählbaren Basis
        +
      • +
      + + + +
        +
      • +

        focusedTF

        +
        private ValueField focusedTF
        +
        Hilfsvariable mit Referenz auf das aktuell oder zuletzt fokussierte Textfeld
        +
      • +
      + + + +
        +
      • +

        clearBtn

        +
        private javafx.scene.control.Button clearBtn
        +
        Button zum Löschen und Zurücksetzen von value
        +
        +
        See Also:
        +
        ChangeableNumber.reset()
        +
        +
      • +
      + + + +
        +
      • +

        backspcBtn

        +
        private javafx.scene.control.Button backspcBtn
        +
        Button that simulate the backspace key
        +
      • +
      + + + +
        +
      • +

        alphaNumButtons

        +
        private javafx.scene.control.Button[] alphaNumButtons
        +
        alphanumerische Buttons zur Simulation einer Tastatur
        +
      • +
      + + + +
        +
      • +

        signBtn

        +
        private javafx.scene.control.Button signBtn
        +
        Button, mit dem das Vorzeichen der Zahl gewechselt werden kann
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ConverterController

        +
        public ConverterController​(ConverterView view)
        +
        Konstruiert einen neuen Controller für eine ConverterView und verknüpft die benötigten Attribute mit + Referenzen auf die Bedienelemente aus der ConverterView.
        +
        +
        Parameters:
        +
        view - ConverterView, an die dieser Controller gebunden wird
        +
        See Also:
        +
        initControls()
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        initControls

        +
        protected void initControls()
        +
        Initialisiert alle benötigten Bedienelemente mit Referenzen aus den zur Verfügung stehenden Maps.
        +
        +
        Specified by:
        +
        initControls in class ControllerBase<ConverterView>
        +
        +
      • +
      + + + +
        +
      • +

        setActions

        +
        public void setActions()
        +
        Setzt alle für die View benötigten Funktionen.
        +
      • +
      + + + +
        +
      • +

        initButtons

        +
        private void initButtons()
        +
        Sucht die benötigten Referenzen zu den Buttons aus der buttonMap und speichert diese in den Attributen
        +
      • +
      + + + +
        +
      • +

        initTextFields

        +
        private void initTextFields()
        +
        Sucht die benötigten Referenzen zu den Textfeldern aus der textFieldMap, speichert diese in den Attributen und setzt die Basis der einzelnen Textfelder.
        +
      • +
      + + + +
        +
      • +

        isArrowButton

        +
        private boolean isArrowButton​(javafx.scene.Node n)
        +
        Prüft, ob die übergebene Node einer der Pfeil-Buttons zum Scrollen in einem Spinner ist. + Dies ist der Fall, wenn die StyleClass den String "arrow-button" enthält.
        +
        +
        Parameters:
        +
        n - Testkandidat für einen Pfeil-Button
        +
        Returns:
        +
        true, wenn die StyleClass von n den String "arrow-button" enthält, false andernfalls
        +
        +
      • +
      + + + +
        +
      • +

        setInitialState

        +
        private void setInitialState()
        +
        Setzt die Attribute auf den Ausgangszustand.
        +
      • +
      + + + + + + + +
        +
      • +

        setTexts

        +
        private void setTexts​(boolean setHex,
        +                      boolean setDec,
        +                      boolean setOct,
        +                      boolean setBin,
        +                      boolean setAny)
        +
        Aktualisiert die Texte der gewählten Textfelder mit dem aktuellen Wert von value in der + zum Textfeld gehörenden Darstellung.
        +
        +
        Parameters:
        +
        setHex - true, wenn der Text von tfHex gesetzt werden soll
        +
        setDec - true, wenn der Text von tfDec gesetzt werden soll
        +
        setOct - true, wenn der Text von tfOct gesetzt werden soll
        +
        setBin - true, wenn der Text von tfBin gesetzt werden soll
        +
        setAny - true, wenn der Text von tfAny gesetzt werden soll
        +
        +
      • +
      + + + + + + + + + + + + + + + + + + + + + + + +
        +
      • +

        setTFSelection

        +
        private void setTFSelection()
        +
        Aktualisiert das Attribut focusedTF bei Auswahl eines Textfeldes durch einen Mausklick und + verbindet baseProperty mit der baseProperty des Textfelds.
        +
      • +
      + + + +
        +
      • +

        setSpinnerActions

        +
        private void setSpinnerActions()
        +
        Aktualisiert die Basis von tfAny, wenn sich die valueProperty von anyBase ändert. + Sorgt außerdem dafür, dass anyBase den Fokus nach der Eingabe einer Basis im Editor oder mit den + Inkrement- und Dekrement-Buttons wieder an focusedTF abgibt.
        +
      • +
      + + + +
        +
      • +

        focusTF

        +
        private void focusTF​(javafx.event.Event e)
        +
        Fokussiert das Textfeld focusedTF. + Diese Methode wird als Referenz für einen EventHandler verwendet.
        +
        +
        Parameters:
        +
        e - Event, das den EventHanler auslöst
        +
        +
      • +
      + + + + + + + +
        +
      • +

        setAlphaNumBindings

        +
        private void setAlphaNumBindings()
        +
        Bindet die baseProperty aller alphanumerischen Buttons an das Attribut baseProperty, um die Buttons + bei einem Wechsel der Basis automatisch aus- oder einzublenden.
        +
      • +
      + + + + + + + +
        +
      • +

        setBackspaceAction

        +
        private void setBackspaceAction()
        +
        Lässt den Backspace-Button die Backspace-Taste auf der Tastatur simulieren.
        +
      • +
      + + + +
        +
      • +

        setSignAction

        +
        private void setSignAction()
        +
        Kehrt das Vorzeichen von value beim Klick auf den Vorzeichen-Button um und aktualisiert alle Textfelder.
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controller/ConverterMenuController.html b/doc/0.1.4/de_private/bitchanger/gui/controller/ConverterMenuController.html new file mode 100644 index 0000000..271be24 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controller/ConverterMenuController.html @@ -0,0 +1,437 @@ + + + + + +ConverterMenuController + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ConverterMenuController

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        indicateFractionalInaccuracy

        +
        protected javafx.scene.control.CheckMenuItem indicateFractionalInaccuracy
        +
      • +
      +
    • +
    +
    + +
    + +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        initControls

        +
        protected void initControls()
        +
        Initialisiert alle benötigten Bedienelemente mit Referenzen aus den zur Verfügung stehenden Maps.
        +
        +
        Overrides:
        +
        initControls in class BasicMenuController
        +
        +
      • +
      + + + + + + + +
        +
      • +

        switchIndicateFractionalInaccuracyAction

        +
        private void switchIndicateFractionalInaccuracyAction()
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controller/IEEEController.html b/doc/0.1.4/de_private/bitchanger/gui/controller/IEEEController.html new file mode 100644 index 0000000..a8b39c2 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controller/IEEEController.html @@ -0,0 +1,371 @@ + + + + + +IEEEController + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class IEEEController

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        IEEEController

        +
        public IEEEController​(IEEEView controllable)
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        initControls

        +
        protected void initControls()
        +
        Initialisiert alle benötigten Bedienelemente mit Referenzen aus den zur Verfügung stehenden Maps.
        +
        +
        Specified by:
        +
        initControls in class ControllerBase<IEEEView>
        +
        +
      • +
      + + + +
        +
      • +

        setActions

        +
        public void setActions()
        +
        Setzt alle für die View benötigten Funktionen.
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controller/IEEEMenuController.html b/doc/0.1.4/de_private/bitchanger/gui/controller/IEEEMenuController.html new file mode 100644 index 0000000..27bddc2 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controller/IEEEMenuController.html @@ -0,0 +1,334 @@ + + + + + +IEEEMenuController + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class IEEEMenuController

+
+
+ +
+ +
+
+ +
+
+ +
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controller/class-use/AlphaNumGridController.html b/doc/0.1.4/de_private/bitchanger/gui/controller/class-use/AlphaNumGridController.html new file mode 100644 index 0000000..5312805 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controller/class-use/AlphaNumGridController.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controller.AlphaNumGridController + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.gui.controller.AlphaNumGridController

+
+
No usage of bitchanger.gui.controller.AlphaNumGridController
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controller/class-use/AlphaNumKeysController.html b/doc/0.1.4/de_private/bitchanger/gui/controller/class-use/AlphaNumKeysController.html new file mode 100644 index 0000000..5de5677 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controller/class-use/AlphaNumKeysController.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controller.AlphaNumKeysController + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.gui.controller.AlphaNumKeysController

+
+
No usage of bitchanger.gui.controller.AlphaNumKeysController
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controller/class-use/BasicMenuController.html b/doc/0.1.4/de_private/bitchanger/gui/controller/class-use/BasicMenuController.html new file mode 100644 index 0000000..75917bc --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controller/class-use/BasicMenuController.html @@ -0,0 +1,200 @@ + + + + + +Uses of Class bitchanger.gui.controller.BasicMenuController + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.gui.controller.BasicMenuController

+
+
+ +
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controller/class-use/Controllable.html b/doc/0.1.4/de_private/bitchanger/gui/controller/class-use/Controllable.html new file mode 100644 index 0000000..96528a2 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controller/class-use/Controllable.html @@ -0,0 +1,392 @@ + + + + + +Uses of Interface bitchanger.gui.controller.Controllable + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
bitchanger.gui.controller.Controllable

+
+
+ +
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controller/class-use/ControllableApplication.html b/doc/0.1.4/de_private/bitchanger/gui/controller/class-use/ControllableApplication.html new file mode 100644 index 0000000..8404829 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controller/class-use/ControllableApplication.html @@ -0,0 +1,314 @@ + + + + + +Uses of Interface bitchanger.gui.controller.ControllableApplication + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
bitchanger.gui.controller.ControllableApplication

+
+
+ +
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controller/class-use/Controller.html b/doc/0.1.4/de_private/bitchanger/gui/controller/class-use/Controller.html new file mode 100644 index 0000000..1d3e234 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controller/class-use/Controller.html @@ -0,0 +1,358 @@ + + + + + +Uses of Interface bitchanger.gui.controller.Controller + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
bitchanger.gui.controller.Controller

+
+
+ +
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controller/class-use/ControllerBase.html b/doc/0.1.4/de_private/bitchanger/gui/controller/class-use/ControllerBase.html new file mode 100644 index 0000000..7ba3e31 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controller/class-use/ControllerBase.html @@ -0,0 +1,225 @@ + + + + + +Uses of Class bitchanger.gui.controller.ControllerBase + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.gui.controller.ControllerBase

+
+
+ +
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controller/class-use/ConverterController.html b/doc/0.1.4/de_private/bitchanger/gui/controller/class-use/ConverterController.html new file mode 100644 index 0000000..2bc89c5 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controller/class-use/ConverterController.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controller.ConverterController + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.gui.controller.ConverterController

+
+
No usage of bitchanger.gui.controller.ConverterController
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controller/class-use/ConverterMenuController.html b/doc/0.1.4/de_private/bitchanger/gui/controller/class-use/ConverterMenuController.html new file mode 100644 index 0000000..4786091 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controller/class-use/ConverterMenuController.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controller.ConverterMenuController + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.gui.controller.ConverterMenuController

+
+
No usage of bitchanger.gui.controller.ConverterMenuController
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controller/class-use/IEEEController.html b/doc/0.1.4/de_private/bitchanger/gui/controller/class-use/IEEEController.html new file mode 100644 index 0000000..b669888 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controller/class-use/IEEEController.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controller.IEEEController + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.gui.controller.IEEEController

+
+
No usage of bitchanger.gui.controller.IEEEController
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controller/class-use/IEEEMenuController.html b/doc/0.1.4/de_private/bitchanger/gui/controller/class-use/IEEEMenuController.html new file mode 100644 index 0000000..c665011 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controller/class-use/IEEEMenuController.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controller.IEEEMenuController + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.gui.controller.IEEEMenuController

+
+
No usage of bitchanger.gui.controller.IEEEMenuController
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controller/package-summary.html b/doc/0.1.4/de_private/bitchanger/gui/controller/package-summary.html new file mode 100644 index 0000000..d81faa2 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controller/package-summary.html @@ -0,0 +1,232 @@ + + + + + +bitchanger.gui.controller + + + + + + + + + + + + + + + +
+ +
+
+
+

Package bitchanger.gui.controller

+
+
+
+ + +
Stellt Controller bereit, die den Views eine Funktion geben.
+
+ +
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controller/package-tree.html b/doc/0.1.4/de_private/bitchanger/gui/controller/package-tree.html new file mode 100644 index 0000000..eba378e --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controller/package-tree.html @@ -0,0 +1,184 @@ + + + + + +bitchanger.gui.controller Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package bitchanger.gui.controller

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+

Interface Hierarchy

+ +
+
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controller/package-use.html b/doc/0.1.4/de_private/bitchanger/gui/controller/package-use.html new file mode 100644 index 0000000..37e6562 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controller/package-use.html @@ -0,0 +1,309 @@ + + + + + +Uses of Package bitchanger.gui.controller + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
bitchanger.gui.controller

+
+
+ +
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controls/AlphaNumGrid.html b/doc/0.1.4/de_private/bitchanger/gui/controls/AlphaNumGrid.html new file mode 100644 index 0000000..728ca31 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controls/AlphaNumGrid.html @@ -0,0 +1,788 @@ + + + + + +AlphaNumGrid + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class AlphaNumGrid

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Controllable
    +
    +
    +
    public class AlphaNumGrid
    +extends Object
    +implements Controllable
    +
    +
    Since:
    +
    Bitchanger 0.1.0
    +
    Version:
    +
    0.1.4
    +
    Author:
    +
    Tim
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        +
      • +

        ALPHA_KEYS

        +
        public static final String[] ALPHA_KEYS
        +
      • +
      + + + +
        +
      • +

        NUM_KEYS

        +
        public static final String[] NUM_KEYS
        +
      • +
      + + + +
        +
      • +

        buttonList

        +
        private ArrayList<javafx.scene.Node> buttonList
        +
      • +
      + + + +
        +
      • +

        buttonMap

        +
        private HashMap<String,​javafx.scene.control.Button> buttonMap
        +
      • +
      + + + +
        +
      • +

        keyboardBtn

        +
        private javafx.scene.control.Button keyboardBtn
        +
      • +
      + + + +
        +
      • +

        previousBtn

        +
        private javafx.scene.control.Button previousBtn
        +
      • +
      + + + +
        +
      • +

        nextBtn

        +
        private javafx.scene.control.Button nextBtn
        +
      • +
      + + + +
        +
      • +

        commaBtn

        +
        private javafx.scene.control.Button commaBtn
        +
      • +
      + + + +
        +
      • +

        arrowButtons

        +
        private javafx.scene.layout.HBox arrowButtons
        +
      • +
      + + + +
        +
      • +

        spacing

        +
        private double spacing
        +
      • +
      + + + + +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        AlphaNumGrid

        +
        public AlphaNumGrid​(double spacing)
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getTextFieldMap

        +
        public HashMap<String,​javafx.scene.control.TextField> getTextFieldMap()
        +
        Description copied from interface: Controllable
        +
        Gibt eine Map mit allen Textfelder der View zurück. Jedes Textfeld ist einem eindeutigen Schlüsselwort zugeordnet, + mit dem es aus der Map herausgesucht werden kann. +

        + Jedes Schlüsselwort sollte einen Sinnvollen Bezug zum Einsatz des Textfeldes haben! +

        +
        +
        Specified by:
        +
        getTextFieldMap in interface Controllable
        +
        Returns:
        +
        Map, die alle Textfelder einer View enthält
        +
        +
      • +
      + + + +
        +
      • +

        getButtonMap

        +
        public HashMap<String,​javafx.scene.control.Button> getButtonMap()
        +
        Description copied from interface: Controllable
        +
        Gibt eine Map mit allen Buttons der View zurück. Jeder Button ist einem eindeutigen Schlüsselwort zugeordnet, + mit dem er aus der Map herausgesucht werden kann. +

        + Jedes Schlüsselwort sollte einen Sinnvollen Bezug zum Einsatz des Buttons haben! +

        +
        +
        Specified by:
        +
        getButtonMap in interface Controllable
        +
        Returns:
        +
        Map, die alle Buttons einer View enthält
        +
        +
      • +
      + + + +
        +
      • +

        getNodeMap

        +
        public HashMap<String,​javafx.scene.Node> getNodeMap()
        +
        Description copied from interface: Controllable
        +
        Gibt eine Map mit allen Elemente (Nodes) der View zurück, die keine Buttons oder Textfelder sind und im Controller benötigt werden. + Jedes Element ist einem eindeutigen Schlüsselwort zugeordnet, mit dem es aus der Map herausgesucht werden kann. +

        + Jedes Schlüsselwort sollte einen Sinnvollen Bezug zum Einsatz des Elements haben! +

        +
        +
        Specified by:
        +
        getNodeMap in interface Controllable
        +
        Returns:
        +
        Map, die alle Elemente einer View enthält, die keine Buttons oder Textfelder sind und im Controller benötigt werden
        +
        +
      • +
      + + + +
        +
      • +

        getArrowButtons

        +
        public javafx.scene.layout.HBox getArrowButtons()
        +
      • +
      + + + +
        +
      • +

        getButtonMatrix

        +
        public ArrayList<javafx.scene.Node> getButtonMatrix()
        +
      • +
      + + + +
        +
      • +

        setNextButton

        +
        private void setNextButton​(javafx.scene.Node button,
        +                           int column,
        +                           int row,
        +                           String key)
        +
      • +
      + + + +
        +
      • +

        setNextButton

        +
        private void setNextButton​(javafx.scene.Node button,
        +                           int column,
        +                           int row)
        +
      • +
      + + + +
        +
      • +

        createButtons

        +
        private void createButtons()
        +
      • +
      + + + +
        +
      • +

        createControlButtons

        +
        private void createControlButtons()
        +
      • +
      + + + +
        +
      • +

        createMainMatrix

        +
        private void createMainMatrix()
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controls/AlphaNumKeys.html b/doc/0.1.4/de_private/bitchanger/gui/controls/AlphaNumKeys.html new file mode 100644 index 0000000..ab51209 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controls/AlphaNumKeys.html @@ -0,0 +1,1054 @@ + + + + + +AlphaNumKeys + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class AlphaNumKeys

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Controllable
    +
    +
    +
    public class AlphaNumKeys
    +extends Object
    +implements Controllable
    +
    AlphaNumKeys stellt ein Tastaturlayout als 4x5 Matrix bereit. Am linken Rand befinden sich sechs "Alpha-Buttons", die + zur Eingabe von Buchstaben bestimmt sind. Rechts daneben steht ein 3x3 Nummernfeld zur Verfügung, um Zahlen einzugeben. + Die untere Zeile enthält einen Button zum Umschalten in die Alphabet-Ansicht, in der das Alphabet auf allen Alpha- und + Nummern-Buttons abgebildet wird. Zudem gibt es zwei Buttons, mit denen durch die Buchstaben der Tastatur gescrollt werden + kann. Daneben befindet sich ein Button zum invertieren des Vorzeichens einer Zahl, sowie ein Button für die Zahl Null im + Nummernfeld-Modus und ein Button zur Eingabe eines Kommas. + +

    + Die Funktion erhält die Tastaturmatrix durch einen AlphaNumKeysController. +

    +

    + Alle alphanumerischen Buttons sind Instanzen von ValueButton und alle weiteren Buttons sind Instanzen von + UnfocusedButton, um den Fokus nicht auf die Tastatur zu lenken und weitere Funktionen zur Verfügung zu stellen. +

    +
    +
    Since:
    +
    Bitchanger 0.1.0
    +
    Version:
    +
    0.1.4
    +
    Author:
    +
    Tim Mühle
    +
    See Also:
    +
    AlphaNumKeysController, +UnfocusedButton, +ValueButton
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      static String[]ALPHA_KEYS +
      Array, das die Schlüsselwörter für die Buchstaben-Buttons definiert
      +
      private javafx.scene.layout.HBoxarrowButtons +
      HBox mit den Buttons, mit denen durch die Tastatur gescrollt werden kann.
      +
      private ArrayList<javafx.scene.Node>buttonList +
      Liste, die alle Buttons der Tastatur-Matrix enthält
      +
      private HashMap<String,​javafx.scene.control.Button>buttonMap +
      Map, in die alle vom Controller benötigten Buttons mit + einem eindeutigen Schlüssel abgelegt werden
      +
      static intCOLUMN_COUNT +
      Konstante, die die Anzahl der Spalten dieser Tastaturmatrix enthält
      +
      static StringCOMMA_BTN_KEY +
      Schlüsselwort für den Komma-Button
      +
      private javafx.scene.control.ButtoncommaBtn +
      Button, mit dem ein Komma eingegeben werden kann
      +
      private Controllercontroller +
      Controller, der die Funktion zu den Bedienelementen hinzufügt.
      +
      private intfirstColumn +
      Erste Spalte, in der die Buttons in einer GridPane positioniert werden
      +
      private intfirstRow +
      Erste Zeile, in der die Buttons in einer GridPane positioniert werden
      +
      static StringKEYBOARD_BTN_KEY +
      Schlüsselwort für den Button zum Umschalten des Tastaturlayouts
      +
      private javafx.scene.control.ButtonkeyboardBtn +
      Button zum Umschalten zwischen Nummernfeld und Alphabet-Ansicht
      +
      static StringNEXT_BTN_KEY +
      Schlüsselwort für den Button zum Weiterscrollen durch die Tastatur
      +
      private javafx.scene.control.ButtonnextBtn +
      Button, mit dem durch die Tastatur vorwärts gescrollt werden kann
      +
      static String[]NUM_KEYS +
      Array, das die Schlüsselwörter für die Zahlen-Buttons definiert
      +
      static StringPREVIOUS_BTN_KEY +
      Schlüsselwort für den Button zum Rückwärtsscrollen durch die Tastatur
      +
      private javafx.scene.control.ButtonpreviousBtn +
      Button, mit dem durch die Tastatur zurück gescrollt werden kann
      +
      static intROW_COUNT +
      Konstante, die die Anzahl der Zeilen dieser Tastaturmatrix enthält
      +
      static StringSIGN_BTN_KEY +
      Schlüsselwort für den Button zum Vorzeichenwechsel
      +
      javafx.beans.property.DoublePropertyspacingProperty +
      Property für den Abstand der Buttons previousBtn und nextBtn in der HBox arrowButtons
      +
      static StringZERO_BTN_KEY +
      Schlüsselwort für den Button, der die Null repräsentiert
      +
      + +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      AlphaNumKeys​(int firstRow, + int firstColumn, + double spacing, + javafx.scene.Scene scene) +
      Erstellt alle Buttons für das Tastaturlayout und setzt die Constraints für die Positionierung in einer GridPane.
      +
      AlphaNumKeys​(int firstRow, + int firstColumn, + javafx.beans.property.DoubleProperty spacingProperty, + javafx.scene.Scene scene) +
      Erstellt alle Buttons für das Tastaturlayout und setzt die Constraints für die Positionierung in einer GridPane.
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethodDescription
      private voidaddButton​(javafx.scene.Node button, + int column, + int row) +
      Fügt den nächsten Button zur Liste buttonList hinzu + und setzt die Constraints zur Positionierung in einer GridPane.
      +
      private voidaddButton​(javafx.scene.Node button, + int column, + int row, + String key) +
      Fügt den nächsten Button zur Liste buttonList und zur Map buttonMap hinzu + und setzt die Constraints zur Positionierung in einer GridPane.
      +
      private voidcreateButtons() +
      Erstellt alle Buttons des Tastaturlayouts und setzt alle Constraints zur Positionierung in einer GridPane.
      +
      private voidcreateControlButtons() +
      Erstellt die Steuer-Buttons in der untersten Zeile des Tastaturlayouts, fügt diese der Map buttonMap + hinzu und setzt die Constraint zur Positionierung in einer GridPane.
      +
      private voidcreateMainMatrix() +
      Erstellt die Matrix mit den sechs Buchstaben- und neun Zahlen-Buttons.
      +
      javafx.scene.layout.HBoxgetArrowButtons() +
      Gibt die HBox mit den Buttons, mit denen durch die Tastatur gescrollt werden kann, zurück
      +
      Map<String,​javafx.scene.control.Button>getButtonMap() +
      Gibt eine Map mit allen Buttons der View zurück.
      +
      ArrayList<javafx.scene.Node>getButtonMatrix() +
      Gibt die Liste mit allen Nodes der Tastatur-Matrix zurück.
      +
      Map<String,​javafx.scene.Node>getNodeMap() +
      Gibt eine Map mit allen Elemente (Nodes) der View zurück, die keine Buttons oder Textfelder sind und im Controller benötigt werden.
      +
      Map<String,​javafx.scene.control.TextField>getTextFieldMap() +
      Gibt eine Map mit allen Textfelder der View zurück.
      +
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        SIGN_BTN_KEY

        +
        public static final String SIGN_BTN_KEY
        +
        Schlüsselwort für den Button zum Vorzeichenwechsel
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        ZERO_BTN_KEY

        +
        public static final String ZERO_BTN_KEY
        +
        Schlüsselwort für den Button, der die Null repräsentiert
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        COMMA_BTN_KEY

        +
        public static final String COMMA_BTN_KEY
        +
        Schlüsselwort für den Komma-Button
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        KEYBOARD_BTN_KEY

        +
        public static final String KEYBOARD_BTN_KEY
        +
        Schlüsselwort für den Button zum Umschalten des Tastaturlayouts
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        NEXT_BTN_KEY

        +
        public static final String NEXT_BTN_KEY
        +
        Schlüsselwort für den Button zum Weiterscrollen durch die Tastatur
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        PREVIOUS_BTN_KEY

        +
        public static final String PREVIOUS_BTN_KEY
        +
        Schlüsselwort für den Button zum Rückwärtsscrollen durch die Tastatur
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        ALPHA_KEYS

        +
        public static final String[] ALPHA_KEYS
        +
        Array, das die Schlüsselwörter für die Buchstaben-Buttons definiert
        +
      • +
      + + + +
        +
      • +

        NUM_KEYS

        +
        public static final String[] NUM_KEYS
        +
        Array, das die Schlüsselwörter für die Zahlen-Buttons definiert
        +
      • +
      + + + +
        +
      • +

        ROW_COUNT

        +
        public static final int ROW_COUNT
        +
        Konstante, die die Anzahl der Zeilen dieser Tastaturmatrix enthält
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        COLUMN_COUNT

        +
        public static final int COLUMN_COUNT
        +
        Konstante, die die Anzahl der Spalten dieser Tastaturmatrix enthält
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        spacingProperty

        +
        public final javafx.beans.property.DoubleProperty spacingProperty
        +
        Property für den Abstand der Buttons previousBtn und nextBtn in der HBox arrowButtons
        +
      • +
      + + + +
        +
      • +

        buttonList

        +
        private final ArrayList<javafx.scene.Node> buttonList
        +
        Liste, die alle Buttons der Tastatur-Matrix enthält
        +
      • +
      + + + +
        +
      • +

        buttonMap

        +
        private final HashMap<String,​javafx.scene.control.Button> buttonMap
        +
        Map, in die alle vom Controller benötigten Buttons mit + einem eindeutigen Schlüssel abgelegt werden
        +
      • +
      + + + +
        +
      • +

        keyboardBtn

        +
        private javafx.scene.control.Button keyboardBtn
        +
        Button zum Umschalten zwischen Nummernfeld und Alphabet-Ansicht
        +
      • +
      + + + +
        +
      • +

        previousBtn

        +
        private javafx.scene.control.Button previousBtn
        +
        Button, mit dem durch die Tastatur zurück gescrollt werden kann
        +
      • +
      + + + +
        +
      • +

        nextBtn

        +
        private javafx.scene.control.Button nextBtn
        +
        Button, mit dem durch die Tastatur vorwärts gescrollt werden kann
        +
      • +
      + + + +
        +
      • +

        commaBtn

        +
        private javafx.scene.control.Button commaBtn
        +
        Button, mit dem ein Komma eingegeben werden kann
        +
      • +
      + + + +
        +
      • +

        arrowButtons

        +
        private javafx.scene.layout.HBox arrowButtons
        +
        HBox mit den Buttons, mit denen durch die Tastatur gescrollt werden kann.
        +
      • +
      + + + +
        +
      • +

        firstRow

        +
        private int firstRow
        +
        Erste Zeile, in der die Buttons in einer GridPane positioniert werden
        +
      • +
      + + + +
        +
      • +

        firstColumn

        +
        private int firstColumn
        +
        Erste Spalte, in der die Buttons in einer GridPane positioniert werden
        +
      • +
      + + + +
        +
      • +

        controller

        +
        private final Controller controller
        +
        Controller, der die Funktion zu den Bedienelementen hinzufügt. + Es ist nur einmalig erlaubt einen Controller zuzuweisen!
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        AlphaNumKeys

        +
        public AlphaNumKeys​(int firstRow,
        +                    int firstColumn,
        +                    double spacing,
        +                    javafx.scene.Scene scene)
        +
        Erstellt alle Buttons für das Tastaturlayout und setzt die Constraints für die Positionierung in einer GridPane. + Zudem werden alle Bedienelemente durch einen AlphaNumKeysController mit der entsprechenden Funktion belegt, + um Tastatureingaben zu simulieren. +

        + Wenn firstRow oder firstColumn kleiner als 0 sind, werden keine Buttons erzeugt und nur eine leere + Map bereitgestellt! +

        +
        +
        Parameters:
        +
        firstRow - Erste Zeile, in der die Buttons in einer GridPane positioniert werden
        +
        firstColumn - Erste Spalte, in der die Buttons in einer GridPane positioniert werden
        +
        spacing - Abstand der Buttons previousBtn und nextBtn in der HBox arrowButtons, sollte dem Wert von dem + Abstand in der GridPane entsprechen. Die spacingProperty wird mit diesem Wert initialisiert.
        +
        scene - Scene, an die der Controller gebunden wird und die alle simulierten KeyEvents erhält
        +
        +
      • +
      + + + +
        +
      • +

        AlphaNumKeys

        +
        public AlphaNumKeys​(int firstRow,
        +                    int firstColumn,
        +                    javafx.beans.property.DoubleProperty spacingProperty,
        +                    javafx.scene.Scene scene)
        +
        Erstellt alle Buttons für das Tastaturlayout und setzt die Constraints für die Positionierung in einer GridPane. + Zudem werden alle Bedienelemente durch einen AlphaNumKeysController mit der entsprechenden Funktion belegt, + um Tastatureingaben zu simulieren. +

        + Wenn firstRow oder firstColumn kleiner als 0 sind, werden keine Buttons erzeugt und nur eine leere + Map bereitgestellt! +

        +
        +
        Parameters:
        +
        firstRow - Erste Zeile, in der die Buttons in einer GridPane positioniert werden
        +
        firstColumn - Erste Spalte, in der die Buttons in einer GridPane positioniert werden
        +
        spacingProperty - Property, an die die spacingProperty gebunden wird
        +
        scene - Scene, an die der Controller gebunden wird und die alle simulierten KeyEvents erhält
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getTextFieldMap

        +
        public Map<String,​javafx.scene.control.TextField> getTextFieldMap()
        +
        Gibt eine Map mit allen Textfelder der View zurück. Jedes Textfeld ist einem eindeutigen Schlüsselwort zugeordnet, + mit dem es aus der Map herausgesucht werden kann. +

        + Jedes Schlüsselwort sollte einen Sinnvollen Bezug zum Einsatz des Textfeldes haben! +

        +
        +
        Specified by:
        +
        getTextFieldMap in interface Controllable
        +
        Returns:
        +
        Map, die alle Textfelder einer View enthält
        +
        +
      • +
      + + + +
        +
      • +

        getButtonMap

        +
        public Map<String,​javafx.scene.control.Button> getButtonMap()
        +
        Gibt eine Map mit allen Buttons der View zurück. Jeder Button ist einem eindeutigen Schlüsselwort zugeordnet, + mit dem er aus der Map herausgesucht werden kann. +

        + Jedes Schlüsselwort sollte einen Sinnvollen Bezug zum Einsatz des Buttons haben! +

        +
        +
        Specified by:
        +
        getButtonMap in interface Controllable
        +
        Returns:
        +
        Map, die alle Buttons einer View enthält
        +
        +
      • +
      + + + +
        +
      • +

        getNodeMap

        +
        public Map<String,​javafx.scene.Node> getNodeMap()
        +
        Gibt eine Map mit allen Elemente (Nodes) der View zurück, die keine Buttons oder Textfelder sind und im Controller benötigt werden. + Jedes Element ist einem eindeutigen Schlüsselwort zugeordnet, mit dem es aus der Map herausgesucht werden kann. +

        + Jedes Schlüsselwort sollte einen Sinnvollen Bezug zum Einsatz des Elements haben! +

        +
        +
        Specified by:
        +
        getNodeMap in interface Controllable
        +
        Returns:
        +
        Map, die alle Elemente einer View enthält, die keine Buttons oder Textfelder sind und im Controller benötigt werden
        +
        +
      • +
      + + + +
        +
      • +

        getArrowButtons

        +
        public javafx.scene.layout.HBox getArrowButtons()
        +
        Gibt die HBox mit den Buttons, mit denen durch die Tastatur gescrollt werden kann, zurück
        +
        +
        Returns:
        +
        HBox mit den Buttons, mit denen durch die Tastatur gescrollt werden kann
        +
        +
      • +
      + + + +
        +
      • +

        getButtonMatrix

        +
        public ArrayList<javafx.scene.Node> getButtonMatrix()
        +
        Gibt die Liste mit allen Nodes der Tastatur-Matrix zurück. Alle Elemente sind in der Reihenfolge + angeordnet, wie sie Zeilenweise in der Tabelle positioniert sind.
        +
        +
        Returns:
        +
        Liste mit allen Nodes der Tastatur-Matrix
        +
        +
      • +
      + + + +
        +
      • +

        addButton

        +
        private void addButton​(javafx.scene.Node button,
        +                       int column,
        +                       int row,
        +                       String key)
        +
        Fügt den nächsten Button zur Liste buttonList und zur Map buttonMap hinzu + und setzt die Constraints zur Positionierung in einer GridPane.
        +
        +
        Parameters:
        +
        button - Node, die hinzugefügt und positioniert wird
        +
        column - Spalte in der die Node positioniert wird
        +
        row - Zeile in der die Node positioniert wird
        +
        key - Schlüsselwort, mit dem der Button in der Map abgelegt wird
        +
        +
      • +
      + + + +
        +
      • +

        addButton

        +
        private void addButton​(javafx.scene.Node button,
        +                       int column,
        +                       int row)
        +
        Fügt den nächsten Button zur Liste buttonList hinzu + und setzt die Constraints zur Positionierung in einer GridPane.
        +
        +
        Parameters:
        +
        button - Node, die hinzugefügt und positioniert wird
        +
        column - Spalte in der die Node positioniert wird
        +
        row - Zeile in der die Node positioniert wird
        +
        +
      • +
      + + + +
        +
      • +

        createButtons

        +
        private void createButtons()
        +
        Erstellt alle Buttons des Tastaturlayouts und setzt alle Constraints zur Positionierung in einer GridPane.
        +
        +
        See Also:
        +
        createMainMatrix(), +createControlButtons()
        +
        +
      • +
      + + + +
        +
      • +

        createMainMatrix

        +
        private void createMainMatrix()
        +
        Erstellt die Matrix mit den sechs Buchstaben- und neun Zahlen-Buttons. + Alle Buttons werden in der Map buttonMap gespeichert und die + Constraints zur Positionierung in einer GridPane gesetzt.
        +
      • +
      + + + +
        +
      • +

        createControlButtons

        +
        private void createControlButtons()
        +
        Erstellt die Steuer-Buttons in der untersten Zeile des Tastaturlayouts, fügt diese der Map buttonMap + hinzu und setzt die Constraint zur Positionierung in einer GridPane.
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controls/BaseSpinner.html b/doc/0.1.4/de_private/bitchanger/gui/controls/BaseSpinner.html new file mode 100644 index 0000000..0b6a046 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controls/BaseSpinner.html @@ -0,0 +1,459 @@ + + + + + +BaseSpinner + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class BaseSpinner

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • javafx.scene.Node
    • +
    • +
        +
      • javafx.scene.Parent
      • +
      • +
          +
        • javafx.scene.layout.Region
        • +
        • +
            +
          • javafx.scene.control.Control
          • +
          • +
              +
            • javafx.scene.control.Spinner<Integer>
            • +
            • +
                +
              • bitchanger.gui.controls.BaseSpinner
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    javafx.css.Styleable, javafx.event.EventTarget, javafx.scene.control.Skinnable
    +
    +
    +
    public class BaseSpinner
    +extends javafx.scene.control.Spinner<Integer>
    +
    Spinner, mit dem die Basis für ein Zahlensystem ausgewählt werden kann. + +

    + Diese Klasse erweitert die Funktion der Klasse Spinner<T> so, dass der Benutzer + Eingaben im Editor des Spinners machen darf und der im Editor eingegebenen Wert + automatisch während der Eingabe aktualisiert wird, wenn es sich um einen gültigen + Wert handelt. +

    +
    +
    Since:
    +
    Bitchanger 0.1.2
    +
    Version:
    +
    0.1.4
    +
    Author:
    +
    Tim Mühle
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Summary

      +
        +
      • + + +

        Fields inherited from class javafx.scene.control.Spinner

        +STYLE_CLASS_ARROWS_ON_LEFT_HORIZONTAL, STYLE_CLASS_ARROWS_ON_LEFT_VERTICAL, STYLE_CLASS_ARROWS_ON_RIGHT_HORIZONTAL, STYLE_CLASS_SPLIT_ARROWS_HORIZONTAL, STYLE_CLASS_SPLIT_ARROWS_VERTICAL
      • +
      +
        +
      • + + +

        Fields inherited from class javafx.scene.layout.Region

        +USE_COMPUTED_SIZE, USE_PREF_SIZE
      • +
      +
        +
      • + + +

        Fields inherited from class javafx.scene.Node

        +BASELINE_OFFSET_SAME_AS_HEIGHT
      • +
      +
    • +
    +
    + +
    + +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethodDescription
      private booleanhasValidValue() +
      Prüft, ob der Text im Editor ein gültiger Wert ist und mit Methode Spinner.commitValue() + aktualisiert werden kann.
      +
      private voidsetActions() +
      Setzt einen EventHandler, der bei Eingabe im Editor automatisch den Wert überprüft + und, wenn möglich, mit der Methode Spinner.commitValue() aktualisiert.
      +
      +
        +
      • + + +

        Methods inherited from class javafx.scene.control.Spinner

        +cancelEdit, commitValue, createDefaultSkin, decrement, decrement, editableProperty, editorProperty, executeAccessibleAction, getClassCssMetaData, getControlCssMetaData, getEditor, getInitialDelay, getPromptText, getRepeatDelay, getValue, getValueFactory, increment, increment, initialDelayProperty, isEditable, promptTextProperty, queryAccessibleAttribute, repeatDelayProperty, setEditable, setInitialDelay, setPromptText, setRepeatDelay, setValueFactory, valueFactoryProperty, valueProperty
      • +
      +
        +
      • + + +

        Methods inherited from class javafx.scene.control.Control

        +computeMaxHeight, computeMaxWidth, computeMinHeight, computeMinWidth, computePrefHeight, computePrefWidth, contextMenuProperty, getBaselineOffset, getContextMenu, getCssMetaData, getInitialFocusTraversable, getSkin, getTooltip, isResizable, layoutChildren, setContextMenu, setSkin, setTooltip, skinProperty, tooltipProperty
      • +
      +
        +
      • + + +

        Methods inherited from class javafx.scene.layout.Region

        +backgroundProperty, borderProperty, cacheShapeProperty, centerShapeProperty, getBackground, getBorder, getHeight, getInsets, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getOpaqueInsets, getPadding, getPrefHeight, getPrefWidth, getShape, getUserAgentStylesheet, getWidth, heightProperty, insetsProperty, isCacheShape, isCenterShape, isScaleShape, isSnapToPixel, layoutInArea, layoutInArea, layoutInArea, layoutInArea, maxHeight, maxHeightProperty, maxWidth, maxWidthProperty, minHeight, minHeightProperty, minWidth, minWidthProperty, opaqueInsetsProperty, paddingProperty, positionInArea, positionInArea, prefHeight, prefHeightProperty, prefWidth, prefWidthProperty, resize, scaleShapeProperty, setBackground, setBorder, setCacheShape, setCenterShape, setHeight, setMaxHeight, setMaxSize, setMaxWidth, setMinHeight, setMinSize, setMinWidth, setOpaqueInsets, setPadding, setPrefHeight, setPrefSize, setPrefWidth, setScaleShape, setShape, setSnapToPixel, setWidth, shapeProperty, snappedBottomInset, snappedLeftInset, snappedRightInset, snappedTopInset, snapPosition, snapPositionX, snapPositionY, snapSize, snapSizeX, snapSizeY, snapSpace, snapSpaceX, snapSpaceY, snapToPixelProperty, widthProperty
      • +
      +
        +
      • + + +

        Methods inherited from class javafx.scene.Parent

        +getChildren, getChildrenUnmodifiable, getManagedChildren, getStylesheets, isNeedsLayout, layout, lookup, needsLayoutProperty, requestLayout, requestParentLayout, setNeedsLayout, updateBounds
      • +
      +
        +
      • + + +

        Methods inherited from class javafx.scene.Node

        +accessibleHelpProperty, accessibleRoleDescriptionProperty, accessibleRoleProperty, accessibleTextProperty, addEventFilter, addEventHandler, applyCss, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen, contains, contains, cursorProperty, depthTestProperty, disabledProperty, disableProperty, effectiveNodeOrientationProperty, effectProperty, eventDispatcherProperty, fireEvent, focusedProperty, focusTraversableProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getContentBias, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInitialCursor, getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY, getLocalToParentTransform, getLocalToSceneTransform, getNodeOrientation, getOnContextMenuRequested, getOnDragDetected, getOnDragDone, getOnDragDropped, getOnDragEntered, getOnDragExited, getOnDragOver, getOnInputMethodTextChanged, getOnKeyPressed, getOnKeyReleased, getOnKeyTyped, getOnMouseClicked, getOnMouseDragEntered, getOnMouseDragExited, getOnMouseDragged, getOnMouseDragOver, getOnMouseDragReleased, getOnMouseEntered, getOnMouseExited, getOnMouseMoved, getOnMousePressed, getOnMouseReleased, getOnRotate, getOnRotationFinished, getOnRotationStarted, getOnScroll, getOnScrollFinished, getOnScrollStarted, getOnSwipeDown, getOnSwipeLeft, getOnSwipeRight, getOnSwipeUp, getOnTouchMoved, getOnTouchPressed, getOnTouchReleased, getOnTouchStationary, getOnZoom, getOnZoomFinished, getOnZoomStarted, getOpacity, getParent, getProperties, getPseudoClassStates, getRotate, getRotationAxis, getScaleX, getScaleY, getScaleZ, getScene, getStyle, getStyleableParent, getStyleClass, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getTypeSelector, getUserData, getViewOrder, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, isVisible, layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent, localToParent, localToParent, localToParent, localToParent, localToParentTransformProperty, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToSceneTransformProperty, localToScreen, localToScreen, localToScreen, localToScreen, localToScreen, lookupAll, managedProperty, mouseTransparentProperty, nodeOrientationProperty, notifyAccessibleAttributeChanged, onContextMenuRequestedProperty, onDragDetectedProperty, onDragDoneProperty, onDragDroppedProperty, onDragEnteredProperty, onDragExitedProperty, onDragOverProperty, onInputMethodTextChangedProperty, onKeyPressedProperty, onKeyReleasedProperty, onKeyTypedProperty, onMouseClickedProperty, onMouseDragEnteredProperty, onMouseDragExitedProperty, onMouseDraggedProperty, onMouseDragOverProperty, onMouseDragReleasedProperty, onMouseEnteredProperty, onMouseExitedProperty, onMouseMovedProperty, onMousePressedProperty, onMouseReleasedProperty, onRotateProperty, onRotationFinishedProperty, onRotationStartedProperty, onScrollFinishedProperty, onScrollProperty, onScrollStartedProperty, onSwipeDownProperty, onSwipeLeftProperty, onSwipeRightProperty, onSwipeUpProperty, onTouchMovedProperty, onTouchPressedProperty, onTouchReleasedProperty, onTouchStationaryProperty, onZoomFinishedProperty, onZoomProperty, onZoomStartedProperty, opacityProperty, parentProperty, parentToLocal, parentToLocal, parentToLocal, parentToLocal, parentToLocal, pickOnBoundsProperty, pressedProperty, pseudoClassStateChanged, relocate, removeEventFilter, removeEventHandler, requestFocus, resizeRelocate, rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty, scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, screenToLocal, screenToLocal, screenToLocal, setAccessibleHelp, setAccessibleRole, setAccessibleRoleDescription, setAccessibleText, setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest, setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler, setFocused, setFocusTraversable, setHover, setId, setInputMethodRequests, setLayoutX, setLayoutY, setManaged, setMouseTransparent, setNodeOrientation, setOnContextMenuRequested, setOnDragDetected, setOnDragDone, setOnDragDropped, setOnDragEntered, setOnDragExited, setOnDragOver, setOnInputMethodTextChanged, setOnKeyPressed, setOnKeyReleased, setOnKeyTyped, setOnMouseClicked, setOnMouseDragEntered, setOnMouseDragExited, setOnMouseDragged, setOnMouseDragOver, setOnMouseDragReleased, setOnMouseEntered, setOnMouseExited, setOnMouseMoved, setOnMousePressed, setOnMouseReleased, setOnRotate, setOnRotationFinished, setOnRotationStarted, setOnScroll, setOnScrollFinished, setOnScrollStarted, setOnSwipeDown, setOnSwipeLeft, setOnSwipeRight, setOnSwipeUp, setOnTouchMoved, setOnTouchPressed, setOnTouchReleased, setOnTouchStationary, setOnZoom, setOnZoomFinished, setOnZoomStarted, setOpacity, setPickOnBounds, setPressed, setRotate, setRotationAxis, setScaleX, setScaleY, setScaleZ, setStyle, setTranslateX, setTranslateY, setTranslateZ, setUserData, setViewOrder, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, toString, translateXProperty, translateYProperty, translateZProperty, usesMirroring, viewOrderProperty, visibleProperty
      • +
      + +
        +
      • + + +

        Methods inherited from interface javafx.css.Styleable

        +getStyleableNode
      • +
      +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        BaseSpinner

        +
        public BaseSpinner()
        +
        Erzeugt einen BaseSpinner, bei dem die minimale und maximale einstellbare Basis durch die Konstanten + ConvertingNumbers.MIN_BASE und ConvertingNumbers.MAX_BASE gegeben sind. Der Standardwert + wird mit 10 initialisiert.
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        setActions

        +
        private void setActions()
        +
        Setzt einen EventHandler, der bei Eingabe im Editor automatisch den Wert überprüft + und, wenn möglich, mit der Methode Spinner.commitValue() aktualisiert.
        +
      • +
      + + + +
        +
      • +

        hasValidValue

        +
        private boolean hasValidValue()
        +
        Prüft, ob der Text im Editor ein gültiger Wert ist und mit Methode Spinner.commitValue() + aktualisiert werden kann.
        +
        +
        Returns:
        +
        true wenn der Text im Editor ein gültiger Wert ist, sonst false
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controls/BasicMenuBar.html b/doc/0.1.4/de_private/bitchanger/gui/controls/BasicMenuBar.html new file mode 100644 index 0000000..7a0c65f --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controls/BasicMenuBar.html @@ -0,0 +1,994 @@ + + + + + +BasicMenuBar + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class BasicMenuBar

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • javafx.scene.Node
    • +
    • +
        +
      • javafx.scene.Parent
      • +
      • +
          +
        • javafx.scene.layout.Region
        • +
        • +
            +
          • javafx.scene.control.Control
          • +
          • +
              +
            • javafx.scene.control.MenuBar
            • +
            • +
                +
              • bitchanger.gui.controls.BasicMenuBar
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Controllable, javafx.css.Styleable, javafx.event.EventTarget, javafx.scene.control.Skinnable
    +
    +
    +
    Direct Known Subclasses:
    +
    ConverterMenuBar
    +
    +
    +
    public class BasicMenuBar
    +extends javafx.scene.control.MenuBar
    +implements Controllable
    +
    Basis Menüleiste, die die allgemein benötigten Menüpunkte enthält. + Über die MenuItems, die in Optionen -> Komma einstellen vorhanden sind, wird + entsprechend das Preferences.commaProperty geändert. + Weitere Funktionen können über Controller hinzugefügt werden.
    +
    +
    Since:
    +
    Bitchanger 0.1.4
    +
    Version:
    +
    0.1.4
    +
    Author:
    +
    Tim Mühle
    +
    See Also:
    +
    BasicMenuController
    +
    +
  • +
+
+
+
    +
  • + +
    + +
    + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      BasicMenuBar() +
      Erzeugt eine neue BasicMenuBar mit allen MenuItems.
      +
      BasicMenuBar​(ControllableApplication controllableApp) +
      Erzeugt eine neue BasicMenuBar mit allen MenuItems, die bereits mit den Basisfunktionen belegt sind.
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethodDescription
      private voidaddMenu​(javafx.scene.control.Menu m, + String key) +
      Fügt das übergebene Menu zu dieser MenuBar hinzu und speichert dieses mit dem Schlüssel + key in der Map menuItemMap
      +
      private voidcreateMenuHelp() +
      Erstellt das Menu "Hilfe" mit den Elementen "Ãœber" und "Version"
      +
      private voidcreateMenuModus() +
      Erstellt das Menu "Modus" mit den Elementen "Umrechner", "IEEE" und "Berechnungen"
      +
      private voidcreateMenuOptions() +
      Erstellt das Menu "Optionen" mit den Elementen "Komma wählen" und den Unterelementen + "deutsch" und "englisch"
      +
      private voidcreateMenuView() +
      Erstellt das Menu "Ansicht" mit den Elementen "Stil", "Auf Monitor bewegen" und "Vollbild"
      +
      Map<String,​javafx.scene.control.Button>getButtonMap() +
      Gibt eine Map mit allen Buttons der View zurück.
      +
      Map<String,​javafx.scene.Node>getNodeMap() +
      Gibt eine Map mit allen Elemente (Nodes) der View zurück, die keine Buttons oder Textfelder sind und im Controller benötigt werden.
      +
      Map<String,​javafx.scene.control.TextField>getTextFieldMap() +
      Gibt eine Map mit allen Textfelder der View zurück.
      +
      private voidsetChooseCommaAction​(javafx.scene.control.MenuItem chooseComma, + Comma comma) +
      Setzt die Action des übergebenen MenuItems, sodass das spezifische Comma in den Einstellungen + gesetzt wird.
      +
      +
        +
      • + + +

        Methods inherited from class javafx.scene.control.MenuBar

        +createDefaultSkin, getClassCssMetaData, getControlCssMetaData, getInitialFocusTraversable, getMenus, isUseSystemMenuBar, setUseSystemMenuBar, useSystemMenuBarProperty
      • +
      +
        +
      • + + +

        Methods inherited from class javafx.scene.control.Control

        +computeMaxHeight, computeMaxWidth, computeMinHeight, computeMinWidth, computePrefHeight, computePrefWidth, contextMenuProperty, executeAccessibleAction, getBaselineOffset, getContextMenu, getCssMetaData, getSkin, getTooltip, isResizable, layoutChildren, queryAccessibleAttribute, setContextMenu, setSkin, setTooltip, skinProperty, tooltipProperty
      • +
      +
        +
      • + + +

        Methods inherited from class javafx.scene.layout.Region

        +backgroundProperty, borderProperty, cacheShapeProperty, centerShapeProperty, getBackground, getBorder, getHeight, getInsets, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getOpaqueInsets, getPadding, getPrefHeight, getPrefWidth, getShape, getUserAgentStylesheet, getWidth, heightProperty, insetsProperty, isCacheShape, isCenterShape, isScaleShape, isSnapToPixel, layoutInArea, layoutInArea, layoutInArea, layoutInArea, maxHeight, maxHeightProperty, maxWidth, maxWidthProperty, minHeight, minHeightProperty, minWidth, minWidthProperty, opaqueInsetsProperty, paddingProperty, positionInArea, positionInArea, prefHeight, prefHeightProperty, prefWidth, prefWidthProperty, resize, scaleShapeProperty, setBackground, setBorder, setCacheShape, setCenterShape, setHeight, setMaxHeight, setMaxSize, setMaxWidth, setMinHeight, setMinSize, setMinWidth, setOpaqueInsets, setPadding, setPrefHeight, setPrefSize, setPrefWidth, setScaleShape, setShape, setSnapToPixel, setWidth, shapeProperty, snappedBottomInset, snappedLeftInset, snappedRightInset, snappedTopInset, snapPosition, snapPositionX, snapPositionY, snapSize, snapSizeX, snapSizeY, snapSpace, snapSpaceX, snapSpaceY, snapToPixelProperty, widthProperty
      • +
      +
        +
      • + + +

        Methods inherited from class javafx.scene.Parent

        +getChildren, getChildrenUnmodifiable, getManagedChildren, getStylesheets, isNeedsLayout, layout, lookup, needsLayoutProperty, requestLayout, requestParentLayout, setNeedsLayout, updateBounds
      • +
      +
        +
      • + + +

        Methods inherited from class javafx.scene.Node

        +accessibleHelpProperty, accessibleRoleDescriptionProperty, accessibleRoleProperty, accessibleTextProperty, addEventFilter, addEventHandler, applyCss, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen, contains, contains, cursorProperty, depthTestProperty, disabledProperty, disableProperty, effectiveNodeOrientationProperty, effectProperty, eventDispatcherProperty, fireEvent, focusedProperty, focusTraversableProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getContentBias, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInitialCursor, getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY, getLocalToParentTransform, getLocalToSceneTransform, getNodeOrientation, getOnContextMenuRequested, getOnDragDetected, getOnDragDone, getOnDragDropped, getOnDragEntered, getOnDragExited, getOnDragOver, getOnInputMethodTextChanged, getOnKeyPressed, getOnKeyReleased, getOnKeyTyped, getOnMouseClicked, getOnMouseDragEntered, getOnMouseDragExited, getOnMouseDragged, getOnMouseDragOver, getOnMouseDragReleased, getOnMouseEntered, getOnMouseExited, getOnMouseMoved, getOnMousePressed, getOnMouseReleased, getOnRotate, getOnRotationFinished, getOnRotationStarted, getOnScroll, getOnScrollFinished, getOnScrollStarted, getOnSwipeDown, getOnSwipeLeft, getOnSwipeRight, getOnSwipeUp, getOnTouchMoved, getOnTouchPressed, getOnTouchReleased, getOnTouchStationary, getOnZoom, getOnZoomFinished, getOnZoomStarted, getOpacity, getParent, getProperties, getPseudoClassStates, getRotate, getRotationAxis, getScaleX, getScaleY, getScaleZ, getScene, getStyle, getStyleableParent, getStyleClass, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getTypeSelector, getUserData, getViewOrder, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, isVisible, layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent, localToParent, localToParent, localToParent, localToParent, localToParentTransformProperty, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToSceneTransformProperty, localToScreen, localToScreen, localToScreen, localToScreen, localToScreen, lookupAll, managedProperty, mouseTransparentProperty, nodeOrientationProperty, notifyAccessibleAttributeChanged, onContextMenuRequestedProperty, onDragDetectedProperty, onDragDoneProperty, onDragDroppedProperty, onDragEnteredProperty, onDragExitedProperty, onDragOverProperty, onInputMethodTextChangedProperty, onKeyPressedProperty, onKeyReleasedProperty, onKeyTypedProperty, onMouseClickedProperty, onMouseDragEnteredProperty, onMouseDragExitedProperty, onMouseDraggedProperty, onMouseDragOverProperty, onMouseDragReleasedProperty, onMouseEnteredProperty, onMouseExitedProperty, onMouseMovedProperty, onMousePressedProperty, onMouseReleasedProperty, onRotateProperty, onRotationFinishedProperty, onRotationStartedProperty, onScrollFinishedProperty, onScrollProperty, onScrollStartedProperty, onSwipeDownProperty, onSwipeLeftProperty, onSwipeRightProperty, onSwipeUpProperty, onTouchMovedProperty, onTouchPressedProperty, onTouchReleasedProperty, onTouchStationaryProperty, onZoomFinishedProperty, onZoomProperty, onZoomStartedProperty, opacityProperty, parentProperty, parentToLocal, parentToLocal, parentToLocal, parentToLocal, parentToLocal, pickOnBoundsProperty, pressedProperty, pseudoClassStateChanged, relocate, removeEventFilter, removeEventHandler, requestFocus, resizeRelocate, rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty, scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, screenToLocal, screenToLocal, screenToLocal, setAccessibleHelp, setAccessibleRole, setAccessibleRoleDescription, setAccessibleText, setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest, setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler, setFocused, setFocusTraversable, setHover, setId, setInputMethodRequests, setLayoutX, setLayoutY, setManaged, setMouseTransparent, setNodeOrientation, setOnContextMenuRequested, setOnDragDetected, setOnDragDone, setOnDragDropped, setOnDragEntered, setOnDragExited, setOnDragOver, setOnInputMethodTextChanged, setOnKeyPressed, setOnKeyReleased, setOnKeyTyped, setOnMouseClicked, setOnMouseDragEntered, setOnMouseDragExited, setOnMouseDragged, setOnMouseDragOver, setOnMouseDragReleased, setOnMouseEntered, setOnMouseExited, setOnMouseMoved, setOnMousePressed, setOnMouseReleased, setOnRotate, setOnRotationFinished, setOnRotationStarted, setOnScroll, setOnScrollFinished, setOnScrollStarted, setOnSwipeDown, setOnSwipeLeft, setOnSwipeRight, setOnSwipeUp, setOnTouchMoved, setOnTouchPressed, setOnTouchReleased, setOnTouchStationary, setOnZoom, setOnZoomFinished, setOnZoomStarted, setOpacity, setPickOnBounds, setPressed, setRotate, setRotationAxis, setScaleX, setScaleY, setScaleZ, setStyle, setTranslateX, setTranslateY, setTranslateZ, setUserData, setViewOrder, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, toString, translateXProperty, translateYProperty, translateZProperty, usesMirroring, viewOrderProperty, visibleProperty
      • +
      + +
        +
      • + + +

        Methods inherited from interface javafx.css.Styleable

        +getStyleableNode
      • +
      +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + + + + + +
        +
      • +

        OPTIONS_MENU_KEY

        +
        public static final String OPTIONS_MENU_KEY
        +
        Schlüsselwort, mit dem das Menu "Optionen" in der Map menuItemMap abgelegt ist
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + + + + + + + + + +
        +
      • +

        MODUS_CONVERTER_ITEM_KEY

        +
        public static final String MODUS_CONVERTER_ITEM_KEY
        +
        Schlüsselwort, mit dem das MenuItem "Umrechner" in der Map menuItemMap abgelegt ist
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        MODUS_IEEE_ITEM_KEY

        +
        public static final String MODUS_IEEE_ITEM_KEY
        +
        Schlüsselwort, mit dem das MenuItem "IEEE" in der Map menuItemMap abgelegt ist
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        MODUS_CALCULATOR_ITEM_KEY

        +
        public static final String MODUS_CALCULATOR_ITEM_KEY
        +
        Schlüsselwort, mit dem das MenuItem "Berechnungen" in der Map menuItemMap abgelegt ist
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        VIEW_STYLE_MENU_KEY

        +
        public static final String VIEW_STYLE_MENU_KEY
        +
        Schlüsselwort, mit dem das Menu "Stil" in der Map menuItemMap abgelegt ist
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        VIEW_STYLE_LIGHT_ITEM_KEY

        +
        public static final String VIEW_STYLE_LIGHT_ITEM_KEY
        +
        Schlüsselwort, mit dem das MenuItem "Hell" in der Map menuItemMap abgelegt ist
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        VIEW_STYLE_DARK_ITEM_KEY

        +
        public static final String VIEW_STYLE_DARK_ITEM_KEY
        +
        Schlüsselwort, mit dem das MenuItem "Dunkel" in der Map menuItemMap abgelegt ist
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        VIEW_MOVE_TO_SCREEN_ITEM_KEY

        +
        public static final String VIEW_MOVE_TO_SCREEN_ITEM_KEY
        +
        Schlüsselwort, mit dem das MenuItem "Auf Monitor bewegen" in der Map menuItemMap abgelegt ist
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        VIEW_SHOW_FULLSCREEN_ITEM_KEY

        +
        public static final String VIEW_SHOW_FULLSCREEN_ITEM_KEY
        +
        Schlüsselwort, mit dem das CheckMenuItem "Vollbild" in der Map menuItemMap abgelegt ist
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        HELP_ABOUT_ITEM_KEY

        +
        public static final String HELP_ABOUT_ITEM_KEY
        +
        Schlüsselwort, mit dem das MenuItem "Über" in der Map menuItemMap abgelegt ist
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        HELP_VERSION_ITEM_KEY

        +
        public static final String HELP_VERSION_ITEM_KEY
        +
        Schlüsselwort, mit dem das MenuItem "Version" in der Map menuItemMap abgelegt ist
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        HELP_RESET_PREFS_ITEM_KEY

        +
        public static final String HELP_RESET_PREFS_ITEM_KEY
        +
        Schlüsselwort, mit dem das MenuItem "Einstellungen zurücksetzen" in der Map menuItemMap abgelegt ist
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        menuItemMap

        +
        public final HashMap<String,​javafx.scene.control.MenuItem> menuItemMap
        +
        Map, in der alle vom Controller benötigten MenuItems mit einem eindeutigen Schlüssel abgelegt werden
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        BasicMenuBar

        +
        public BasicMenuBar()
        +
        Erzeugt eine neue BasicMenuBar mit allen MenuItems. Die einzige bereitgestellte Funktion ist + die Änderung des CommaProperty in Preferences.getPrefs() zu englisch oder deutsch.
        +
      • +
      + + + +
        +
      • +

        BasicMenuBar

        +
        public BasicMenuBar​(ControllableApplication controllableApp)
        +             throws NullPointerException
        +
        Erzeugt eine neue BasicMenuBar mit allen MenuItems, die bereits mit den Basisfunktionen belegt sind.
        +
        +
        Parameters:
        +
        controllableApp - Anwendungsklasse, mit der die Basisfunktionen verknüpft werden
        +
        Throws:
        +
        NullPointerException - wenn der Parameter controllableApp null ist
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getTextFieldMap

        +
        public Map<String,​javafx.scene.control.TextField> getTextFieldMap()
        +
        Gibt eine Map mit allen Textfelder der View zurück. Jedes Textfeld ist einem eindeutigen Schlüsselwort zugeordnet, + mit dem es aus der Map herausgesucht werden kann. +

        + Jedes Schlüsselwort sollte einen Sinnvollen Bezug zum Einsatz des Textfeldes haben! +

        +
        +
        Specified by:
        +
        getTextFieldMap in interface Controllable
        +
        Returns:
        +
        Map, die alle Textfelder einer View enthält
        +
        +
      • +
      + + + +
        +
      • +

        getButtonMap

        +
        public Map<String,​javafx.scene.control.Button> getButtonMap()
        +
        Gibt eine Map mit allen Buttons der View zurück. Jeder Button ist einem eindeutigen Schlüsselwort zugeordnet, + mit dem er aus der Map herausgesucht werden kann. +

        + Jedes Schlüsselwort sollte einen Sinnvollen Bezug zum Einsatz des Buttons haben! +

        +
        +
        Specified by:
        +
        getButtonMap in interface Controllable
        +
        Returns:
        +
        Map, die alle Buttons einer View enthält
        +
        +
      • +
      + + + +
        +
      • +

        getNodeMap

        +
        public Map<String,​javafx.scene.Node> getNodeMap()
        +
        Gibt eine Map mit allen Elemente (Nodes) der View zurück, die keine Buttons oder Textfelder sind und im Controller benötigt werden. + Jedes Element ist einem eindeutigen Schlüsselwort zugeordnet, mit dem es aus der Map herausgesucht werden kann. +

        + Jedes Schlüsselwort sollte einen Sinnvollen Bezug zum Einsatz des Elements haben! +

        +
        +
        Specified by:
        +
        getNodeMap in interface Controllable
        +
        Returns:
        +
        Map, die alle Elemente einer View enthält, die keine Buttons oder Textfelder sind und im Controller benötigt werden
        +
        +
      • +
      + + + +
        +
      • +

        setChooseCommaAction

        +
        private void setChooseCommaAction​(javafx.scene.control.MenuItem chooseComma,
        +                                  Comma comma)
        +
        Setzt die Action des übergebenen MenuItems, sodass das spezifische Comma in den Einstellungen + gesetzt wird.
        +
        +
        Parameters:
        +
        chooseComma - MenuItem, das die Action erhält
        +
        comma - spezifisches Comma, das gesetzt wird
        +
        +
      • +
      + + + +
        +
      • +

        createMenuModus

        +
        private void createMenuModus()
        +
        Erstellt das Menu "Modus" mit den Elementen "Umrechner", "IEEE" und "Berechnungen"
        +
      • +
      + + + +
        +
      • +

        createMenuOptions

        +
        private void createMenuOptions()
        +
        Erstellt das Menu "Optionen" mit den Elementen "Komma wählen" und den Unterelementen + "deutsch" und "englisch"
        +
      • +
      + + + +
        +
      • +

        createMenuView

        +
        private void createMenuView()
        +
        Erstellt das Menu "Ansicht" mit den Elementen "Stil", "Auf Monitor bewegen" und "Vollbild"
        +
      • +
      + + + +
        +
      • +

        createMenuHelp

        +
        private void createMenuHelp()
        +
        Erstellt das Menu "Hilfe" mit den Elementen "Ãœber" und "Version"
        +
      • +
      + + + +
        +
      • +

        addMenu

        +
        private void addMenu​(javafx.scene.control.Menu m,
        +                     String key)
        +
        Fügt das übergebene Menu zu dieser MenuBar hinzu und speichert dieses mit dem Schlüssel + key in der Map menuItemMap
        +
        +
        Parameters:
        +
        m - Menu, das hinzugefügt und an die nächste Stelle gesetzt wird
        +
        key - Schlüsselwort, mit dem m in der Map menuItemMap abgelegt wird
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controls/ConverterMenuBar.html b/doc/0.1.4/de_private/bitchanger/gui/controls/ConverterMenuBar.html new file mode 100644 index 0000000..f52b1d1 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controls/ConverterMenuBar.html @@ -0,0 +1,485 @@ + + + + + +ConverterMenuBar + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ConverterMenuBar

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • javafx.scene.Node
    • +
    • +
        +
      • javafx.scene.Parent
      • +
      • +
          +
        • javafx.scene.layout.Region
        • +
        • + +
        • +
        +
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Controllable, javafx.css.Styleable, javafx.event.EventTarget, javafx.scene.control.Skinnable
    +
    +
    +
    public class ConverterMenuBar
    +extends BasicMenuBar
    +
  • +
+
+
+
    +
  • + +
    + +
    + +
    + +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethodDescription
      private voidaddItems() 
      + +
        +
      • + + +

        Methods inherited from class javafx.scene.control.MenuBar

        +createDefaultSkin, getClassCssMetaData, getControlCssMetaData, getInitialFocusTraversable, getMenus, isUseSystemMenuBar, setUseSystemMenuBar, useSystemMenuBarProperty
      • +
      +
        +
      • + + +

        Methods inherited from class javafx.scene.control.Control

        +computeMaxHeight, computeMaxWidth, computeMinHeight, computeMinWidth, computePrefHeight, computePrefWidth, contextMenuProperty, executeAccessibleAction, getBaselineOffset, getContextMenu, getCssMetaData, getSkin, getTooltip, isResizable, layoutChildren, queryAccessibleAttribute, setContextMenu, setSkin, setTooltip, skinProperty, tooltipProperty
      • +
      +
        +
      • + + +

        Methods inherited from class javafx.scene.layout.Region

        +backgroundProperty, borderProperty, cacheShapeProperty, centerShapeProperty, getBackground, getBorder, getHeight, getInsets, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getOpaqueInsets, getPadding, getPrefHeight, getPrefWidth, getShape, getUserAgentStylesheet, getWidth, heightProperty, insetsProperty, isCacheShape, isCenterShape, isScaleShape, isSnapToPixel, layoutInArea, layoutInArea, layoutInArea, layoutInArea, maxHeight, maxHeightProperty, maxWidth, maxWidthProperty, minHeight, minHeightProperty, minWidth, minWidthProperty, opaqueInsetsProperty, paddingProperty, positionInArea, positionInArea, prefHeight, prefHeightProperty, prefWidth, prefWidthProperty, resize, scaleShapeProperty, setBackground, setBorder, setCacheShape, setCenterShape, setHeight, setMaxHeight, setMaxSize, setMaxWidth, setMinHeight, setMinSize, setMinWidth, setOpaqueInsets, setPadding, setPrefHeight, setPrefSize, setPrefWidth, setScaleShape, setShape, setSnapToPixel, setWidth, shapeProperty, snappedBottomInset, snappedLeftInset, snappedRightInset, snappedTopInset, snapPosition, snapPositionX, snapPositionY, snapSize, snapSizeX, snapSizeY, snapSpace, snapSpaceX, snapSpaceY, snapToPixelProperty, widthProperty
      • +
      +
        +
      • + + +

        Methods inherited from class javafx.scene.Parent

        +getChildren, getChildrenUnmodifiable, getManagedChildren, getStylesheets, isNeedsLayout, layout, lookup, needsLayoutProperty, requestLayout, requestParentLayout, setNeedsLayout, updateBounds
      • +
      +
        +
      • + + +

        Methods inherited from class javafx.scene.Node

        +accessibleHelpProperty, accessibleRoleDescriptionProperty, accessibleRoleProperty, accessibleTextProperty, addEventFilter, addEventHandler, applyCss, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen, contains, contains, cursorProperty, depthTestProperty, disabledProperty, disableProperty, effectiveNodeOrientationProperty, effectProperty, eventDispatcherProperty, fireEvent, focusedProperty, focusTraversableProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getContentBias, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInitialCursor, getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY, getLocalToParentTransform, getLocalToSceneTransform, getNodeOrientation, getOnContextMenuRequested, getOnDragDetected, getOnDragDone, getOnDragDropped, getOnDragEntered, getOnDragExited, getOnDragOver, getOnInputMethodTextChanged, getOnKeyPressed, getOnKeyReleased, getOnKeyTyped, getOnMouseClicked, getOnMouseDragEntered, getOnMouseDragExited, getOnMouseDragged, getOnMouseDragOver, getOnMouseDragReleased, getOnMouseEntered, getOnMouseExited, getOnMouseMoved, getOnMousePressed, getOnMouseReleased, getOnRotate, getOnRotationFinished, getOnRotationStarted, getOnScroll, getOnScrollFinished, getOnScrollStarted, getOnSwipeDown, getOnSwipeLeft, getOnSwipeRight, getOnSwipeUp, getOnTouchMoved, getOnTouchPressed, getOnTouchReleased, getOnTouchStationary, getOnZoom, getOnZoomFinished, getOnZoomStarted, getOpacity, getParent, getProperties, getPseudoClassStates, getRotate, getRotationAxis, getScaleX, getScaleY, getScaleZ, getScene, getStyle, getStyleableParent, getStyleClass, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getTypeSelector, getUserData, getViewOrder, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, isVisible, layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent, localToParent, localToParent, localToParent, localToParent, localToParentTransformProperty, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToSceneTransformProperty, localToScreen, localToScreen, localToScreen, localToScreen, localToScreen, lookupAll, managedProperty, mouseTransparentProperty, nodeOrientationProperty, notifyAccessibleAttributeChanged, onContextMenuRequestedProperty, onDragDetectedProperty, onDragDoneProperty, onDragDroppedProperty, onDragEnteredProperty, onDragExitedProperty, onDragOverProperty, onInputMethodTextChangedProperty, onKeyPressedProperty, onKeyReleasedProperty, onKeyTypedProperty, onMouseClickedProperty, onMouseDragEnteredProperty, onMouseDragExitedProperty, onMouseDraggedProperty, onMouseDragOverProperty, onMouseDragReleasedProperty, onMouseEnteredProperty, onMouseExitedProperty, onMouseMovedProperty, onMousePressedProperty, onMouseReleasedProperty, onRotateProperty, onRotationFinishedProperty, onRotationStartedProperty, onScrollFinishedProperty, onScrollProperty, onScrollStartedProperty, onSwipeDownProperty, onSwipeLeftProperty, onSwipeRightProperty, onSwipeUpProperty, onTouchMovedProperty, onTouchPressedProperty, onTouchReleasedProperty, onTouchStationaryProperty, onZoomFinishedProperty, onZoomProperty, onZoomStartedProperty, opacityProperty, parentProperty, parentToLocal, parentToLocal, parentToLocal, parentToLocal, parentToLocal, pickOnBoundsProperty, pressedProperty, pseudoClassStateChanged, relocate, removeEventFilter, removeEventHandler, requestFocus, resizeRelocate, rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty, scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, screenToLocal, screenToLocal, screenToLocal, setAccessibleHelp, setAccessibleRole, setAccessibleRoleDescription, setAccessibleText, setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest, setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler, setFocused, setFocusTraversable, setHover, setId, setInputMethodRequests, setLayoutX, setLayoutY, setManaged, setMouseTransparent, setNodeOrientation, setOnContextMenuRequested, setOnDragDetected, setOnDragDone, setOnDragDropped, setOnDragEntered, setOnDragExited, setOnDragOver, setOnInputMethodTextChanged, setOnKeyPressed, setOnKeyReleased, setOnKeyTyped, setOnMouseClicked, setOnMouseDragEntered, setOnMouseDragExited, setOnMouseDragged, setOnMouseDragOver, setOnMouseDragReleased, setOnMouseEntered, setOnMouseExited, setOnMouseMoved, setOnMousePressed, setOnMouseReleased, setOnRotate, setOnRotationFinished, setOnRotationStarted, setOnScroll, setOnScrollFinished, setOnScrollStarted, setOnSwipeDown, setOnSwipeLeft, setOnSwipeRight, setOnSwipeUp, setOnTouchMoved, setOnTouchPressed, setOnTouchReleased, setOnTouchStationary, setOnZoom, setOnZoomFinished, setOnZoomStarted, setOpacity, setPickOnBounds, setPressed, setRotate, setRotationAxis, setScaleX, setScaleY, setScaleZ, setStyle, setTranslateX, setTranslateY, setTranslateZ, setUserData, setViewOrder, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, toString, translateXProperty, translateYProperty, translateZProperty, usesMirroring, viewOrderProperty, visibleProperty
      • +
      + +
        +
      • + + +

        Methods inherited from interface javafx.css.Styleable

        +getStyleableNode
      • +
      +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        OPTIONS_INDICATE_FRACTIONAL_INACCURACY_CHECK_ITEM_KEY

        +
        public static final String OPTIONS_INDICATE_FRACTIONAL_INACCURACY_CHECK_ITEM_KEY
        +
        Schlüsselwort, mit dem das CheckMenuItem "abgeschnittene Nachkommastellen kennzeichnen" in der Map BasicMenuBar.menuItemMap abgelegt ist
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      +
    • +
    +
    + +
    + +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        addItems

        +
        private void addItems()
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controls/FXUtils.html b/doc/0.1.4/de_private/bitchanger/gui/controls/FXUtils.html new file mode 100644 index 0000000..cd7211e --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controls/FXUtils.html @@ -0,0 +1,454 @@ + + + + + +FXUtils + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class FXUtils

+
+
+ +
+
    +
  • +
    +
    public class FXUtils
    +extends Object
    +
    Utility-Klasse zur allgemeinen Verarbeitung von Objekten, die zur Oberfläche gehören.
    +
    +
    Since:
    +
    Bitchanger 0.1.4
    +
    Version:
    +
    0.1.4
    +
    Author:
    +
    Tim Mühle
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + +
      Constructors 
      ModifierConstructorDescription
      private FXUtils() +
      Diese Klasse ist nicht instanziierbar
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Concrete Methods 
      Modifier and TypeMethodDescription
      static <T extends javafx.scene.Node>
      void
      setGridConstraints​(int firstColumn, + int firstRow, + int columnCount, + int columnOffset, + Queue<T> controls) +
      Setzt die Constrains der Nodes in einer Schlange, um diese in einer GridPane zu positionieren.
      +
      static <T extends javafx.scene.Node>
      void
      setGridConstraints​(int firstColumn, + int firstRow, + int columnCount, + int columnOffset, + Queue<T> controls, + TriConsumer<javafx.scene.Node,​Integer,​Integer> consumer) +
      Arbeitet Nodes in einer Schlange als Tabelle ab.
      +
      static voidsetMaxSizes​(Iterable<javafx.scene.Node> nodes, + double maxSize) +
      Setzt die maximale Größe aller Controls in einem Iterable auf den Wert maxSize.
      +
      static voidsetMaxSizes​(Iterable<javafx.scene.Node> nodes, + double maxWidth, + double maxHeight) +
      Setzt die maximale Breite aller Controls in einem Iterable auf den Wert maxWidth und + die maximale Höhe auf den Wert maxHeight.
      +
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        FXUtils

        +
        private FXUtils()
        +
        Diese Klasse ist nicht instanziierbar
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        setGridConstraints

        +
        public static <T extends javafx.scene.Node> void setGridConstraints​(int firstColumn,
        +                                                                    int firstRow,
        +                                                                    int columnCount,
        +                                                                    int columnOffset,
        +                                                                    Queue<T> controls)
        +
        Setzt die Constrains der Nodes in einer Schlange, um diese in einer GridPane zu positionieren. +

        + Die erste Node wird an die Position gesetzt, die über die Parameter und firstColumn, + firstRow und columnOffset definiert ist. Die Matrix wird auf die Anzahl von + Spalten verteilt, die mit columnCount festgelegt ist und die Zeile automatisch umgebrochen. + Die Constraints werden solange gesetzt, wie es Elemente in der Queue gibt. +

        +

        + Die Nodes dürfen auch mehr als eine Spalte in der GridPane einnehmen. Die Spalte der darauffolgenden + Node wird entsprechend inkrementiert, um keine Elemente zu überlagern. +

        +
        +
        Type Parameters:
        +
        T - Der Typ, den die Elemente in der Schlange zur Laufzeit haben
        +
        Parameters:
        +
        firstColumn - Erste Spalte der resultierenden Tabelle
        +
        firstRow - Erste Zeile der resultierenden Tabelle
        +
        columnCount - Anzahl der Spalten in der Tabelle
        +
        columnOffset - Verschiebung der ersten Spalte (wird nur in der ersten Zeile angewendet)
        +
        controls - Elemente in der Tabelle, mit der Reihenfolge von oben links nach unten rechts (Spalten werden vor den Zeilen inkrementiert)
        +
        See Also:
        +
        setGridConstraints(int, int, int, int, Queue, TriConsumer)
        +
        +
      • +
      + + + +
        +
      • +

        setGridConstraints

        +
        public static <T extends javafx.scene.Node> void setGridConstraints​(int firstColumn,
        +                                                                    int firstRow,
        +                                                                    int columnCount,
        +                                                                    int columnOffset,
        +                                                                    Queue<T> controls,
        +                                                                    TriConsumer<javafx.scene.Node,​Integer,​Integer> consumer)
        +
        Arbeitet Nodes in einer Schlange als Tabelle ab. +

        + Für jede Node in der Schlange wir die Spalte inkrementiert. Wird die maximale Spaltenanzahl überschritten, + wird die Zeile inkrementiert und die Spalte auf den Startwert gesetzt. Die Node wird mit den Werten der Zeile + und Spalte an den TriConsumer übergeben, um diese Daten zu verarbeiten. +

        +

        + Die Nodes dürfen auch mehr als eine Spalte in der GridPane einnehmen. Die Spalte der darauffolgenden + Node wird entsprechend inkrementiert, um keine Elemente zu überlagern. +

        +
        +
        Type Parameters:
        +
        T - Der Typ, den die Elemente in der Schlange zur Laufzeit haben
        +
        Parameters:
        +
        firstColumn - Erste Spalte der resultierenden Tabelle
        +
        firstRow - Erste Zeile der resultierenden Tabelle
        +
        columnCount - Anzahl der Spalten in der Tabelle
        +
        columnOffset - Verschiebung der ersten Spalte (wird nur in der ersten Zeile angewendet)
        +
        controls - Elemente in der Tabelle, mit der Reihenfolge von oben links nach unten rechts (Spalten werden vor den Zeilen inkrementiert)
        +
        consumer - TriConsumer, der die Daten verarbeitet
        +
        +
      • +
      + + + +
        +
      • +

        setMaxSizes

        +
        public static void setMaxSizes​(Iterable<javafx.scene.Node> nodes,
        +                               double maxSize)
        +
        Setzt die maximale Größe aller Controls in einem Iterable auf den Wert maxSize.
        +
        +
        Parameters:
        +
        nodes - Sammlung aller anzupassenden Controls, die auch in Layout-Containern liegen dürfen
        +
        maxSize - Maximale Größe der Controls
        +
        +
      • +
      + + + +
        +
      • +

        setMaxSizes

        +
        public static void setMaxSizes​(Iterable<javafx.scene.Node> nodes,
        +                               double maxWidth,
        +                               double maxHeight)
        +
        Setzt die maximale Breite aller Controls in einem Iterable auf den Wert maxWidth und + die maximale Höhe auf den Wert maxHeight.
        +
        +
        Parameters:
        +
        nodes - Sammlung aller anzupassenden Controls, die auch in Layout-Containern liegen dürfen
        +
        maxWidth - maximale Breite aller Controls
        +
        maxHeight - maximale Höhe aller Controls
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controls/InformationDialog.InformationType.html b/doc/0.1.4/de_private/bitchanger/gui/controls/InformationDialog.InformationType.html new file mode 100644 index 0000000..18c089e --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controls/InformationDialog.InformationType.html @@ -0,0 +1,438 @@ + + + + + +InformationDialog.InformationType + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Enum InformationDialog.InformationType

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    + +
    + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        InformationType

        +
        private InformationType()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        values

        +
        public static InformationDialog.InformationType[] values()
        +
        Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
        +for (InformationDialog.InformationType c : InformationDialog.InformationType.values())
        +    System.out.println(c);
        +
        +
        +
        Returns:
        +
        an array containing the constants of this enum type, in the order they are declared
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static InformationDialog.InformationType valueOf​(String name)
        +
        Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
        +
        +
        Parameters:
        +
        name - the name of the enum constant to be returned.
        +
        Returns:
        +
        the enum constant with the specified name
        +
        Throws:
        +
        IllegalArgumentException - if this enum type has no constant with the specified name
        +
        NullPointerException - if the argument is null
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controls/InformationDialog.html b/doc/0.1.4/de_private/bitchanger/gui/controls/InformationDialog.html new file mode 100644 index 0000000..78d636a --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controls/InformationDialog.html @@ -0,0 +1,392 @@ + + + + + +InformationDialog + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class InformationDialog

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • javafx.scene.control.Dialog<javafx.scene.control.ButtonType>
    • +
    • +
        +
      • javafx.scene.control.Alert
      • +
      • +
          +
        • bitchanger.gui.controls.InformationDialog
        • +
        +
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    javafx.event.EventTarget
    +
    +
    +
    public class InformationDialog
    +extends javafx.scene.control.Alert
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Nested Class Summary

      + + + + + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      static class InformationDialog.InformationType 
      +
        +
      • + + +

        Nested classes/interfaces inherited from class javafx.scene.control.Alert

        +javafx.scene.control.Alert.AlertType
      • +
      +
    • +
    +
    + +
    + +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethodDescription
      private voidcreateAboutDialog() 
      private voidcreateVersionDialog() 
      +
        +
      • + + +

        Methods inherited from class javafx.scene.control.Alert

        +alertTypeProperty, getAlertType, getButtonTypes, setAlertType
      • +
      +
        +
      • + + +

        Methods inherited from class javafx.scene.control.Dialog

        +buildEventDispatchChain, close, contentTextProperty, dialogPaneProperty, getContentText, getDialogPane, getGraphic, getHeaderText, getHeight, getModality, getOnCloseRequest, getOnHidden, getOnHiding, getOnShowing, getOnShown, getOwner, getResult, getResultConverter, getTitle, getWidth, getX, getY, graphicProperty, headerTextProperty, heightProperty, hide, initModality, initOwner, initStyle, isResizable, isShowing, onCloseRequestProperty, onHiddenProperty, onHidingProperty, onShowingProperty, onShownProperty, resizableProperty, resultConverterProperty, resultProperty, setContentText, setDialogPane, setGraphic, setHeaderText, setHeight, setOnCloseRequest, setOnHidden, setOnHiding, setOnShowing, setOnShown, setResizable, setResult, setResultConverter, setTitle, setWidth, setX, setY, show, showAndWait, showingProperty, titleProperty, widthProperty, xProperty, yProperty
      • +
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    + +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        createAboutDialog

        +
        private void createAboutDialog()
        +
      • +
      + + + +
        +
      • +

        createVersionDialog

        +
        private void createVersionDialog()
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controls/SVGIcon.html b/doc/0.1.4/de_private/bitchanger/gui/controls/SVGIcon.html new file mode 100644 index 0000000..992a174 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controls/SVGIcon.html @@ -0,0 +1,443 @@ + + + + + +SVGIcon + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class SVGIcon

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • javafx.scene.Node
    • +
    • +
        +
      • javafx.scene.shape.Shape
      • +
      • +
          +
        • javafx.scene.shape.SVGPath
        • +
        • +
            +
          • bitchanger.gui.controls.SVGIcon
          • +
          +
        • +
        +
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    javafx.css.Styleable, javafx.event.EventTarget
    +
    +
    +
    public class SVGIcon
    +extends javafx.scene.shape.SVGPath
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      private booleanhasPath 
      +
        +
      • + + +

        Fields inherited from class javafx.scene.Node

        +BASELINE_OFFSET_SAME_AS_HEIGHT
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      SVGIcon() 
      SVGIcon​(File svgFile) 
      SVGIcon​(javafx.scene.shape.SVGPath svgPath) 
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethodDescription
      booleanhasPath() 
      voidsetSVG​(javafx.scene.shape.SVGPath svgPath) 
      +
        +
      • + + +

        Methods inherited from class javafx.scene.shape.SVGPath

        +contentProperty, fillRuleProperty, getContent, getFillRule, setContent, setFillRule, toString
      • +
      +
        +
      • + + +

        Methods inherited from class javafx.scene.shape.Shape

        +fillProperty, getClassCssMetaData, getCssMetaData, getFill, getStroke, getStrokeDashArray, getStrokeDashOffset, getStrokeLineCap, getStrokeLineJoin, getStrokeMiterLimit, getStrokeType, getStrokeWidth, intersect, isSmooth, setFill, setSmooth, setStroke, setStrokeDashOffset, setStrokeLineCap, setStrokeLineJoin, setStrokeMiterLimit, setStrokeType, setStrokeWidth, smoothProperty, strokeDashOffsetProperty, strokeLineCapProperty, strokeLineJoinProperty, strokeMiterLimitProperty, strokeProperty, strokeTypeProperty, strokeWidthProperty, subtract, union
      • +
      +
        +
      • + + +

        Methods inherited from class javafx.scene.Node

        +accessibleHelpProperty, accessibleRoleDescriptionProperty, accessibleRoleProperty, accessibleTextProperty, addEventFilter, addEventHandler, applyCss, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen, contains, contains, cursorProperty, depthTestProperty, disabledProperty, disableProperty, effectiveNodeOrientationProperty, effectProperty, eventDispatcherProperty, executeAccessibleAction, fireEvent, focusedProperty, focusTraversableProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBaselineOffset, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getContentBias, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInitialCursor, getInitialFocusTraversable, getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY, getLocalToParentTransform, getLocalToSceneTransform, getNodeOrientation, getOnContextMenuRequested, getOnDragDetected, getOnDragDone, getOnDragDropped, getOnDragEntered, getOnDragExited, getOnDragOver, getOnInputMethodTextChanged, getOnKeyPressed, getOnKeyReleased, getOnKeyTyped, getOnMouseClicked, getOnMouseDragEntered, getOnMouseDragExited, getOnMouseDragged, getOnMouseDragOver, getOnMouseDragReleased, getOnMouseEntered, getOnMouseExited, getOnMouseMoved, getOnMousePressed, getOnMouseReleased, getOnRotate, getOnRotationFinished, getOnRotationStarted, getOnScroll, getOnScrollFinished, getOnScrollStarted, getOnSwipeDown, getOnSwipeLeft, getOnSwipeRight, getOnSwipeUp, getOnTouchMoved, getOnTouchPressed, getOnTouchReleased, getOnTouchStationary, getOnZoom, getOnZoomFinished, getOnZoomStarted, getOpacity, getParent, getProperties, getPseudoClassStates, getRotate, getRotationAxis, getScaleX, getScaleY, getScaleZ, getScene, getStyle, getStyleableParent, getStyleClass, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getTypeSelector, getUserData, getViewOrder, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, isResizable, isVisible, layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent, localToParent, localToParent, localToParent, localToParent, localToParentTransformProperty, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToSceneTransformProperty, localToScreen, localToScreen, localToScreen, localToScreen, localToScreen, lookup, lookupAll, managedProperty, maxHeight, maxWidth, minHeight, minWidth, mouseTransparentProperty, nodeOrientationProperty, notifyAccessibleAttributeChanged, onContextMenuRequestedProperty, onDragDetectedProperty, onDragDoneProperty, onDragDroppedProperty, onDragEnteredProperty, onDragExitedProperty, onDragOverProperty, onInputMethodTextChangedProperty, onKeyPressedProperty, onKeyReleasedProperty, onKeyTypedProperty, onMouseClickedProperty, onMouseDragEnteredProperty, onMouseDragExitedProperty, onMouseDraggedProperty, onMouseDragOverProperty, onMouseDragReleasedProperty, onMouseEnteredProperty, onMouseExitedProperty, onMouseMovedProperty, onMousePressedProperty, onMouseReleasedProperty, onRotateProperty, onRotationFinishedProperty, onRotationStartedProperty, onScrollFinishedProperty, onScrollProperty, onScrollStartedProperty, onSwipeDownProperty, onSwipeLeftProperty, onSwipeRightProperty, onSwipeUpProperty, onTouchMovedProperty, onTouchPressedProperty, onTouchReleasedProperty, onTouchStationaryProperty, onZoomFinishedProperty, onZoomProperty, onZoomStartedProperty, opacityProperty, parentProperty, parentToLocal, parentToLocal, parentToLocal, parentToLocal, parentToLocal, pickOnBoundsProperty, prefHeight, prefWidth, pressedProperty, pseudoClassStateChanged, queryAccessibleAttribute, relocate, removeEventFilter, removeEventHandler, requestFocus, resize, resizeRelocate, rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty, scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, screenToLocal, screenToLocal, screenToLocal, setAccessibleHelp, setAccessibleRole, setAccessibleRoleDescription, setAccessibleText, setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest, setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler, setFocused, setFocusTraversable, setHover, setId, setInputMethodRequests, setLayoutX, setLayoutY, setManaged, setMouseTransparent, setNodeOrientation, setOnContextMenuRequested, setOnDragDetected, setOnDragDone, setOnDragDropped, setOnDragEntered, setOnDragExited, setOnDragOver, setOnInputMethodTextChanged, setOnKeyPressed, setOnKeyReleased, setOnKeyTyped, setOnMouseClicked, setOnMouseDragEntered, setOnMouseDragExited, setOnMouseDragged, setOnMouseDragOver, setOnMouseDragReleased, setOnMouseEntered, setOnMouseExited, setOnMouseMoved, setOnMousePressed, setOnMouseReleased, setOnRotate, setOnRotationFinished, setOnRotationStarted, setOnScroll, setOnScrollFinished, setOnScrollStarted, setOnSwipeDown, setOnSwipeLeft, setOnSwipeRight, setOnSwipeUp, setOnTouchMoved, setOnTouchPressed, setOnTouchReleased, setOnTouchStationary, setOnZoom, setOnZoomFinished, setOnZoomStarted, setOpacity, setPickOnBounds, setPressed, setRotate, setRotationAxis, setScaleX, setScaleY, setScaleZ, setStyle, setTranslateX, setTranslateY, setTranslateZ, setUserData, setViewOrder, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, translateXProperty, translateYProperty, translateZProperty, usesMirroring, viewOrderProperty, visibleProperty
      • +
      + +
        +
      • + + +

        Methods inherited from interface javafx.css.Styleable

        +getStyleableNode
      • +
      +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        hasPath

        +
        private boolean hasPath
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        SVGIcon

        +
        public SVGIcon()
        +
      • +
      + + + +
        +
      • +

        SVGIcon

        +
        public SVGIcon​(File svgFile)
        +
      • +
      + + + +
        +
      • +

        SVGIcon

        +
        public SVGIcon​(javafx.scene.shape.SVGPath svgPath)
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        setSVG

        +
        public void setSVG​(javafx.scene.shape.SVGPath svgPath)
        +
      • +
      + + + +
        +
      • +

        hasPath

        +
        public boolean hasPath()
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controls/TriConsumer.html b/doc/0.1.4/de_private/bitchanger/gui/controls/TriConsumer.html new file mode 100644 index 0000000..224806a --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controls/TriConsumer.html @@ -0,0 +1,282 @@ + + + + + +TriConsumer + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface TriConsumer<T,​U,​V>

+
+
+
+
    +
  • +
    +
    Type Parameters:
    +
    T - Typ des ersten Ãœbergabeparameters
    +
    U - Typ des zweiten Ãœbergabeparameters
    +
    V - Typ des dritten Ãœbergabeparameters
    +
    +
    +
    Functional Interface:
    +
    This is a functional interface and can therefore be used as the assignment target for a lambda expression or method reference.
    +
    +
    +
    @FunctionalInterface
    +public interface TriConsumer<T,​U,​V>
    +
    Repräsentiert eine Operation, die drei Übergabeparameter akzeptiert und keine Rückgabe hat.
    +
    +
    Author:
    +
    Tim Mühle
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + +
      All Methods Instance Methods Abstract Methods 
      Modifier and TypeMethodDescription
      voidaccept​(T t, + U u, + V v) +
      Führt diese Operation mit den übergebenen Argumenten aus.
      +
      +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + + + +
        +
      • +

        accept

        +
        void accept​(T t,
        +            U u,
        +            V v)
        +
        Führt diese Operation mit den übergebenen Argumenten aus.
        +
        +
        Parameters:
        +
        t - erster Ãœbergabeparameter
        +
        u - zweiter Ãœbergabeparameter
        +
        v - dritter Ãœbergabeparameter
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controls/UnfocusedButton.html b/doc/0.1.4/de_private/bitchanger/gui/controls/UnfocusedButton.html new file mode 100644 index 0000000..50da958 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controls/UnfocusedButton.html @@ -0,0 +1,611 @@ + + + + + +UnfocusedButton + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class UnfocusedButton

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • javafx.scene.Node
    • +
    • +
        +
      • javafx.scene.Parent
      • +
      • +
          +
        • javafx.scene.layout.Region
        • +
        • +
            +
          • javafx.scene.control.Control
          • +
          • +
              +
            • javafx.scene.control.Labeled
            • +
            • +
                +
              • javafx.scene.control.ButtonBase
              • +
              • +
                  +
                • javafx.scene.control.Button
                • +
                • +
                    +
                  • bitchanger.gui.controls.UnfocusedButton
                  • +
                  +
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    javafx.css.Styleable, javafx.event.EventTarget, javafx.scene.control.Skinnable
    +
    +
    +
    Direct Known Subclasses:
    +
    ValueButton
    +
    +
    +
    public class UnfocusedButton
    +extends javafx.scene.control.Button
    +
    Button, der beim Klick nicht den Fokus erhält und als Grundform ein Rechteck ohne abgerundete Ecken besitzt.
    +
    +
    Since:
    +
    Bitchanger 0.1.0
    +
    Version:
    +
    0.1.4
    +
    Author:
    +
    Tim Mühle
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      static doubleDEFAULT_GRAPHIC_SCALE_FACTOR 
      private javafx.beans.property.DoublePropertygraphicScaleFactorProperty 
      private javafx.beans.property.DoublePropertygraphicScaleProperty 
      +
        +
      • + + +

        Fields inherited from class javafx.scene.layout.Region

        +USE_COMPUTED_SIZE, USE_PREF_SIZE
      • +
      +
        +
      • + + +

        Fields inherited from class javafx.scene.Node

        +BASELINE_OFFSET_SAME_AS_HEIGHT
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      UnfocusedButton() +
      Erstellt einen UnfocusedButton mit einem leeren String als Beschriftung
      +
      UnfocusedButton​(String text) +
      Erstellt einen UnfocusedButton mit einem spezifischen String als Beschriftung
      +
      UnfocusedButton​(String text, + javafx.scene.Node graphic) +
      Erstellt einen UnfocusedButton mit einem spezifischen String und einem Icon als Beschriftung
      +
      UnfocusedButton​(javafx.scene.Node graphic) 
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethodDescription
      private voidbindScaleProperty​(javafx.beans.value.ObservableValue<? extends Number> observable, + Number oldValue, + Number newValue) 
      private voidinitShape() +
      Schaltet den Fokus für diesen Button aus und setzt als Grundform dieses Buttons ein Rechteck ohne abgerundete Ecken ein.
      +
      private voidobserveGraphicScaling() 
      voidsetGraphicScaleFactor​(Double factor) 
      +
        +
      • + + +

        Methods inherited from class javafx.scene.control.Button

        +cancelButtonProperty, createDefaultSkin, defaultButtonProperty, fire, isCancelButton, isDefaultButton, setCancelButton, setDefaultButton
      • +
      +
        +
      • + + +

        Methods inherited from class javafx.scene.control.ButtonBase

        +arm, armedProperty, disarm, executeAccessibleAction, getOnAction, isArmed, onActionProperty, setOnAction
      • +
      +
        +
      • + + +

        Methods inherited from class javafx.scene.control.Labeled

        +alignmentProperty, contentDisplayProperty, ellipsisStringProperty, fontProperty, getAlignment, getClassCssMetaData, getContentBias, getContentDisplay, getControlCssMetaData, getEllipsisString, getFont, getGraphic, getGraphicTextGap, getInitialAlignment, getLabelPadding, getLineSpacing, getText, getTextAlignment, getTextFill, getTextOverrun, graphicProperty, graphicTextGapProperty, isMnemonicParsing, isUnderline, isWrapText, labelPaddingProperty, lineSpacingProperty, mnemonicParsingProperty, setAlignment, setContentDisplay, setEllipsisString, setFont, setGraphic, setGraphicTextGap, setLineSpacing, setMnemonicParsing, setText, setTextAlignment, setTextFill, setTextOverrun, setUnderline, setWrapText, textAlignmentProperty, textFillProperty, textOverrunProperty, textProperty, toString, underlineProperty, wrapTextProperty
      • +
      +
        +
      • + + +

        Methods inherited from class javafx.scene.control.Control

        +computeMaxHeight, computeMaxWidth, computeMinHeight, computeMinWidth, computePrefHeight, computePrefWidth, contextMenuProperty, getBaselineOffset, getContextMenu, getCssMetaData, getInitialFocusTraversable, getSkin, getTooltip, isResizable, layoutChildren, queryAccessibleAttribute, setContextMenu, setSkin, setTooltip, skinProperty, tooltipProperty
      • +
      +
        +
      • + + +

        Methods inherited from class javafx.scene.layout.Region

        +backgroundProperty, borderProperty, cacheShapeProperty, centerShapeProperty, getBackground, getBorder, getHeight, getInsets, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getOpaqueInsets, getPadding, getPrefHeight, getPrefWidth, getShape, getUserAgentStylesheet, getWidth, heightProperty, insetsProperty, isCacheShape, isCenterShape, isScaleShape, isSnapToPixel, layoutInArea, layoutInArea, layoutInArea, layoutInArea, maxHeight, maxHeightProperty, maxWidth, maxWidthProperty, minHeight, minHeightProperty, minWidth, minWidthProperty, opaqueInsetsProperty, paddingProperty, positionInArea, positionInArea, prefHeight, prefHeightProperty, prefWidth, prefWidthProperty, resize, scaleShapeProperty, setBackground, setBorder, setCacheShape, setCenterShape, setHeight, setMaxHeight, setMaxSize, setMaxWidth, setMinHeight, setMinSize, setMinWidth, setOpaqueInsets, setPadding, setPrefHeight, setPrefSize, setPrefWidth, setScaleShape, setShape, setSnapToPixel, setWidth, shapeProperty, snappedBottomInset, snappedLeftInset, snappedRightInset, snappedTopInset, snapPosition, snapPositionX, snapPositionY, snapSize, snapSizeX, snapSizeY, snapSpace, snapSpaceX, snapSpaceY, snapToPixelProperty, widthProperty
      • +
      +
        +
      • + + +

        Methods inherited from class javafx.scene.Parent

        +getChildren, getChildrenUnmodifiable, getManagedChildren, getStylesheets, isNeedsLayout, layout, lookup, needsLayoutProperty, requestLayout, requestParentLayout, setNeedsLayout, updateBounds
      • +
      +
        +
      • + + +

        Methods inherited from class javafx.scene.Node

        +accessibleHelpProperty, accessibleRoleDescriptionProperty, accessibleRoleProperty, accessibleTextProperty, addEventFilter, addEventHandler, applyCss, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen, contains, contains, cursorProperty, depthTestProperty, disabledProperty, disableProperty, effectiveNodeOrientationProperty, effectProperty, eventDispatcherProperty, fireEvent, focusedProperty, focusTraversableProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInitialCursor, getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY, getLocalToParentTransform, getLocalToSceneTransform, getNodeOrientation, getOnContextMenuRequested, getOnDragDetected, getOnDragDone, getOnDragDropped, getOnDragEntered, getOnDragExited, getOnDragOver, getOnInputMethodTextChanged, getOnKeyPressed, getOnKeyReleased, getOnKeyTyped, getOnMouseClicked, getOnMouseDragEntered, getOnMouseDragExited, getOnMouseDragged, getOnMouseDragOver, getOnMouseDragReleased, getOnMouseEntered, getOnMouseExited, getOnMouseMoved, getOnMousePressed, getOnMouseReleased, getOnRotate, getOnRotationFinished, getOnRotationStarted, getOnScroll, getOnScrollFinished, getOnScrollStarted, getOnSwipeDown, getOnSwipeLeft, getOnSwipeRight, getOnSwipeUp, getOnTouchMoved, getOnTouchPressed, getOnTouchReleased, getOnTouchStationary, getOnZoom, getOnZoomFinished, getOnZoomStarted, getOpacity, getParent, getProperties, getPseudoClassStates, getRotate, getRotationAxis, getScaleX, getScaleY, getScaleZ, getScene, getStyle, getStyleableParent, getStyleClass, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getTypeSelector, getUserData, getViewOrder, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, isVisible, layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent, localToParent, localToParent, localToParent, localToParent, localToParentTransformProperty, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToSceneTransformProperty, localToScreen, localToScreen, localToScreen, localToScreen, localToScreen, lookupAll, managedProperty, mouseTransparentProperty, nodeOrientationProperty, notifyAccessibleAttributeChanged, onContextMenuRequestedProperty, onDragDetectedProperty, onDragDoneProperty, onDragDroppedProperty, onDragEnteredProperty, onDragExitedProperty, onDragOverProperty, onInputMethodTextChangedProperty, onKeyPressedProperty, onKeyReleasedProperty, onKeyTypedProperty, onMouseClickedProperty, onMouseDragEnteredProperty, onMouseDragExitedProperty, onMouseDraggedProperty, onMouseDragOverProperty, onMouseDragReleasedProperty, onMouseEnteredProperty, onMouseExitedProperty, onMouseMovedProperty, onMousePressedProperty, onMouseReleasedProperty, onRotateProperty, onRotationFinishedProperty, onRotationStartedProperty, onScrollFinishedProperty, onScrollProperty, onScrollStartedProperty, onSwipeDownProperty, onSwipeLeftProperty, onSwipeRightProperty, onSwipeUpProperty, onTouchMovedProperty, onTouchPressedProperty, onTouchReleasedProperty, onTouchStationaryProperty, onZoomFinishedProperty, onZoomProperty, onZoomStartedProperty, opacityProperty, parentProperty, parentToLocal, parentToLocal, parentToLocal, parentToLocal, parentToLocal, pickOnBoundsProperty, pressedProperty, pseudoClassStateChanged, relocate, removeEventFilter, removeEventHandler, requestFocus, resizeRelocate, rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty, scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, screenToLocal, screenToLocal, screenToLocal, setAccessibleHelp, setAccessibleRole, setAccessibleRoleDescription, setAccessibleText, setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest, setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler, setFocused, setFocusTraversable, setHover, setId, setInputMethodRequests, setLayoutX, setLayoutY, setManaged, setMouseTransparent, setNodeOrientation, setOnContextMenuRequested, setOnDragDetected, setOnDragDone, setOnDragDropped, setOnDragEntered, setOnDragExited, setOnDragOver, setOnInputMethodTextChanged, setOnKeyPressed, setOnKeyReleased, setOnKeyTyped, setOnMouseClicked, setOnMouseDragEntered, setOnMouseDragExited, setOnMouseDragged, setOnMouseDragOver, setOnMouseDragReleased, setOnMouseEntered, setOnMouseExited, setOnMouseMoved, setOnMousePressed, setOnMouseReleased, setOnRotate, setOnRotationFinished, setOnRotationStarted, setOnScroll, setOnScrollFinished, setOnScrollStarted, setOnSwipeDown, setOnSwipeLeft, setOnSwipeRight, setOnSwipeUp, setOnTouchMoved, setOnTouchPressed, setOnTouchReleased, setOnTouchStationary, setOnZoom, setOnZoomFinished, setOnZoomStarted, setOpacity, setPickOnBounds, setPressed, setRotate, setRotationAxis, setScaleX, setScaleY, setScaleZ, setStyle, setTranslateX, setTranslateY, setTranslateZ, setUserData, setViewOrder, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, translateXProperty, translateYProperty, translateZProperty, usesMirroring, viewOrderProperty, visibleProperty
      • +
      + +
        +
      • + + +

        Methods inherited from interface javafx.css.Styleable

        +getStyleableNode
      • +
      +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        DEFAULT_GRAPHIC_SCALE_FACTOR

        +
        public static final double DEFAULT_GRAPHIC_SCALE_FACTOR
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        graphicScaleProperty

        +
        private final javafx.beans.property.DoubleProperty graphicScaleProperty
        +
      • +
      + + + +
        +
      • +

        graphicScaleFactorProperty

        +
        private final javafx.beans.property.DoubleProperty graphicScaleFactorProperty
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        UnfocusedButton

        +
        public UnfocusedButton()
        +
        Erstellt einen UnfocusedButton mit einem leeren String als Beschriftung
        +
      • +
      + + + +
        +
      • +

        UnfocusedButton

        +
        public UnfocusedButton​(javafx.scene.Node graphic)
        +
      • +
      + + + +
        +
      • +

        UnfocusedButton

        +
        public UnfocusedButton​(String text,
        +                       javafx.scene.Node graphic)
        +
        Erstellt einen UnfocusedButton mit einem spezifischen String und einem Icon als Beschriftung
        +
        +
        Parameters:
        +
        text - Text für die Beschriftung dieses Buttons
        +
        graphic - Icon für die Beschriftung dieses Buttons
        +
        +
      • +
      + + + +
        +
      • +

        UnfocusedButton

        +
        public UnfocusedButton​(String text)
        +
        Erstellt einen UnfocusedButton mit einem spezifischen String als Beschriftung
        +
        +
        Parameters:
        +
        text - Text für die Beschriftung dieses Buttons
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        initShape

        +
        private void initShape()
        +
        Schaltet den Fokus für diesen Button aus und setzt als Grundform dieses Buttons ein Rechteck ohne abgerundete Ecken ein.
        +
      • +
      + + + +
        +
      • +

        observeGraphicScaling

        +
        private void observeGraphicScaling()
        +
      • +
      + + + +
        +
      • +

        bindScaleProperty

        +
        private void bindScaleProperty​(javafx.beans.value.ObservableValue<? extends Number> observable,
        +                               Number oldValue,
        +                               Number newValue)
        +
      • +
      + + + +
        +
      • +

        setGraphicScaleFactor

        +
        public void setGraphicScaleFactor​(Double factor)
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controls/ValueButton.html b/doc/0.1.4/de_private/bitchanger/gui/controls/ValueButton.html new file mode 100644 index 0000000..1685ce0 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controls/ValueButton.html @@ -0,0 +1,628 @@ + + + + + +ValueButton + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ValueButton

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • javafx.scene.Node
    • +
    • +
        +
      • javafx.scene.Parent
      • +
      • +
          +
        • javafx.scene.layout.Region
        • +
        • +
            +
          • javafx.scene.control.Control
          • +
          • +
              +
            • javafx.scene.control.Labeled
            • +
            • + +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    javafx.css.Styleable, javafx.event.EventTarget, javafx.scene.control.Skinnable
    +
    +
    +
    public class ValueButton
    +extends UnfocusedButton
    +
    UnfocusedButton mit einer zusätzlichen Property für die Einstellung einer Basis. + Wenn der Wert, den dieser Button repräsentiert, nicht zu der eingestellten Basis passt, + deaktiviert sich dieser Button selbst. Ändert sich die Basis wieder so, dass der Wert + wieder gültig ist, wird dieser Button automatisch aktiviert.
    +
    +
    Since:
    +
    Bitchanger 0.1.0
    +
    Version:
    +
    0.1.4
    +
    Author:
    +
    Tim Mühle
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      private javafx.beans.property.IntegerPropertybaseProperty +
      Property, über das die Basis des aktuellen Zahlensystems eingestellt wird
      +
      + +
        +
      • + + +

        Fields inherited from class javafx.scene.layout.Region

        +USE_COMPUTED_SIZE, USE_PREF_SIZE
      • +
      +
        +
      • + + +

        Fields inherited from class javafx.scene.Node

        +BASELINE_OFFSET_SAME_AS_HEIGHT
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      ValueButton() +
      Erstellt einen ValueButton mit einem leeren String als Beschriftung
      +
      ValueButton​(String text) +
      Erstellt einen ValueButton mit einem spezifischen String als Beschriftung
      +
      ValueButton​(String text, + javafx.scene.Node graphic) +
      Erstellt einen ValueButton mit einem spezifischen String und einem Icon als Beschriftung
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethodDescription
      javafx.beans.property.IntegerPropertygetBaseProperty() +
      Gibt den Wert der baseProperty zurück
      +
      private voidinit() +
      Setzt Listener zum Aktivieren und Deaktivieren dieses Buttons + durch die eingestellte Basis
      +
      voidsetBase​(int base) +
      Setzt den Wert für die Basis
      +
      private voidsetBaseListener() +
      Überprüft die baseProperty und aktiviert bzw. deaktiviert diesen Button, wenn der Text + zum neuen Wert der baseProperty passt bzw. nicht passt
      +
      private voidsetTextListener() +
      Überprüft die textProperty und aktiviert bzw. deaktiviert diesen Button, wenn der neue Text + zur baseProperty passt bzw. nicht passt
      +
      + +
        +
      • + + +

        Methods inherited from class javafx.scene.control.Button

        +cancelButtonProperty, createDefaultSkin, defaultButtonProperty, fire, isCancelButton, isDefaultButton, setCancelButton, setDefaultButton
      • +
      +
        +
      • + + +

        Methods inherited from class javafx.scene.control.ButtonBase

        +arm, armedProperty, disarm, executeAccessibleAction, getOnAction, isArmed, onActionProperty, setOnAction
      • +
      +
        +
      • + + +

        Methods inherited from class javafx.scene.control.Labeled

        +alignmentProperty, contentDisplayProperty, ellipsisStringProperty, fontProperty, getAlignment, getClassCssMetaData, getContentBias, getContentDisplay, getControlCssMetaData, getEllipsisString, getFont, getGraphic, getGraphicTextGap, getInitialAlignment, getLabelPadding, getLineSpacing, getText, getTextAlignment, getTextFill, getTextOverrun, graphicProperty, graphicTextGapProperty, isMnemonicParsing, isUnderline, isWrapText, labelPaddingProperty, lineSpacingProperty, mnemonicParsingProperty, setAlignment, setContentDisplay, setEllipsisString, setFont, setGraphic, setGraphicTextGap, setLineSpacing, setMnemonicParsing, setText, setTextAlignment, setTextFill, setTextOverrun, setUnderline, setWrapText, textAlignmentProperty, textFillProperty, textOverrunProperty, textProperty, toString, underlineProperty, wrapTextProperty
      • +
      +
        +
      • + + +

        Methods inherited from class javafx.scene.control.Control

        +computeMaxHeight, computeMaxWidth, computeMinHeight, computeMinWidth, computePrefHeight, computePrefWidth, contextMenuProperty, getBaselineOffset, getContextMenu, getCssMetaData, getInitialFocusTraversable, getSkin, getTooltip, isResizable, layoutChildren, queryAccessibleAttribute, setContextMenu, setSkin, setTooltip, skinProperty, tooltipProperty
      • +
      +
        +
      • + + +

        Methods inherited from class javafx.scene.layout.Region

        +backgroundProperty, borderProperty, cacheShapeProperty, centerShapeProperty, getBackground, getBorder, getHeight, getInsets, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getOpaqueInsets, getPadding, getPrefHeight, getPrefWidth, getShape, getUserAgentStylesheet, getWidth, heightProperty, insetsProperty, isCacheShape, isCenterShape, isScaleShape, isSnapToPixel, layoutInArea, layoutInArea, layoutInArea, layoutInArea, maxHeight, maxHeightProperty, maxWidth, maxWidthProperty, minHeight, minHeightProperty, minWidth, minWidthProperty, opaqueInsetsProperty, paddingProperty, positionInArea, positionInArea, prefHeight, prefHeightProperty, prefWidth, prefWidthProperty, resize, scaleShapeProperty, setBackground, setBorder, setCacheShape, setCenterShape, setHeight, setMaxHeight, setMaxSize, setMaxWidth, setMinHeight, setMinSize, setMinWidth, setOpaqueInsets, setPadding, setPrefHeight, setPrefSize, setPrefWidth, setScaleShape, setShape, setSnapToPixel, setWidth, shapeProperty, snappedBottomInset, snappedLeftInset, snappedRightInset, snappedTopInset, snapPosition, snapPositionX, snapPositionY, snapSize, snapSizeX, snapSizeY, snapSpace, snapSpaceX, snapSpaceY, snapToPixelProperty, widthProperty
      • +
      +
        +
      • + + +

        Methods inherited from class javafx.scene.Parent

        +getChildren, getChildrenUnmodifiable, getManagedChildren, getStylesheets, isNeedsLayout, layout, lookup, needsLayoutProperty, requestLayout, requestParentLayout, setNeedsLayout, updateBounds
      • +
      +
        +
      • + + +

        Methods inherited from class javafx.scene.Node

        +accessibleHelpProperty, accessibleRoleDescriptionProperty, accessibleRoleProperty, accessibleTextProperty, addEventFilter, addEventHandler, applyCss, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen, contains, contains, cursorProperty, depthTestProperty, disabledProperty, disableProperty, effectiveNodeOrientationProperty, effectProperty, eventDispatcherProperty, fireEvent, focusedProperty, focusTraversableProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInitialCursor, getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY, getLocalToParentTransform, getLocalToSceneTransform, getNodeOrientation, getOnContextMenuRequested, getOnDragDetected, getOnDragDone, getOnDragDropped, getOnDragEntered, getOnDragExited, getOnDragOver, getOnInputMethodTextChanged, getOnKeyPressed, getOnKeyReleased, getOnKeyTyped, getOnMouseClicked, getOnMouseDragEntered, getOnMouseDragExited, getOnMouseDragged, getOnMouseDragOver, getOnMouseDragReleased, getOnMouseEntered, getOnMouseExited, getOnMouseMoved, getOnMousePressed, getOnMouseReleased, getOnRotate, getOnRotationFinished, getOnRotationStarted, getOnScroll, getOnScrollFinished, getOnScrollStarted, getOnSwipeDown, getOnSwipeLeft, getOnSwipeRight, getOnSwipeUp, getOnTouchMoved, getOnTouchPressed, getOnTouchReleased, getOnTouchStationary, getOnZoom, getOnZoomFinished, getOnZoomStarted, getOpacity, getParent, getProperties, getPseudoClassStates, getRotate, getRotationAxis, getScaleX, getScaleY, getScaleZ, getScene, getStyle, getStyleableParent, getStyleClass, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getTypeSelector, getUserData, getViewOrder, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, isVisible, layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent, localToParent, localToParent, localToParent, localToParent, localToParentTransformProperty, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToSceneTransformProperty, localToScreen, localToScreen, localToScreen, localToScreen, localToScreen, lookupAll, managedProperty, mouseTransparentProperty, nodeOrientationProperty, notifyAccessibleAttributeChanged, onContextMenuRequestedProperty, onDragDetectedProperty, onDragDoneProperty, onDragDroppedProperty, onDragEnteredProperty, onDragExitedProperty, onDragOverProperty, onInputMethodTextChangedProperty, onKeyPressedProperty, onKeyReleasedProperty, onKeyTypedProperty, onMouseClickedProperty, onMouseDragEnteredProperty, onMouseDragExitedProperty, onMouseDraggedProperty, onMouseDragOverProperty, onMouseDragReleasedProperty, onMouseEnteredProperty, onMouseExitedProperty, onMouseMovedProperty, onMousePressedProperty, onMouseReleasedProperty, onRotateProperty, onRotationFinishedProperty, onRotationStartedProperty, onScrollFinishedProperty, onScrollProperty, onScrollStartedProperty, onSwipeDownProperty, onSwipeLeftProperty, onSwipeRightProperty, onSwipeUpProperty, onTouchMovedProperty, onTouchPressedProperty, onTouchReleasedProperty, onTouchStationaryProperty, onZoomFinishedProperty, onZoomProperty, onZoomStartedProperty, opacityProperty, parentProperty, parentToLocal, parentToLocal, parentToLocal, parentToLocal, parentToLocal, pickOnBoundsProperty, pressedProperty, pseudoClassStateChanged, relocate, removeEventFilter, removeEventHandler, requestFocus, resizeRelocate, rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty, scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, screenToLocal, screenToLocal, screenToLocal, setAccessibleHelp, setAccessibleRole, setAccessibleRoleDescription, setAccessibleText, setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest, setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler, setFocused, setFocusTraversable, setHover, setId, setInputMethodRequests, setLayoutX, setLayoutY, setManaged, setMouseTransparent, setNodeOrientation, setOnContextMenuRequested, setOnDragDetected, setOnDragDone, setOnDragDropped, setOnDragEntered, setOnDragExited, setOnDragOver, setOnInputMethodTextChanged, setOnKeyPressed, setOnKeyReleased, setOnKeyTyped, setOnMouseClicked, setOnMouseDragEntered, setOnMouseDragExited, setOnMouseDragged, setOnMouseDragOver, setOnMouseDragReleased, setOnMouseEntered, setOnMouseExited, setOnMouseMoved, setOnMousePressed, setOnMouseReleased, setOnRotate, setOnRotationFinished, setOnRotationStarted, setOnScroll, setOnScrollFinished, setOnScrollStarted, setOnSwipeDown, setOnSwipeLeft, setOnSwipeRight, setOnSwipeUp, setOnTouchMoved, setOnTouchPressed, setOnTouchReleased, setOnTouchStationary, setOnZoom, setOnZoomFinished, setOnZoomStarted, setOpacity, setPickOnBounds, setPressed, setRotate, setRotationAxis, setScaleX, setScaleY, setScaleZ, setStyle, setTranslateX, setTranslateY, setTranslateZ, setUserData, setViewOrder, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, translateXProperty, translateYProperty, translateZProperty, usesMirroring, viewOrderProperty, visibleProperty
      • +
      + +
        +
      • + + +

        Methods inherited from interface javafx.css.Styleable

        +getStyleableNode
      • +
      +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        baseProperty

        +
        private final javafx.beans.property.IntegerProperty baseProperty
        +
        Property, über das die Basis des aktuellen Zahlensystems eingestellt wird
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ValueButton

        +
        public ValueButton()
        +
        Erstellt einen ValueButton mit einem leeren String als Beschriftung
        +
      • +
      + + + +
        +
      • +

        ValueButton

        +
        public ValueButton​(String text,
        +                   javafx.scene.Node graphic)
        +
        Erstellt einen ValueButton mit einem spezifischen String und einem Icon als Beschriftung
        +
        +
        Parameters:
        +
        text - Text für die Beschriftung dieses Buttons
        +
        graphic - Icon für die Beschriftung dieses Buttons
        +
        +
      • +
      + + + +
        +
      • +

        ValueButton

        +
        public ValueButton​(String text)
        +
        Erstellt einen ValueButton mit einem spezifischen String als Beschriftung
        +
        +
        Parameters:
        +
        text - Text für die Beschriftung dieses Buttons
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        setBase

        +
        public void setBase​(int base)
        +
        Setzt den Wert für die Basis
        +
        +
        Parameters:
        +
        base - neue Basis
        +
        +
      • +
      + + + +
        +
      • +

        getBaseProperty

        +
        public javafx.beans.property.IntegerProperty getBaseProperty()
        +
        Gibt den Wert der baseProperty zurück
        +
        +
        Returns:
        +
        baseProperty dieses ValueButtons
        +
        +
      • +
      + + + +
        +
      • +

        init

        +
        private void init()
        +
        Setzt Listener zum Aktivieren und Deaktivieren dieses Buttons + durch die eingestellte Basis
        +
        +
        See Also:
        +
        setTextListener(), +setBaseListener()
        +
        +
      • +
      + + + +
        +
      • +

        setTextListener

        +
        private void setTextListener()
        +
        Überprüft die textProperty und aktiviert bzw. deaktiviert diesen Button, wenn der neue Text + zur baseProperty passt bzw. nicht passt
        +
      • +
      + + + +
        +
      • +

        setBaseListener

        +
        private void setBaseListener()
        +
        Überprüft die baseProperty und aktiviert bzw. deaktiviert diesen Button, wenn der Text + zum neuen Wert der baseProperty passt bzw. nicht passt
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controls/ValueField.html b/doc/0.1.4/de_private/bitchanger/gui/controls/ValueField.html new file mode 100644 index 0000000..2a0b086 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controls/ValueField.html @@ -0,0 +1,750 @@ + + + + + +ValueField + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ValueField

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • javafx.scene.Node
    • +
    • +
        +
      • javafx.scene.Parent
      • +
      • +
          +
        • javafx.scene.layout.Region
        • +
        • +
            +
          • javafx.scene.control.Control
          • +
          • +
              +
            • javafx.scene.control.TextInputControl
            • +
            • +
                +
              • javafx.scene.control.TextField
              • +
              • +
                  +
                • bitchanger.gui.controls.ValueField
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    javafx.css.Styleable, javafx.event.EventTarget, javafx.scene.control.Skinnable
    +
    +
    +
    public class ValueField
    +extends javafx.scene.control.TextField
    +
    TextFeld, in dem eine Zahl zu einem bestimmten Zahlensystem eingegeben werden kann. + Es können nur Zeichen eingegeben werden, die in dem eingestellten Zahlensystem erlaubt sind. + Als einzige Ausnahme ist auch die Eingabe von Leerzeichen (beispielsweise zur Tausendertrennung) möglich. + Die aktuelle Basis wird über die baseProperty eingestellt. + Die Grundform ist ein Rechteck ohne abgerundete Ecken. + +

    + Als Zusatzfunktion wird die Eingabe in Blöcke aufgeteilt, wenn es sich bei dem eingestellten Zahlensystem + um das Binärsystem handelt. +

    +
    +
    Since:
    +
    Bitchanger 0.1.0
    +
    Version:
    +
    0.1.4
    +
    Author:
    +
    Tim Mühle
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Nested Class Summary

      +
        +
      • + + +

        Nested classes/interfaces inherited from class javafx.scene.control.TextInputControl

        +javafx.scene.control.TextInputControl.Content
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      private javafx.beans.property.IntegerPropertybaseProperty +
      Property für die Basis des Zahlensystems
      +
      private intlastCaretPosition +
      Hilfsvariable für die letzte bekannte Position im Textfeld
      +
      +
        +
      • + + +

        Fields inherited from class javafx.scene.control.TextField

        +DEFAULT_PREF_COLUMN_COUNT
      • +
      +
        +
      • + + +

        Fields inherited from class javafx.scene.layout.Region

        +USE_COMPUTED_SIZE, USE_PREF_SIZE
      • +
      +
        +
      • + + +

        Fields inherited from class javafx.scene.Node

        +BASELINE_OFFSET_SAME_AS_HEIGHT
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      ValueField() +
      Erzeugt ein neues ValueField mit leerem Text und der Basis 10
      +
      ValueField​(int base) +
      Erzeugt ein neues ValueField mit leerem Text und der übergebenen Basis
      +
      ValueField​(String text) +
      Erzeugt ein neues ValueField mit dem übergebenen Text als Inhalt und der Basis 10
      +
      ValueField​(String text, + int base) +
      Erzeugt ein neues ValueField mit dem übergebenen Text als Inhalt und der übergebenen Basis
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Concrete Methods 
      Modifier and TypeMethodDescription
      private voidcheckText​(javafx.beans.value.ObservableValue<? extends String> observable, + String oldValue, + String newValue) +
      Prüft, ob der eingegebene Text zur Basis passt und setzt die Eingabe zurück, wenn ein verbotenes + Zeichen eingegeben wurde.
      +
      private voidfocuse​(javafx.beans.value.ObservableValue<? extends Boolean> observable, + Boolean oldValue, + Boolean isFocused) +
      Entfernt den Indikator für abgeschnittene Nachkommastellen und setzt die CaretPosition auf den + letzten bekannten Wert zurück.
      +
      intgetBase() +
      Gibt den Wert der baseProperty zurück
      +
      javafx.beans.property.IntegerPropertygetBaseProperty() +
      Gibt die baseProperty dieses ValueFields zurück
      +
      private booleanhasSelection() +
      Überprüft, ob es eine Textauswahl in diesem ValueField gibt
      +
      private voidobserveCommaProperty() +
      Überwacht die CommaProperty aus Preferences und passt das Komma der Zahl in diesem Textfeld + bei Änderung an
      +
      voidsetBase​(int base) +
      Setzt den Wert der baseProperty
      +
      voidstoreCaretPosition​(javafx.beans.value.ObservableValue<? extends Number> observable, + Number oldValue, + Number newValue) +
      Speichert die letzte bekannte CaretPosition, um diese zurücksetzen zu können.
      +
      +
        +
      • + + +

        Methods inherited from class javafx.scene.control.TextField

        +alignmentProperty, createDefaultSkin, getAlignment, getCharacters, getClassCssMetaData, getControlCssMetaData, getOnAction, getPrefColumnCount, onActionProperty, prefColumnCountProperty, setAlignment, setOnAction, setPrefColumnCount
      • +
      +
        +
      • + + +

        Methods inherited from class javafx.scene.control.TextInputControl

        +anchorProperty, appendText, backward, cancelEdit, caretPositionProperty, clear, commitValue, copy, cut, deleteNextChar, deletePreviousChar, deleteText, deleteText, deselect, editableProperty, end, endOfNextWord, executeAccessibleAction, extendSelection, fontProperty, forward, getAnchor, getCaretPosition, getContent, getFont, getLength, getPromptText, getSelectedText, getSelection, getText, getText, getTextFormatter, home, insertText, isEditable, isRedoable, isUndoable, lengthProperty, nextWord, paste, positionCaret, previousWord, promptTextProperty, queryAccessibleAttribute, redo, redoableProperty, replaceSelection, replaceText, replaceText, selectAll, selectBackward, selectedTextProperty, selectEnd, selectEndOfNextWord, selectForward, selectHome, selectionProperty, selectNextWord, selectPositionCaret, selectPreviousWord, selectRange, setEditable, setFont, setPromptText, setText, setTextFormatter, textFormatterProperty, textProperty, undo, undoableProperty
      • +
      +
        +
      • + + +

        Methods inherited from class javafx.scene.control.Control

        +computeMaxHeight, computeMaxWidth, computeMinHeight, computeMinWidth, computePrefHeight, computePrefWidth, contextMenuProperty, getBaselineOffset, getContextMenu, getCssMetaData, getInitialFocusTraversable, getSkin, getTooltip, isResizable, layoutChildren, setContextMenu, setSkin, setTooltip, skinProperty, tooltipProperty
      • +
      +
        +
      • + + +

        Methods inherited from class javafx.scene.layout.Region

        +backgroundProperty, borderProperty, cacheShapeProperty, centerShapeProperty, getBackground, getBorder, getHeight, getInsets, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getOpaqueInsets, getPadding, getPrefHeight, getPrefWidth, getShape, getUserAgentStylesheet, getWidth, heightProperty, insetsProperty, isCacheShape, isCenterShape, isScaleShape, isSnapToPixel, layoutInArea, layoutInArea, layoutInArea, layoutInArea, maxHeight, maxHeightProperty, maxWidth, maxWidthProperty, minHeight, minHeightProperty, minWidth, minWidthProperty, opaqueInsetsProperty, paddingProperty, positionInArea, positionInArea, prefHeight, prefHeightProperty, prefWidth, prefWidthProperty, resize, scaleShapeProperty, setBackground, setBorder, setCacheShape, setCenterShape, setHeight, setMaxHeight, setMaxSize, setMaxWidth, setMinHeight, setMinSize, setMinWidth, setOpaqueInsets, setPadding, setPrefHeight, setPrefSize, setPrefWidth, setScaleShape, setShape, setSnapToPixel, setWidth, shapeProperty, snappedBottomInset, snappedLeftInset, snappedRightInset, snappedTopInset, snapPosition, snapPositionX, snapPositionY, snapSize, snapSizeX, snapSizeY, snapSpace, snapSpaceX, snapSpaceY, snapToPixelProperty, widthProperty
      • +
      +
        +
      • + + +

        Methods inherited from class javafx.scene.Parent

        +getChildren, getChildrenUnmodifiable, getManagedChildren, getStylesheets, isNeedsLayout, layout, lookup, needsLayoutProperty, requestLayout, requestParentLayout, setNeedsLayout, updateBounds
      • +
      +
        +
      • + + +

        Methods inherited from class javafx.scene.Node

        +accessibleHelpProperty, accessibleRoleDescriptionProperty, accessibleRoleProperty, accessibleTextProperty, addEventFilter, addEventHandler, applyCss, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen, contains, contains, cursorProperty, depthTestProperty, disabledProperty, disableProperty, effectiveNodeOrientationProperty, effectProperty, eventDispatcherProperty, fireEvent, focusedProperty, focusTraversableProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getContentBias, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInitialCursor, getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY, getLocalToParentTransform, getLocalToSceneTransform, getNodeOrientation, getOnContextMenuRequested, getOnDragDetected, getOnDragDone, getOnDragDropped, getOnDragEntered, getOnDragExited, getOnDragOver, getOnInputMethodTextChanged, getOnKeyPressed, getOnKeyReleased, getOnKeyTyped, getOnMouseClicked, getOnMouseDragEntered, getOnMouseDragExited, getOnMouseDragged, getOnMouseDragOver, getOnMouseDragReleased, getOnMouseEntered, getOnMouseExited, getOnMouseMoved, getOnMousePressed, getOnMouseReleased, getOnRotate, getOnRotationFinished, getOnRotationStarted, getOnScroll, getOnScrollFinished, getOnScrollStarted, getOnSwipeDown, getOnSwipeLeft, getOnSwipeRight, getOnSwipeUp, getOnTouchMoved, getOnTouchPressed, getOnTouchReleased, getOnTouchStationary, getOnZoom, getOnZoomFinished, getOnZoomStarted, getOpacity, getParent, getProperties, getPseudoClassStates, getRotate, getRotationAxis, getScaleX, getScaleY, getScaleZ, getScene, getStyle, getStyleableParent, getStyleClass, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getTypeSelector, getUserData, getViewOrder, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, isVisible, layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent, localToParent, localToParent, localToParent, localToParent, localToParentTransformProperty, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToSceneTransformProperty, localToScreen, localToScreen, localToScreen, localToScreen, localToScreen, lookupAll, managedProperty, mouseTransparentProperty, nodeOrientationProperty, notifyAccessibleAttributeChanged, onContextMenuRequestedProperty, onDragDetectedProperty, onDragDoneProperty, onDragDroppedProperty, onDragEnteredProperty, onDragExitedProperty, onDragOverProperty, onInputMethodTextChangedProperty, onKeyPressedProperty, onKeyReleasedProperty, onKeyTypedProperty, onMouseClickedProperty, onMouseDragEnteredProperty, onMouseDragExitedProperty, onMouseDraggedProperty, onMouseDragOverProperty, onMouseDragReleasedProperty, onMouseEnteredProperty, onMouseExitedProperty, onMouseMovedProperty, onMousePressedProperty, onMouseReleasedProperty, onRotateProperty, onRotationFinishedProperty, onRotationStartedProperty, onScrollFinishedProperty, onScrollProperty, onScrollStartedProperty, onSwipeDownProperty, onSwipeLeftProperty, onSwipeRightProperty, onSwipeUpProperty, onTouchMovedProperty, onTouchPressedProperty, onTouchReleasedProperty, onTouchStationaryProperty, onZoomFinishedProperty, onZoomProperty, onZoomStartedProperty, opacityProperty, parentProperty, parentToLocal, parentToLocal, parentToLocal, parentToLocal, parentToLocal, pickOnBoundsProperty, pressedProperty, pseudoClassStateChanged, relocate, removeEventFilter, removeEventHandler, requestFocus, resizeRelocate, rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty, scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, screenToLocal, screenToLocal, screenToLocal, setAccessibleHelp, setAccessibleRole, setAccessibleRoleDescription, setAccessibleText, setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest, setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler, setFocused, setFocusTraversable, setHover, setId, setInputMethodRequests, setLayoutX, setLayoutY, setManaged, setMouseTransparent, setNodeOrientation, setOnContextMenuRequested, setOnDragDetected, setOnDragDone, setOnDragDropped, setOnDragEntered, setOnDragExited, setOnDragOver, setOnInputMethodTextChanged, setOnKeyPressed, setOnKeyReleased, setOnKeyTyped, setOnMouseClicked, setOnMouseDragEntered, setOnMouseDragExited, setOnMouseDragged, setOnMouseDragOver, setOnMouseDragReleased, setOnMouseEntered, setOnMouseExited, setOnMouseMoved, setOnMousePressed, setOnMouseReleased, setOnRotate, setOnRotationFinished, setOnRotationStarted, setOnScroll, setOnScrollFinished, setOnScrollStarted, setOnSwipeDown, setOnSwipeLeft, setOnSwipeRight, setOnSwipeUp, setOnTouchMoved, setOnTouchPressed, setOnTouchReleased, setOnTouchStationary, setOnZoom, setOnZoomFinished, setOnZoomStarted, setOpacity, setPickOnBounds, setPressed, setRotate, setRotationAxis, setScaleX, setScaleY, setScaleZ, setStyle, setTranslateX, setTranslateY, setTranslateZ, setUserData, setViewOrder, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, toString, translateXProperty, translateYProperty, translateZProperty, usesMirroring, viewOrderProperty, visibleProperty
      • +
      + +
        +
      • + + +

        Methods inherited from interface javafx.css.Styleable

        +getStyleableNode
      • +
      +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        baseProperty

        +
        private final javafx.beans.property.IntegerProperty baseProperty
        +
        Property für die Basis des Zahlensystems
        +
      • +
      + + + +
        +
      • +

        lastCaretPosition

        +
        private int lastCaretPosition
        +
        Hilfsvariable für die letzte bekannte Position im Textfeld
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ValueField

        +
        public ValueField()
        +
        Erzeugt ein neues ValueField mit leerem Text und der Basis 10
        +
      • +
      + + + +
        +
      • +

        ValueField

        +
        public ValueField​(String text)
        +
        Erzeugt ein neues ValueField mit dem übergebenen Text als Inhalt und der Basis 10
        +
        +
        Parameters:
        +
        text - Textinhalt für dieses Textfeld
        +
        +
      • +
      + + + +
        +
      • +

        ValueField

        +
        public ValueField​(int base)
        +
        Erzeugt ein neues ValueField mit leerem Text und der übergebenen Basis
        +
        +
        Parameters:
        +
        base - Wert für die baseProperty
        +
        +
      • +
      + + + +
        +
      • +

        ValueField

        +
        public ValueField​(String text,
        +                  int base)
        +
        Erzeugt ein neues ValueField mit dem übergebenen Text als Inhalt und der übergebenen Basis
        +
        +
        Parameters:
        +
        text - Textinhalt für dieses Textfeld
        +
        base - Wert für die baseProperty
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        setBase

        +
        public void setBase​(int base)
        +
        Setzt den Wert der baseProperty
        +
        +
        Parameters:
        +
        base - neue Basis
        +
        +
      • +
      + + + + + + + +
        +
      • +

        getBaseProperty

        +
        public javafx.beans.property.IntegerProperty getBaseProperty()
        +
        Gibt die baseProperty dieses ValueFields zurück
        +
        +
        Returns:
        +
        baseProperty dieses ValueFields
        +
        +
      • +
      + + + +
        +
      • +

        hasSelection

        +
        private boolean hasSelection()
        +
        Überprüft, ob es eine Textauswahl in diesem ValueField gibt
        +
        +
        Returns:
        +
        true, wenn eine Textstelle ausgewählt wurde, sonst false
        +
        +
      • +
      + + + +
        +
      • +

        checkText

        +
        private void checkText​(javafx.beans.value.ObservableValue<? extends String> observable,
        +                       String oldValue,
        +                       String newValue)
        +
        Prüft, ob der eingegebene Text zur Basis passt und setzt die Eingabe zurück, wenn ein verbotenes + Zeichen eingegeben wurde. Kann als Methoden-Referenz für einen ChangeListener eingesetzt werden.
        +
        +
        Parameters:
        +
        observable - ObservableValue, dessen Wert sich ändert
        +
        oldValue - alter Wert
        +
        newValue - neuer Wert
        +
        +
      • +
      + + + +
        +
      • +

        storeCaretPosition

        +
        public void storeCaretPosition​(javafx.beans.value.ObservableValue<? extends Number> observable,
        +                               Number oldValue,
        +                               Number newValue)
        +
        Speichert die letzte bekannte CaretPosition, um diese zurücksetzen zu können. + Kann als Methoden-Referenz für einen ChangeListener eingesetzt werden.
        +
        +
        Parameters:
        +
        observable - ObservableValue, dessen Wert sich ändert
        +
        oldValue - alter Wert
        +
        newValue - neuer Wert
        +
        +
      • +
      + + + +
        +
      • +

        focuse

        +
        private void focuse​(javafx.beans.value.ObservableValue<? extends Boolean> observable,
        +                    Boolean oldValue,
        +                    Boolean isFocused)
        +
        Entfernt den Indikator für abgeschnittene Nachkommastellen und setzt die CaretPosition auf den + letzten bekannten Wert zurück. + Kann als Methoden-Referenz für einen ChangeListener eingesetzt werden.
        +
        +
        Parameters:
        +
        observable - ObservableValue, dessen Wert sich ändert
        +
        oldValue - alter Wert
        +
        isFocused - neuer Wert
        +
        +
      • +
      + + + +
        +
      • +

        observeCommaProperty

        +
        private void observeCommaProperty()
        +
        Überwacht die CommaProperty aus Preferences und passt das Komma der Zahl in diesem Textfeld + bei Änderung an
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/AlphaNumGrid.html b/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/AlphaNumGrid.html new file mode 100644 index 0000000..436d028 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/AlphaNumGrid.html @@ -0,0 +1,221 @@ + + + + + +Uses of Class bitchanger.gui.controls.AlphaNumGrid + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.gui.controls.AlphaNumGrid

+
+
+ +
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/AlphaNumKeys.html b/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/AlphaNumKeys.html new file mode 100644 index 0000000..f21d977 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/AlphaNumKeys.html @@ -0,0 +1,226 @@ + + + + + +Uses of Class bitchanger.gui.controls.AlphaNumKeys + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.gui.controls.AlphaNumKeys

+
+
+ +
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/BaseSpinner.html b/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/BaseSpinner.html new file mode 100644 index 0000000..280822a --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/BaseSpinner.html @@ -0,0 +1,197 @@ + + + + + +Uses of Class bitchanger.gui.controls.BaseSpinner + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.gui.controls.BaseSpinner

+
+
+ +
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/BasicMenuBar.html b/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/BasicMenuBar.html new file mode 100644 index 0000000..d1fd404 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/BasicMenuBar.html @@ -0,0 +1,274 @@ + + + + + +Uses of Class bitchanger.gui.controls.BasicMenuBar + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.gui.controls.BasicMenuBar

+
+
+ +
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/ConverterMenuBar.html b/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/ConverterMenuBar.html new file mode 100644 index 0000000..4c16438 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/ConverterMenuBar.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controls.ConverterMenuBar + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.gui.controls.ConverterMenuBar

+
+
No usage of bitchanger.gui.controls.ConverterMenuBar
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/FXUtils.html b/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/FXUtils.html new file mode 100644 index 0000000..551ace1 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/FXUtils.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controls.FXUtils + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.gui.controls.FXUtils

+
+
No usage of bitchanger.gui.controls.FXUtils
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/InformationDialog.InformationType.html b/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/InformationDialog.InformationType.html new file mode 100644 index 0000000..afae385 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/InformationDialog.InformationType.html @@ -0,0 +1,218 @@ + + + + + +Uses of Class bitchanger.gui.controls.InformationDialog.InformationType + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.gui.controls.InformationDialog.InformationType

+
+
+ +
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/InformationDialog.html b/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/InformationDialog.html new file mode 100644 index 0000000..4e90a41 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/InformationDialog.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controls.InformationDialog + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.gui.controls.InformationDialog

+
+
No usage of bitchanger.gui.controls.InformationDialog
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/SVGIcon.html b/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/SVGIcon.html new file mode 100644 index 0000000..2cf8985 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/SVGIcon.html @@ -0,0 +1,283 @@ + + + + + +Uses of Class bitchanger.gui.controls.SVGIcon + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.gui.controls.SVGIcon

+
+
+ +
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/TriConsumer.html b/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/TriConsumer.html new file mode 100644 index 0000000..5238743 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/TriConsumer.html @@ -0,0 +1,202 @@ + + + + + +Uses of Interface bitchanger.gui.controls.TriConsumer + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
bitchanger.gui.controls.TriConsumer

+
+
+ +
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/UnfocusedButton.html b/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/UnfocusedButton.html new file mode 100644 index 0000000..7dc64fc --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/UnfocusedButton.html @@ -0,0 +1,197 @@ + + + + + +Uses of Class bitchanger.gui.controls.UnfocusedButton + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.gui.controls.UnfocusedButton

+
+
+ +
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/ValueButton.html b/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/ValueButton.html new file mode 100644 index 0000000..cf1ac2b --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/ValueButton.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controls.ValueButton + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.gui.controls.ValueButton

+
+
No usage of bitchanger.gui.controls.ValueButton
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/ValueField.html b/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/ValueField.html new file mode 100644 index 0000000..d8aa837 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controls/class-use/ValueField.html @@ -0,0 +1,232 @@ + + + + + +Uses of Class bitchanger.gui.controls.ValueField + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.gui.controls.ValueField

+
+
+ +
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controls/package-summary.html b/doc/0.1.4/de_private/bitchanger/gui/controls/package-summary.html new file mode 100644 index 0000000..d5c9832 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controls/package-summary.html @@ -0,0 +1,231 @@ + + + + + +bitchanger.gui.controls + + + + + + + + + + + + + + + +
+ +
+
+
+

Package bitchanger.gui.controls

+
+
+
+ + +
Stellt angepasste Bedienelemente und Funktionen für die Benutzeroberfläche zur Verfügung
+
+
    +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    AlphaNumKeys +
    AlphaNumKeys stellt ein Tastaturlayout als 4x5 Matrix bereit.
    +
    BaseSpinner +
    Spinner, mit dem die Basis für ein Zahlensystem ausgewählt werden kann.
    +
    BasicMenuBar +
    Basis Menüleiste, die die allgemein benötigten Menüpunkte enthält.
    +
    ConverterMenuBar 
    InformationDialog 
    SVGIcon 
    UnfocusedButton +
    Button, der beim Klick nicht den Fokus erhält und als Grundform ein Rechteck ohne abgerundete Ecken besitzt.
    +
    ValueButton +
    UnfocusedButton mit einer zusätzlichen Property für die Einstellung einer Basis.
    +
    ValueField +
    TextFeld, in dem eine Zahl zu einem bestimmten Zahlensystem eingegeben werden kann.
    +
    +
  • +
  • + + + + + + + + + + + + +
    Enum Summary 
    EnumDescription
    InformationDialog.InformationType 
    +
  • +
+
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controls/package-tree.html b/doc/0.1.4/de_private/bitchanger/gui/controls/package-tree.html new file mode 100644 index 0000000..2df10df --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controls/package-tree.html @@ -0,0 +1,252 @@ + + + + + +bitchanger.gui.controls Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package bitchanger.gui.controls

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+
    +
  • java.lang.Object +
      +
    • bitchanger.gui.controls.AlphaNumKeys (implements bitchanger.gui.controller.Controllable)
    • +
    • javafx.scene.control.Dialog<R> (implements javafx.event.EventTarget) + +
    • +
    • javafx.scene.Node (implements javafx.event.EventTarget, javafx.css.Styleable) +
        +
      • javafx.scene.Parent +
          +
        • javafx.scene.layout.Region +
            +
          • javafx.scene.control.Control (implements javafx.scene.control.Skinnable) +
              +
            • javafx.scene.control.Labeled +
                +
              • javafx.scene.control.ButtonBase + +
              • +
              +
            • +
            • javafx.scene.control.MenuBar + +
            • +
            • javafx.scene.control.Spinner<T> + +
            • +
            • javafx.scene.control.TextInputControl +
                +
              • javafx.scene.control.TextField + +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      • javafx.scene.shape.Shape +
          +
        • javafx.scene.shape.SVGPath +
            +
          • bitchanger.gui.controls.SVGIcon
          • +
          +
        • +
        +
      • +
      +
    • +
    +
  • +
+
+
+

Enum Hierarchy

+ +
+
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/controls/package-use.html b/doc/0.1.4/de_private/bitchanger/gui/controls/package-use.html new file mode 100644 index 0000000..d2358f3 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/controls/package-use.html @@ -0,0 +1,299 @@ + + + + + +Uses of Package bitchanger.gui.controls + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
bitchanger.gui.controls

+
+
+ +
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/package-summary.html b/doc/0.1.4/de_private/bitchanger/gui/package-summary.html new file mode 100644 index 0000000..a0db04a --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/package-summary.html @@ -0,0 +1,155 @@ + + + + + +bitchanger.gui + + + + + + + + + + + + + + + +
+ +
+
+
+

Package bitchanger.gui

+
+
+
+ + +
Enthält alle Komponenten für die grafische Oberfläche, die mit JavaFX realisiert wird.
+
+
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/package-tree.html b/doc/0.1.4/de_private/bitchanger/gui/package-tree.html new file mode 100644 index 0000000..39936ca --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/package-tree.html @@ -0,0 +1,152 @@ + + + + + +bitchanger.gui Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package bitchanger.gui

+Package Hierarchies: + +
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/package-use.html b/doc/0.1.4/de_private/bitchanger/gui/package-use.html new file mode 100644 index 0000000..377a0e7 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/package-use.html @@ -0,0 +1,149 @@ + + + + + +Uses of Package bitchanger.gui + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
bitchanger.gui

+
+
No usage of bitchanger.gui
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/views/AlphaNumGridView.ConstraintType.html b/doc/0.1.4/de_private/bitchanger/gui/views/AlphaNumGridView.ConstraintType.html new file mode 100644 index 0000000..1924bdd --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/views/AlphaNumGridView.ConstraintType.html @@ -0,0 +1,488 @@ + + + + + +AlphaNumGridView.ConstraintType + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Enum AlphaNumGridView.ConstraintType

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    + +
    + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ConstraintType

        +
        private ConstraintType()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        values

        +
        public static AlphaNumGridView.ConstraintType[] values()
        +
        Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
        +for (AlphaNumGridView.ConstraintType c : AlphaNumGridView.ConstraintType.values())
        +    System.out.println(c);
        +
        +
        +
        Returns:
        +
        an array containing the constants of this enum type, in the order they are declared
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static AlphaNumGridView.ConstraintType valueOf​(String name)
        +
        Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
        +
        +
        Parameters:
        +
        name - the name of the enum constant to be returned.
        +
        Returns:
        +
        the enum constant with the specified name
        +
        Throws:
        +
        IllegalArgumentException - if this enum type has no constant with the specified name
        +
        NullPointerException - if the argument is null
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/views/AlphaNumGridView.html b/doc/0.1.4/de_private/bitchanger/gui/views/AlphaNumGridView.html new file mode 100644 index 0000000..683fd72 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/views/AlphaNumGridView.html @@ -0,0 +1,1696 @@ + + + + + +AlphaNumGridView + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class AlphaNumGridView

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Controllable, Viewable
    +
    +
    +
    Direct Known Subclasses:
    +
    CalculatorView, ConverterView, IEEEView
    +
    +
    +
    public class AlphaNumGridView
    +extends ViewBase<javafx.scene.layout.BorderPane>
    +
    View, die die Basis Scene für eine Tabelle aus einer Spalte mit Labels, einer Spalte mit Textfeldern + und einer Tastaturmatrix aus AlphaNumKeys erstellt. +

    + Die Position der Labels und Textfelder werden über die Attribute labelColumn, firstLabelRow, + tfColumn und firstTFRow festgelegt. Die Anzahl der Labels und Textfelder wird über die Arrays + labelTexts und tfKeys festgelegt. Alle Labels werden in der definierten Spalte untereinander + in die Zeilen der GridPane center positioniert. Analog gilt das selbe für die Textfelder. + Alle Textfelder sind eine Instanz von ValueField. +

    +

    + Zudem wird eine funktionsfähige Tastaturmatrix aus AlphaNumKeys in der Tabelle eingefügt. Die Position + des ersten Buttons dieser Matrix ist durch die Attribut firstKeyBtnColumn und firstKeyBtnRow + 1 + definiert. Hat das Attribut useClearAndBackBtn zum Zeitpunkt des Aufrufes der Methode createScenegraph() + den Wert true werden in der Zeile oberhalb der Tastaturmatrix die Buttons clearBtnKey und + backspaceBtnKey positioniert. Unabhängig davon werden diese beiden Buttons in jedem Fall vollständig initialisiert + und zur Map ViewBase.getButtonMap() hinzugefügt und können somit auch manuell in der GridPane positioniert werden. + Alle Buttons werden als Instanz von UnfocusedButton angelegt. +

    +

    + Die Textfelder wachsen in vertikale Richtung mit den Spalten der GridPane, die Buttons der Tastaturmatrix + wachsen sowohl mit den Spalten als auch mit den Zeilen der GridPane. +

    +

    + Wenn das Attribut setTFColumnSpan zum Zeitpunkt des Aufrufes der Methode createScenegraph() den Wert true hat, + werden die Textfelder über die Anzahl der Spalten verteilt, die die Tastaturmatrix einnimmt! +

    +

    + Der Scenegraph dieser View muss erst von einer Subklasse mit der Methode createScenegraph() erstellt werden, + bevor diese View dargestellt werden kann. +

    +
    +
    Since:
    +
    Bitchanger 0.1.4
    +
    Version:
    +
    0.1.4
    +
    Author:
    +
    Tim Mühle
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Nested Class Summary

      + + + + + + + + + + + + +
      Nested Classes 
      Modifier and TypeClassDescription
      protected static class AlphaNumGridView.ConstraintType +
      Aufzählung von möglichen Typen für Constraints einer GridPane
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      String[]alphaKeys +
      Array, das die Schlüsselwörter für die Buchstaben-Buttons definiert
      +
      protected AlphaNumKeysalphaNum +
      Buttons, die als alpha-numerische Tastatur dienen, die für verschiedene Zahlensysteme ausgelegt ist.
      +
      StringbackspaceBtnKey +
      Schlüsselwort, mit dem der Backspace-Button in der Map btnMap gespeichert wird
      +
      protected javafx.beans.property.DoublePropertybtnMaxHeigthProperty +
      Property für die maximale Höhe der Buttons in dieser View
      +
      protected javafx.beans.property.DoublePropertybtnMaxWidthProperty +
      Property für die maximale Breite der Buttons in dieser View
      +
      protected javafx.beans.property.DoublePropertybtnMinHeigthProperty +
      Property für die minimale Höhe der Buttons in dieser View
      +
      protected javafx.beans.property.DoublePropertybtnMinWidthProperty +
      Property für die minimale Breite der Buttons in dieser View
      +
      protected javafx.beans.property.DoublePropertybtnSpacingProperty +
      Property für den Abstand der Buttons in der GridPane
      +
      private HashMap<String,​Object>btnTexts +
      Map, in der die angezeigten Texte oder Icons für die Buttons definiert werden.
      +
      protected javafx.scene.layout.GridPanecenter +
      Tabelle im Center von root, in der alle Controls positioniert werden
      +
      StringclearBtnKey +
      Schlüsselwort, mit dem der Löschen-Button (AC) in der Map btnMap gespeichert wird
      +
      StringcommaBtnKey +
      Schlüsselwort für den Komma-Button
      +
      protected javafx.beans.property.DoublePropertyfirstColumnWidthProperty +
      Property für die Breite der ersten Spalte mit den Labels enthält.
      +
      protected intfirstKeyBtnColumn +
      Konstante, die die erste Spalte der GridPane definiert, in der die Tastatur-Buttons positioniert werden
      +
      protected intfirstKeyBtnRow +
      Konstante, die die erste Zeile der GridPane definiert, in der die Tastatur-Buttons positioniert werden
      +
      protected intfirstLabelRow +
      Konstante, die die erste Zeile der GridPane definiert, in der die Labels positioniert werden
      +
      protected intfirstTFRow +
      Konstante, die die erste Zeile der GridPane definiert, in der die Textfelder positioniert werden
      +
      protected javafx.beans.property.DoublePropertyhgapProperty +
      Property für den horizontalen Abstand der GridPane im Center
      +
      StringkeyboardBtnKey +
      Schlüsselwort für den Button zum Umschalten des Tastaturlayouts
      +
      protected intlabelColumn +
      Konstante, die die Spalte der GridPane definiert, in der die Labels positioniert werden
      +
      String[]labelTexts +
      Array, das die Beschriftungen für die Labels vor den Textfeldern definiert
      +
      StringnextBtnKey +
      Schlüsselwort für den Button zum Weiterscrollen durch die Tastatur
      +
      String[]numKeys +
      Array, das die Schlüsselwörter für die Zahlen-Buttons definiert
      +
      protected javafx.beans.property.DoublePropertypaddingBottomProperty +
      Property für den Abstand am unteren Rand der GridPane im Center
      +
      protected javafx.beans.property.DoublePropertypaddingLeftProperty +
      Property für den Abstand am linken Rand der GridPane im Center
      +
      protected javafx.beans.property.DoublePropertypaddingRigthProperty +
      Property für den Abstand am rechten Rand der GridPane im Center
      +
      protected javafx.beans.property.DoublePropertypaddingTopProperty +
      Property für den Abstand am oberen Rand der GridPane im Center
      +
      StringpreviousBtnKey +
      Schlüsselwort für den Button zum Rückwärtsscrollen durch die Tastatur
      +
      protected booleansetTFColumnSpan +
      true, wenn die Textfelder über die Anzahl der Spalten von der Tastatur verteilt werden sollen.
      +
      StringsignBtnKey +
      Schlüsselwort für den Button zum Vorzeichenwechsel
      +
      protected inttfColumn +
      Konstante, die die Spalte der GridPane definiert, in der die Textfelder positioniert werden
      +
      String[]tfKeys +
      Array, das die Schlüsselwörter definiert, mit denen die Textfelder in der Map tfMap gespeichert werden
      +
      protected javafx.beans.property.DoublePropertytfMaxHeightProperty +
      Property für die maximale Höhe der Textfelder in dieser View
      +
      protected javafx.beans.property.DoublePropertytfMinHeightProperty +
      Property für die minimale Höhe der Textfelder in dieser View
      +
      protected booleanuseClearAndBackBtn +
      true, wenn die Buttons clearBtnKey und backspaceBtnKey in der Zeile + firstKeyBtnRow über der Tastaturmatrix in der GridPane positioniert werden sollen.
      +
      protected javafx.beans.property.DoublePropertyvgapProperty +
      Property für den vertikalen Abstand der GridPane im Center
      +
      protected javafx.beans.property.DoublePropertywhiteSpaceHeigthProperty +
      Property für die Höhe der Zeilen zwischen den Textfeldern und Buttons
      +
      StringzeroBtnKey +
      Schlüsselwort für den Button, der die Null repräsentiert
      +
      + + +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      AlphaNumGridView​(int firstKeyBtnRow, + int firstKeyBtnColumn) +
      Erzeugt eine neue AlphaNumGridView, die keine Labels und keine Textfelder enthält.
      +
      AlphaNumGridView​(int firstLabelRow, + int labelColumn, + int firstTFRow, + int tfColumn, + int firstKeyBtnRow, + int firstKeyBtnColumn, + String[] labelTexts, + String... tfKeys) +
      Erzeugt eine neue AlphaNumGridView, die ihre Labels, Textfelder und die Tastaturmatrix nach den übergebenen Parametern + positioniert.
      +
      AlphaNumGridView​(int firstLabelRow, + int labelColumn, + int firstTFRow, + int tfColumn, + int firstKeyBtnRow, + int firstKeyBtnColumn, + String[] labelTexts, + String[] tfKeys, + double tfHeight, + double btnMaxSize, + double btnMinSize, + double whiteSpaceHeigth, + double firstColumnWidth, + double paddingTopRigthBottomLeft, + double spacing) +
      Erzeugt eine neue AlphaNumGridView, die ihre Labels, Textfelder und die Tastaturmatrix nach den übergebenen Parametern + positioniert.
      +
      AlphaNumGridView​(int firstLabelRow, + int labelColumn, + int firstTFRow, + int tfColumn, + int firstKeyBtnRow, + int firstKeyBtnColumn, + String[] labelTexts, + String[] tfKeys, + double tfMaxHeight, + double tfMinHeight, + double btnMaxHeigth, + double btnMinHeigth, + double btnMaxWidth, + double btnMinWidth, + double whiteSpaceHeigth, + double firstColumnWidth, + double paddingTop, + double paddingRigth, + double paddingBottom, + double paddingLeft, + double btnSpacing, + double hgap, + double vgap) +
      Erzeugt eine neue AlphaNumGridView, die ihre Labels, Textfelder und die Tastaturmatrix nach den übergebenen Parametern + positioniert.
      +
      AlphaNumGridView​(String[] labelTexts, + String... tfKeys) +
      Erzeugt eine neue AlphaNumGridView, die ihre Labels in der Spalte 0 ab Zeile 0 und ihre Textfelder in der Spalte 1 + ab Zeile 0 positioniert.
      +
      +
    • +
    +
    + +
    + +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        tfKeys

        +
        public final String[] tfKeys
        +
        Array, das die Schlüsselwörter definiert, mit denen die Textfelder in der Map tfMap gespeichert werden
        +
      • +
      + + + +
        +
      • +

        clearBtnKey

        +
        public final String clearBtnKey
        +
        Schlüsselwort, mit dem der Löschen-Button (AC) in der Map btnMap gespeichert wird
        +
      • +
      + + + +
        +
      • +

        backspaceBtnKey

        +
        public final String backspaceBtnKey
        +
        Schlüsselwort, mit dem der Backspace-Button in der Map btnMap gespeichert wird
        +
      • +
      + + + +
        +
      • +

        signBtnKey

        +
        public final String signBtnKey
        +
        Schlüsselwort für den Button zum Vorzeichenwechsel
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        zeroBtnKey

        +
        public final String zeroBtnKey
        +
        Schlüsselwort für den Button, der die Null repräsentiert
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + + + + + +
        +
      • +

        keyboardBtnKey

        +
        public final String keyboardBtnKey
        +
        Schlüsselwort für den Button zum Umschalten des Tastaturlayouts
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        nextBtnKey

        +
        public final String nextBtnKey
        +
        Schlüsselwort für den Button zum Weiterscrollen durch die Tastatur
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        previousBtnKey

        +
        public final String previousBtnKey
        +
        Schlüsselwort für den Button zum Rückwärtsscrollen durch die Tastatur
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        alphaKeys

        +
        public final String[] alphaKeys
        +
        Array, das die Schlüsselwörter für die Buchstaben-Buttons definiert
        +
      • +
      + + + +
        +
      • +

        numKeys

        +
        public final String[] numKeys
        +
        Array, das die Schlüsselwörter für die Zahlen-Buttons definiert
        +
      • +
      + + + +
        +
      • +

        labelTexts

        +
        public final String[] labelTexts
        +
        Array, das die Beschriftungen für die Labels vor den Textfeldern definiert
        +
      • +
      + + + +
        +
      • +

        setTFColumnSpan

        +
        protected boolean setTFColumnSpan
        +
        true, wenn die Textfelder über die Anzahl der Spalten von der Tastatur verteilt werden sollen. + Subklassen können dieses Attribut vor dem Aufruf der Methode createScenegraph() auf false + setzen, um die Textfelder nur in eine einzige Spalte zu legen.
        +
      • +
      + + + +
        +
      • +

        useClearAndBackBtn

        +
        protected boolean useClearAndBackBtn
        +
        true, wenn die Buttons clearBtnKey und backspaceBtnKey in der Zeile + firstKeyBtnRow über der Tastaturmatrix in der GridPane positioniert werden sollen. + Subklassen können dieses Attribut vor dem Aufruf der Methode createScenegraph() auf false + setzen, um die Buttons nicht in der GridPane zu positionieren. +

        + Unabhängig von diesem Attribut werden die beiden Buttons vollständig initialisiert und in der Map + ViewBase.getButtonMap() eingefügt! +

        +
      • +
      + + + +
        +
      • +

        tfMaxHeightProperty

        +
        protected final javafx.beans.property.DoubleProperty tfMaxHeightProperty
        +
        Property für die maximale Höhe der Textfelder in dieser View
        +
      • +
      + + + +
        +
      • +

        tfMinHeightProperty

        +
        protected final javafx.beans.property.DoubleProperty tfMinHeightProperty
        +
        Property für die minimale Höhe der Textfelder in dieser View
        +
      • +
      + + + +
        +
      • +

        btnMaxHeigthProperty

        +
        protected final javafx.beans.property.DoubleProperty btnMaxHeigthProperty
        +
        Property für die maximale Höhe der Buttons in dieser View
        +
      • +
      + + + +
        +
      • +

        btnMinHeigthProperty

        +
        protected final javafx.beans.property.DoubleProperty btnMinHeigthProperty
        +
        Property für die minimale Höhe der Buttons in dieser View
        +
      • +
      + + + +
        +
      • +

        btnMaxWidthProperty

        +
        protected final javafx.beans.property.DoubleProperty btnMaxWidthProperty
        +
        Property für die maximale Breite der Buttons in dieser View
        +
      • +
      + + + +
        +
      • +

        btnMinWidthProperty

        +
        protected final javafx.beans.property.DoubleProperty btnMinWidthProperty
        +
        Property für die minimale Breite der Buttons in dieser View
        +
      • +
      + + + +
        +
      • +

        whiteSpaceHeigthProperty

        +
        protected final javafx.beans.property.DoubleProperty whiteSpaceHeigthProperty
        +
        Property für die Höhe der Zeilen zwischen den Textfeldern und Buttons
        +
      • +
      + + + +
        +
      • +

        firstColumnWidthProperty

        +
        protected final javafx.beans.property.DoubleProperty firstColumnWidthProperty
        +
        Property für die Breite der ersten Spalte mit den Labels enthält. Wird benötigt, um symmetrisch Weißraum auf der rechten Seite hinzuzufügen.
        +
      • +
      + + + +
        +
      • +

        paddingTopProperty

        +
        protected final javafx.beans.property.DoubleProperty paddingTopProperty
        +
        Property für den Abstand am oberen Rand der GridPane im Center
        +
      • +
      + + + +
        +
      • +

        paddingRigthProperty

        +
        protected final javafx.beans.property.DoubleProperty paddingRigthProperty
        +
        Property für den Abstand am rechten Rand der GridPane im Center
        +
      • +
      + + + +
        +
      • +

        paddingBottomProperty

        +
        protected final javafx.beans.property.DoubleProperty paddingBottomProperty
        +
        Property für den Abstand am unteren Rand der GridPane im Center
        +
      • +
      + + + +
        +
      • +

        paddingLeftProperty

        +
        protected final javafx.beans.property.DoubleProperty paddingLeftProperty
        +
        Property für den Abstand am linken Rand der GridPane im Center
        +
      • +
      + + + +
        +
      • +

        btnSpacingProperty

        +
        protected final javafx.beans.property.DoubleProperty btnSpacingProperty
        +
        Property für den Abstand der Buttons in der GridPane
        +
      • +
      + + + +
        +
      • +

        hgapProperty

        +
        protected final javafx.beans.property.DoubleProperty hgapProperty
        +
        Property für den horizontalen Abstand der GridPane im Center
        +
      • +
      + + + +
        +
      • +

        vgapProperty

        +
        protected final javafx.beans.property.DoubleProperty vgapProperty
        +
        Property für den vertikalen Abstand der GridPane im Center
        +
      • +
      + + + +
        +
      • +

        firstTFRow

        +
        protected final int firstTFRow
        +
        Konstante, die die erste Zeile der GridPane definiert, in der die Textfelder positioniert werden
        +
      • +
      + + + +
        +
      • +

        tfColumn

        +
        protected final int tfColumn
        +
        Konstante, die die Spalte der GridPane definiert, in der die Textfelder positioniert werden
        +
      • +
      + + + +
        +
      • +

        firstLabelRow

        +
        protected final int firstLabelRow
        +
        Konstante, die die erste Zeile der GridPane definiert, in der die Labels positioniert werden
        +
      • +
      + + + +
        +
      • +

        labelColumn

        +
        protected final int labelColumn
        +
        Konstante, die die Spalte der GridPane definiert, in der die Labels positioniert werden
        +
      • +
      + + + +
        +
      • +

        firstKeyBtnRow

        +
        protected final int firstKeyBtnRow
        +
        Konstante, die die erste Zeile der GridPane definiert, in der die Tastatur-Buttons positioniert werden
        +
      • +
      + + + +
        +
      • +

        firstKeyBtnColumn

        +
        protected final int firstKeyBtnColumn
        +
        Konstante, die die erste Spalte der GridPane definiert, in der die Tastatur-Buttons positioniert werden
        +
      • +
      + + + +
        +
      • +

        center

        +
        protected final javafx.scene.layout.GridPane center
        +
        Tabelle im Center von root, in der alle Controls positioniert werden
        +
      • +
      + + + +
        +
      • +

        alphaNum

        +
        protected final AlphaNumKeys alphaNum
        +
        Buttons, die als alpha-numerische Tastatur dienen, die für verschiedene Zahlensysteme ausgelegt ist.
        +
      • +
      + + + +
        +
      • +

        btnTexts

        +
        private final HashMap<String,​Object> btnTexts
        +
        Map, in der die angezeigten Texte oder Icons für die Buttons definiert werden.
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        AlphaNumGridView

        +
        public AlphaNumGridView​(int firstKeyBtnRow,
        +                        int firstKeyBtnColumn)
        +
        Erzeugt eine neue AlphaNumGridView, die keine Labels und keine Textfelder enthält. + Der Scenegraph wird nicht automatisch erstellt.
        +
        +
        Parameters:
        +
        firstKeyBtnRow - erste Zeile in der GridPane, in der die Tastatur-Buttons positioniert werden
        +
        firstKeyBtnColumn - erste Spalte in der GridPane, in der die Tastatur-Buttons positioniert werden
        +
        +
      • +
      + + + +
        +
      • +

        AlphaNumGridView

        +
        public AlphaNumGridView​(String[] labelTexts,
        +                        String... tfKeys)
        +
        Erzeugt eine neue AlphaNumGridView, die ihre Labels in der Spalte 0 ab Zeile 0 und ihre Textfelder in der Spalte 1 + ab Zeile 0 positioniert. Der Scenegraph wird nicht automatisch erstellt. + Die Labels in der Spalte 0 und die Textfelder in der Spalte 1 werden aus den Arrays labelTexts und + tfKeys generiert. Nach den Textfeldern wird automatisch eine Zeile frei gelassen, bevor die erste Zeile + mit den Buttons beginnt. Die Buttons beginnen in der Spalte 1.
        +
        +
        Parameters:
        +
        labelTexts - Beschriftungen für die Labels vor den Textfeldern
        +
        tfKeys - Schlüsselwörter, mit denen die generierten Textfelder in der Map tfMap gespeichert werden
        +
        +
      • +
      + + + +
        +
      • +

        AlphaNumGridView

        +
        public AlphaNumGridView​(int firstLabelRow,
        +                        int labelColumn,
        +                        int firstTFRow,
        +                        int tfColumn,
        +                        int firstKeyBtnRow,
        +                        int firstKeyBtnColumn,
        +                        String[] labelTexts,
        +                        String... tfKeys)
        +
        Erzeugt eine neue AlphaNumGridView, die ihre Labels, Textfelder und die Tastaturmatrix nach den übergebenen Parametern + positioniert. Der Scenegraph wird nicht automatisch erstellt. + Die Labels und die Textfelder werden aus den Arrays labelTexts und tfKeys generiert.
        +
        +
        Parameters:
        +
        firstLabelRow - erste Zeile in der GridPane, in der die Labels positioniert werden
        +
        labelColumn - Spalte in der GridPane, in der die Labels positioniert werden
        +
        firstTFRow - erste Zeile in der GridPane, in der die Textfelder positioniert werden
        +
        tfColumn - Spalte in der GridPane, in der die Textfelder positioniert werden
        +
        firstKeyBtnRow - erste Zeile in der GridPane, in der die Tastatur-Buttons positioniert werden
        +
        firstKeyBtnColumn - erste Spalte in der GridPane, in der die Tastatur-Buttons positioniert werden
        +
        labelTexts - Beschriftungen für die Labels vor den Textfeldern
        +
        tfKeys - Schlüsselwörter, mit denen die generierten Textfelder in der Map tfMap gespeichert werden
        +
        +
      • +
      + + + +
        +
      • +

        AlphaNumGridView

        +
        public AlphaNumGridView​(int firstLabelRow,
        +                        int labelColumn,
        +                        int firstTFRow,
        +                        int tfColumn,
        +                        int firstKeyBtnRow,
        +                        int firstKeyBtnColumn,
        +                        String[] labelTexts,
        +                        String[] tfKeys,
        +                        double tfHeight,
        +                        double btnMaxSize,
        +                        double btnMinSize,
        +                        double whiteSpaceHeigth,
        +                        double firstColumnWidth,
        +                        double paddingTopRigthBottomLeft,
        +                        double spacing)
        +
        Erzeugt eine neue AlphaNumGridView, die ihre Labels, Textfelder und die Tastaturmatrix nach den übergebenen Parametern + positioniert. Der Scenegraph wird nicht automatisch erstellt. + Die Labels und die Textfelder werden aus den Arrays labelTexts und tfKeys generiert.
        +
        +
        Parameters:
        +
        firstLabelRow - erste Zeile in der GridPane, in der die Labels positioniert werden
        +
        labelColumn - Spalte in der GridPane, in der die Labels positioniert werden
        +
        firstTFRow - erste Zeile in der GridPane, in der die Textfelder positioniert werden
        +
        tfColumn - Spalte in der GridPane, in der die Textfelder positioniert werden
        +
        firstKeyBtnRow - erste Zeile in der GridPane, in der die Tastatur-Buttons positioniert werden
        +
        firstKeyBtnColumn - erste Spalte in der GridPane, in der die Tastatur-Buttons positioniert werden
        +
        labelTexts - Beschriftungen für die Labels vor den Textfeldern
        +
        tfKeys - Schlüsselwörter, mit denen die generierten Textfelder in der Map tfMap gespeichert werden
        +
        tfHeight - Höhe, die für alle Textfelder in den Properties tfMaxHeightProperty und tfMinHeightProperty eingestellt wird
        +
        btnMaxSize - Größe, die für alle Buttons in den Properties btnMaxHeigthProperty und btnMaxWidthProperty eingestellt wird
        +
        btnMinSize - Größe, die für alle Buttons in den Properties btnMinHeigthProperty und btnMinWidthProperty eingestellt wird
        +
        whiteSpaceHeigth - Höhe, die für die Property whiteSpaceHeigthProperty eingestellt wird
        +
        firstColumnWidth - Breite, die für die Property firstColumnWidthProperty eingestellt wird
        +
        paddingTopRigthBottomLeft - Größe, die für die Properties paddingTopProperty, paddingRigthProperty, paddingBottomProperty und paddingLeftProperty eingestellt wird
        +
        spacing - Größe, die für die Properties btnSpacingProperty, hgapProperty und vgapProperty eingestellt wird
        +
        +
      • +
      + + + +
        +
      • +

        AlphaNumGridView

        +
        public AlphaNumGridView​(int firstLabelRow,
        +                        int labelColumn,
        +                        int firstTFRow,
        +                        int tfColumn,
        +                        int firstKeyBtnRow,
        +                        int firstKeyBtnColumn,
        +                        String[] labelTexts,
        +                        String[] tfKeys,
        +                        double tfMaxHeight,
        +                        double tfMinHeight,
        +                        double btnMaxHeigth,
        +                        double btnMinHeigth,
        +                        double btnMaxWidth,
        +                        double btnMinWidth,
        +                        double whiteSpaceHeigth,
        +                        double firstColumnWidth,
        +                        double paddingTop,
        +                        double paddingRigth,
        +                        double paddingBottom,
        +                        double paddingLeft,
        +                        double btnSpacing,
        +                        double hgap,
        +                        double vgap)
        +
        Erzeugt eine neue AlphaNumGridView, die ihre Labels, Textfelder und die Tastaturmatrix nach den übergebenen Parametern + positioniert. Der Scenegraph wird nicht automatisch erstellt. + Die Labels und die Textfelder werden aus den Arrays labelTexts und tfKeys generiert.
        +
        +
        Parameters:
        +
        firstLabelRow - erste Zeile in der GridPane, in der die Labels positioniert werden
        +
        labelColumn - Spalte in der GridPane, in der die Labels positioniert werden
        +
        firstTFRow - erste Zeile in der GridPane, in der die Textfelder positioniert werden
        +
        tfColumn - Spalte in der GridPane, in der die Textfelder positioniert werden
        +
        firstKeyBtnRow - erste Zeile in der GridPane, in der die Tastatur-Buttons positioniert werden
        +
        firstKeyBtnColumn - erste Spalte in der GridPane, in der die Tastatur-Buttons positioniert werden
        +
        labelTexts - Beschriftungen für die Labels vor den Textfeldern
        +
        tfKeys - Schlüsselwörter, mit denen die generierten Textfelder in der Map tfMap gespeichert werden
        +
        tfMaxHeight - Höhe, die für alle Textfelder in der Property tfMaxHeightProperty eingestellt wird
        +
        tfMinHeight - Höhe, die für alle Textfelder in der Property tfMinHeightProperty eingestellt wird
        +
        btnMaxHeigth - Höhe, die für alle Buttons in der Property btnMaxHeigthProperty eingestellt wird
        +
        btnMinHeigth - Höhe, die für alle Buttons in der Property btnMinHeigthProperty eingestellt wird
        +
        btnMaxWidth - Breite, die für alle Buttons in der Property btnMaxWidthProperty eingestellt wird
        +
        btnMinWidth - Breite, die für alle Buttons in der Property btnMinWidthProperty eingestellt wird
        +
        whiteSpaceHeigth - Höhe, die für die Property whiteSpaceHeigthProperty eingestellt wird
        +
        firstColumnWidth - Breite, die für die Property firstColumnWidthProperty eingestellt wird
        +
        paddingTop - Größe, die für die Property paddingTopProperty eingestellt wird
        +
        paddingRigth - Größe, die für die Property paddingRigthProperty eingestellt wird
        +
        paddingBottom - Größe, die für die Property paddingBottomProperty eingestellt wird
        +
        paddingLeft - Größe, die für die Property paddingLeftProperty eingestellt wird
        +
        btnSpacing - Größe, die für die Property btnSpacingProperty eingestellt wird
        +
        hgap - Größe, die für die Property hgapProperty eingestellt wird
        +
        vgap - Größe, die für die Property vgapProperty eingestellt wird
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getMaxHeigth

        +
        public double getMaxHeigth()
        +
        Gibt die maximale Höhe der View an
        +
        +
        Returns:
        +
        maximale Höhe der View
        +
        +
      • +
      + + + +
        +
      • +

        getMaxWidth

        +
        public double getMaxWidth()
        +
        Gibt die maximale Breite der View an
        +
        +
        Returns:
        +
        maximale Breite der View
        +
        +
      • +
      + + + +
        +
      • +

        getMinHeigth

        +
        public double getMinHeigth()
        +
        Gibt die minimale Höhe der View an
        +
        +
        Returns:
        +
        minimale Höhe der View
        +
        +
      • +
      + + + +
        +
      • +

        getMinWidth

        +
        public double getMinWidth()
        +
        Gibt die minimale Breite der View an
        +
        +
        Returns:
        +
        minimale Breite der View
        +
        +
      • +
      + + + +
        +
      • +

        createScenegraph

        +
        protected void createScenegraph()
        +
        Erstellt den Scenegraphen und fügt diesen dem Wurzelknoten hinzu. + Subklassen können diese Methode überschreiben, um nach der Erstellung des Scenegraphen in dieser + Klasse weitere Bedienelemente hinzuzufügen.
        +
        +
        Specified by:
        +
        createScenegraph in class ViewBase<javafx.scene.layout.BorderPane>
        +
        +
      • +
      + + + +
        +
      • +

        setRowConstraints

        +
        private void setRowConstraints()
        +
        Setzt alle RowConstraints für center. +

        + Es werden die Höhe für Zeilen mit Textfeldern, Buttons und Whitespace eingestellt. Zudem werden die Anordnung + und das Größenwachstum für die Zeilen der GridPane eingestellt. +

        +
      • +
      + + + +
        +
      • +

        addRowConstraint

        +
        protected void addRowConstraint​(int rowIndex,
        +                                AlphaNumGridView.ConstraintType type)
        +
        Erstellt neue RowConstraints für die Zeile mit dem Index rowIndex, die an den ConstraintType angepasst sind. + Der ConstraintType bestimmt, ob sich in der Zeile Textfelder, Buttons oder Weißraum befindet, um Valignment und Vgrow + anzupassen und die Properties maxHeightProperty und minHeightProperty mit den passenden Properties dieser AlphaNumGridView + bidirektional zu verbinden.
        +
        +
        Parameters:
        +
        rowIndex - Index der Zeile, für die neue RowConstraints hinzugefügt werden
        +
        type - Typ der Zeile
        +
        +
      • +
      + + + +
        +
      • +

        setColumnConstraints

        +
        private void setColumnConstraints()
        +
        Setzt alle ColumnConstraints für center. +

        + Es werden Breite der Spalten, sowie Anordnung und das Größenwachstum für alle Spalten der GridPane eingestellt. +

        +

        + Verbindet die Properties maxWidthProperty und minWidthProperty der ColumnConstraints bidirektional + mit der Property firstColumnWidthProperty für die erste Spalte und mit den Properties btnMaxWidthProperty + und btnMinWidthProperty für alle weitere Spalten. +

        +
      • +
      + + + +
        +
      • +

        addColumnConstraint

        +
        protected void addColumnConstraint​(int columnIndex,
        +                                   AlphaNumGridView.ConstraintType type)
        +
        Erstellt neue ColumnConstraints für die Spalte mit dem Index columnIndex, die an den ConstraintType angepasst sind. + Der ConstraintType bestimmt, ob es sich um die erste Spalte oder um eine Spalte mit Buttons handelt, um Hgrow + anzupassen und die Properties maxWidthProperty und minWidthProperty mit den passenden Properties dieser AlphaNumGridView + bidirektional zu verbinden.
        +
        +
        Parameters:
        +
        columnIndex - Index der Spalte, für die neue RowConstraints hinzugefügt werden
        +
        type - Typ der Spalte
        +
        +
      • +
      + + + +
        +
      • +

        createTextFields

        +
        private void createTextFields()
        +
        Erstellt alle Textfelder, für die es einen Schlüssel im Array tfKeys gibt. Jedes Textfeld wird + als Instanz von ValueField der GridPane hinzugefügt und die Constraints entsprechend gesetzt. + Alle Textfelder werden mit den Schlüsselwörtern aus tfKeys in der Textfeld-Map gespeichert.
        +
      • +
      + + + +
        +
      • +

        createLabels

        +
        private void createLabels()
        +
        Erstellt alle Labels aus den Strings im Array labelTexts und positioniert diese in der GridPane.
        +
      • +
      + + + +
        +
      • +

        createButtonMatrix

        +
        private void createButtonMatrix()
        +
        Erstellt alle benötigten Buttons und positioniert diese in der GridPane.
        +
        +
        See Also:
        +
        createButtons(), +AlphaNumKeys
        +
        +
      • +
      + + + +
        +
      • +

        createButtons

        +
        private ArrayDeque<javafx.scene.control.Button> createButtons()
        +
        Erzeugt die Buttons clearBtnKey und backspaceBtnKey und gibt diese in einer ArrayList zurück. + Alle Buttons werden auch in der Map für Buttons abgelegt. +

        + Alle Buttons werden als Instanz von UnfocusedButton angelegt. +

        +
        +
        Returns:
        +
        Liste der erstellten Buttons
        +
        +
      • +
      + + + +
        +
      • +

        formatButtons

        +
        private void formatButtons()
        +
      • +
      + + + +
        +
      • +

        bindProperties

        +
        private void bindProperties()
        +
        Bindet die Properties dieser AlphaNumGridView bidirektional an korrespondierende Properties der enthaltenen + Objekte. Setzt zudem auch Listener, um die Paddings der GridPane bei Änderung der Padding-Properties anzupassen.
        +
        +
        See Also:
        +
        updatePadding(ObservableValue, Number, Number)
        +
        +
      • +
      + + + +
        +
      • +

        updatePadding

        +
        private void updatePadding​(javafx.beans.value.ObservableValue<? extends Number> observable,
        +                           Number oldValue,
        +                           Number newValue)
        +
        Methode, die als Referenz für einen ChangeListener eingesetzt werden kann, um die Paddings der GridPane zu aktualisieren.
        +
        +
        Parameters:
        +
        observable - ObservableValue, der sich ändert
        +
        oldValue - alter Wert
        +
        newValue - neuer Wert
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/views/CalculatorView.html b/doc/0.1.4/de_private/bitchanger/gui/views/CalculatorView.html new file mode 100644 index 0000000..b838c38 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/views/CalculatorView.html @@ -0,0 +1,352 @@ + + + + + +CalculatorView + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class CalculatorView

+
+
+ +
+ +
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        CalculatorView

        +
        public CalculatorView()
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/views/Controllable.html b/doc/0.1.4/de_private/bitchanger/gui/views/Controllable.html new file mode 100644 index 0000000..8620c62 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/views/Controllable.html @@ -0,0 +1,328 @@ + + + + + +Controllable + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface Controllable

+
+
+
+
    +
  • +
    +
    All Known Implementing Classes:
    +
    AlphaNumGrid, ConverterView, ViewBase
    +
    +
    +
    public interface Controllable
    +
    Schnittstelle, die Methoden definiert, um eine View mit einem Controller zu verbinden
    +
    +
    Since:
    +
    Bitchanger 0.1.0
    +
    Version:
    +
    0.1.4
    +
    Author:
    +
    Tim Mühle
    +
    See Also:
    +
    Viewable, +ControllerBase
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Abstract Methods 
      Modifier and TypeMethodDescription
      HashMap<String,​javafx.scene.control.Button>getButtons() +
      Gibt eine Map mit allen Buttons der View zurück.
      +
      HashMap<String,​javafx.scene.Node>getNodes() +
      Gibt eine Map mit allen Elemente (Nodes) der View zurück, die keine Buttons oder Textfelder sind und im Controller benötigt werden.
      +
      HashMap<String,​javafx.scene.control.TextField>getTextFields() +
      Gibt eine Map mit allen Textfelder der View zurück.
      +
      +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getTextFields

        +
        HashMap<String,​javafx.scene.control.TextField> getTextFields()
        +
        Gibt eine Map mit allen Textfelder der View zurück. Jedes Textfeld ist einem eindeutigen Schlüsselwort zugeordnet, + mit dem es aus der Map herausgesucht werden kann. +

        + Jedes Schlüsselwort sollte einen Sinnvollen Bezug zum Einsatz des Textfeldes haben! +

        +
        +
        Returns:
        +
        Map, die alle Textfelder einer View enthält
        +
        +
      • +
      + + + +
        +
      • +

        getButtons

        +
        HashMap<String,​javafx.scene.control.Button> getButtons()
        +
        Gibt eine Map mit allen Buttons der View zurück. Jeder Button ist einem eindeutigen Schlüsselwort zugeordnet, + mit dem er aus der Map herausgesucht werden kann. +

        + Jedes Schlüsselwort sollte einen Sinnvollen Bezug zum Einsatz des Buttons haben! +

        +
        +
        Returns:
        +
        Map, die alle Buttons einer View enthält
        +
        +
      • +
      + + + +
        +
      • +

        getNodes

        +
        HashMap<String,​javafx.scene.Node> getNodes()
        +
        Gibt eine Map mit allen Elemente (Nodes) der View zurück, die keine Buttons oder Textfelder sind und im Controller benötigt werden. + Jedes Element ist einem eindeutigen Schlüsselwort zugeordnet, mit dem es aus der Map herausgesucht werden kann. +

        + Jedes Schlüsselwort sollte einen Sinnvollen Bezug zum Einsatz des Elements haben! +

        +
        +
        Returns:
        +
        Map, die alle Elemente einer View enthält, die keine Buttons oder Textfelder sind und im Controller benötigt werden
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/views/ConverterView.html b/doc/0.1.4/de_private/bitchanger/gui/views/ConverterView.html new file mode 100644 index 0000000..a5e8a7b --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/views/ConverterView.html @@ -0,0 +1,735 @@ + + + + + +ConverterView + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ConverterView

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Controllable, Viewable
    +
    +
    +
    public class ConverterView
    +extends AlphaNumGridView
    +
    View, die die Scene für die Umwandlung von Zahlensystemen enthält. +

    + Für diese View-Klasse wird der Controller ConverterController registriert. +

    +
    +
    Since:
    +
    Bitchanger 0.1.0
    +
    Version:
    +
    0.1.4
    +
    Author:
    +
    Tim Mühle
    +
    See Also:
    +
    ConverterController
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        TF_HEX_KEY

        +
        public static final String TF_HEX_KEY
        +
        Schlüsselwort, mit das Textfeld für die hexadezimale Darstellung in der Map tfMap gespeichert wird
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        TF_DEC_KEY

        +
        public static final String TF_DEC_KEY
        +
        Schlüsselwort, mit das Textfeld für die dezimale Darstellung in der Map tfMap gespeichert wird
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        TF_OCT_KEY

        +
        public static final String TF_OCT_KEY
        +
        Schlüsselwort, mit das Textfeld für die oktale Darstellung in der Map tfMap gespeichert wird
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        TF_BIN_KEY

        +
        public static final String TF_BIN_KEY
        +
        Schlüsselwort, mit das Textfeld für die binäre Darstellung in der Map tfMap gespeichert wird
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        TF_ANY_KEY

        +
        public static final String TF_ANY_KEY
        +
        Schlüsselwort, mit das Textfeld für die Darstellung zu einer wählbaren Basis in der Map tfMap gespeichert wird
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        TF_KEYS

        +
        public static final String[] TF_KEYS
        +
        Array, das die Schlüsselwörter definiert, mit denen die Textfelder in der Map tfMap gespeichert werden
        +
      • +
      + + + +
        +
      • +

        LABEL_TEXTS

        +
        private static final String[] LABEL_TEXTS
        +
        Array, das die Beschriftungen für die Labels vor den Textfeldern definiert
        +
      • +
      + + + +
        +
      • +

        tfHexKey

        +
        public final String tfHexKey
        +
        Schlüsselwort, mit das Textfeld für die hexadezimale Darstellung in der Map tfMap gespeichert wird
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        tfDecKey

        +
        public final String tfDecKey
        +
        Schlüsselwort, mit das Textfeld für die dezimale Darstellung in der Map tfMap gespeichert wird
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        tfOctKey

        +
        public final String tfOctKey
        +
        Schlüsselwort, mit das Textfeld für die oktale Darstellung in der Map tfMap gespeichert wird
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        tfBinKey

        +
        public final String tfBinKey
        +
        Schlüsselwort, mit das Textfeld für die binäre Darstellung in der Map tfMap gespeichert wird
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        tfAnyKey

        +
        public final String tfAnyKey
        +
        Schlüsselwort, mit das Textfeld für die Darstellung zu einer wählbaren Basis in der Map tfMap gespeichert wird
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        baseSpinnerKey

        +
        public final String baseSpinnerKey
        +
        Schlüsselwort, mit dem der Spinner für die beliebige Basis in der Map nodeMap gespeichert wird
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ConverterView

        +
        public ConverterView()
        +
        Erzeugt eine neue ConverterView mit vollständigem Scenegraphen und initialisiert die Funktionen + der Bedienelemente mit einem ConverterController.
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + + + + + +
        +
      • +

        generateMenuBar

        +
        public BasicMenuBar generateMenuBar()
        +
      • +
      + + + +
        +
      • +

        createScenegraph

        +
        protected void createScenegraph()
        +
        Erstellt den Scenegraphen und fügt diesen dem Wurzelknoten hinzu. + Subklassen können diese Methode überschreiben, um nach der Erstellung des Scenegraphen in dieser + Klasse weitere Bedienelemente hinzuzufügen.
        +
        +
        Overrides:
        +
        createScenegraph in class AlphaNumGridView
        +
        +
      • +
      + + + +
        +
      • +

        createAnyBase

        +
        private void createAnyBase()
        +
        Fügt einen BaseSpinner zur Auswahl einer beliebigen (gültigen) Basis zur GridPane + AlphaNumGridView.center hinzu und speichert diesen in der Map nodeMap.
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/views/IEEEView.html b/doc/0.1.4/de_private/bitchanger/gui/views/IEEEView.html new file mode 100644 index 0000000..c11a436 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/views/IEEEView.html @@ -0,0 +1,490 @@ + + + + + +IEEEView + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class IEEEView

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Controllable, Viewable
    +
    +
    +
    public class IEEEView
    +extends AlphaNumGridView
    +
    View, die die Scene für die Umwandlung zwischen dezimal Zahlen und der IEEE-Norm enthält. +

    + Für diese View-Klasse wird der Controller IEEEController registriert. +

    +
    +
    Since:
    +
    Bitchanger 0.1.4
    +
    Version:
    +
    0.1.4
    +
    Author:
    +
    Tim Mühle
    +
    See Also:
    +
    IEEEController
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        LABEL_TEXTS

        +
        private static final String[] LABEL_TEXTS
        +
        Array, das die Beschriftungen für die Labels vor den Textfeldern definiert
        +
      • +
      + + + +
        +
      • +

        TF_DEC_KEY

        +
        private static final String TF_DEC_KEY
        +
        Schlüsselwort, mit das Textfeld für die dezimale Darstellung in der Map tfMap gespeichert wird
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        TF_IEEE_KEY

        +
        private static final String TF_IEEE_KEY
        +
        Schlüsselwort, mit das Textfeld für die IEEE Darstellung in der Map tfMap gespeichert wird
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        tfDecKey

        +
        public final String tfDecKey
        +
        Schlüsselwort, mit das Textfeld für die dezimale Darstellung in der Map tfMap gespeichert wird
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      + + + +
        +
      • +

        tfIEEEKey

        +
        public final String tfIEEEKey
        +
        Schlüsselwort, mit das Textfeld für die IEEE Darstellung in der Map tfMap gespeichert wird
        +
        +
        See Also:
        +
        Constant Field Values
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        IEEEView

        +
        public IEEEView()
        +
        Erzeugt eine neue IEEEView mit vollständigem Scenegraphen und initialisiert die Funktionen + der Bedienelemente mit einem IEEEController.
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/views/ViewBase.html b/doc/0.1.4/de_private/bitchanger/gui/views/ViewBase.html new file mode 100644 index 0000000..a2ed05b --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/views/ViewBase.html @@ -0,0 +1,751 @@ + + + + + +ViewBase + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ViewBase<T extends javafx.scene.Parent>

+
+
+ +
+
    +
  • +
    +
    Type Parameters:
    +
    T - Typ des Wurzelknotens im Scenegraphen
    +
    +
    +
    All Implemented Interfaces:
    +
    Controllable, Viewable
    +
    +
    +
    Direct Known Subclasses:
    +
    AlphaNumGridView
    +
    +
    +
    public abstract class ViewBase<T extends javafx.scene.Parent>
    +extends Object
    +implements Viewable
    +
    Basis-Klasse für alle View-Klassen, die das Interface Viewable implementieren und mit einem + Controller eine Funktion erhalten. +

    + Die grundlegenden Methoden der Schnittstellen Viewable und Controllable sind bereits implementiert. + Die dazugehörigen Attribute sind mit protected geschützt, damit diese direkt in Unterklassen verwendet werden können. +

    +

    + Es werden abstrakte Methoden definiert, die zur Erstellung des Scenegraphens benötigt werden. +

    +
    +
    Since:
    +
    Bitchanger 0.1.0
    +
    Version:
    +
    0.1.4
    +
    Author:
    +
    Tim Mühle
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      private Map<String,​javafx.scene.control.Button>btnMap +
      Map, in die alle vom Controller benötigten Buttons der View mit + einem eindeutigen Schlüssel abgelegt werden
      +
      protected Controllercontroller +
      Controller, der die Funktion zu den Bedienelementen hinzufügt.
      +
      protected javafx.scene.control.MenuBarmenubar +
      MenuBar des Scenegraphen
      +
      private Map<String,​javafx.scene.Node>nodeMap +
      Map, in die alle vom Controller benötigten Elemente der View mit einem + eindeutigen Schlüssel abgelegt werden, die keine Buttons oder Textfelder sind
      +
      protected Troot +
      Wurzelknoten im Scenegraph
      +
      protected javafx.scene.Scenescene +
      Szene, die von der View repräsentiert wird
      +
      private Map<String,​javafx.scene.control.TextField>tfMap +
      Map, in die alle vom Controller benötigten Textfelder der View + mit einem eindeutigen Schlüssel abgelegt werden
      +
      + +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + + + +
      Constructors 
      ConstructorDescription
      ViewBase​(T root) +
      Erzeugt eine neue View, die eine neue Scene mit dem übergebenen Wurzelknoten root kapselt.
      +
      ViewBase​(T root, + boolean buildScenegraph) +
      Erzeugt eine neue View, die eine neue Scene mit dem übergebenen Wurzelknoten root kapselt.
      +
      +
    • +
    +
    + +
    + +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        scene

        +
        protected final javafx.scene.Scene scene
        +
        Szene, die von der View repräsentiert wird
        +
      • +
      + + + +
        +
      • +

        root

        +
        protected final T extends javafx.scene.Parent root
        +
        Wurzelknoten im Scenegraph
        +
      • +
      + + + +
        +
      • +

        controller

        +
        protected Controller controller
        +
        Controller, der die Funktion zu den Bedienelementen hinzufügt.
        +
      • +
      + + + +
        +
      • +

        menubar

        +
        protected javafx.scene.control.MenuBar menubar
        +
        MenuBar des Scenegraphen
        +
      • +
      + + + +
        +
      • +

        tfMap

        +
        private final Map<String,​javafx.scene.control.TextField> tfMap
        +
        Map, in die alle vom Controller benötigten Textfelder der View + mit einem eindeutigen Schlüssel abgelegt werden
        +
      • +
      + + + +
        +
      • +

        btnMap

        +
        private final Map<String,​javafx.scene.control.Button> btnMap
        +
        Map, in die alle vom Controller benötigten Buttons der View mit + einem eindeutigen Schlüssel abgelegt werden
        +
      • +
      + + + +
        +
      • +

        nodeMap

        +
        private final Map<String,​javafx.scene.Node> nodeMap
        +
        Map, in die alle vom Controller benötigten Elemente der View mit einem + eindeutigen Schlüssel abgelegt werden, die keine Buttons oder Textfelder sind
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Detail

      + + + + + +
        +
      • +

        ViewBase

        +
        public ViewBase​(T root)
        +
        Erzeugt eine neue View, die eine neue Scene mit dem übergebenen Wurzelknoten root kapselt. +

        + Nach der Initialisierung der Attribute werden nacheinander die Methoden init() und createScenegraph() + aufgerufen, um den Scenegraphen zu konstruieren und im Anschluss wird mit Hilfe eines Controllers die Funktion der Bedienelemente + hinzugefügt, wenn ein passender Controller registriert wurde. +

        +
        +
        Parameters:
        +
        root - Wurzelknoten des Scenegraphen
        +
        See Also:
        +
        init(), +createScenegraph(), +buildScenegraph()
        +
        +
      • +
      + + + + + +
        +
      • +

        ViewBase

        +
        public ViewBase​(T root,
        +                boolean buildScenegraph)
        +
        Erzeugt eine neue View, die eine neue Scene mit dem übergebenen Wurzelknoten root kapselt. +

        + Nach der Initialisierung der Attribute werden nacheinander die Methoden init() und ggf. buildScenegraph() + aufgerufen, um den Scenegraphen zu konstruieren und im Anschluss wird mit Hilfe eines Controllers die Funktion der Bedienelemente + hinzugefügt, wenn ein passender Controller registriert wurde. +

        +
        +
        Parameters:
        +
        root - Wurzelknoten des Scenegraphen
        +
        buildScenegraph - true, wenn der Scenegraph mit der Methode buildScenegraph() erstellt und ein Controller + erzeugt werden soll, sonst false
        +
        See Also:
        +
        buildScenegraph()
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getScene

        +
        public final javafx.scene.Scene getScene()
        +
        Gibt die repräsentierte Scene zurück
        +
        +
        Specified by:
        +
        getScene in interface Viewable
        +
        Returns:
        +
        von der View repräsentierte Scene
        +
        +
      • +
      + + + +
        +
      • +

        getTextFieldMap

        +
        public final Map<String,​javafx.scene.control.TextField> getTextFieldMap()
        +
        Gibt eine Map mit allen Textfelder der View zurück. Jedes Textfeld ist einem eindeutigen Schlüsselwort zugeordnet, + mit dem es aus der Map herausgesucht werden kann. +

        + Jedes Schlüsselwort sollte einen Sinnvollen Bezug zum Einsatz des Textfeldes haben! +

        +
        +
        Specified by:
        +
        getTextFieldMap in interface Controllable
        +
        Returns:
        +
        Map, die alle Textfelder einer View enthält
        +
        +
      • +
      + + + +
        +
      • +

        getButtonMap

        +
        public final Map<String,​javafx.scene.control.Button> getButtonMap()
        +
        Gibt eine Map mit allen Buttons der View zurück. Jeder Button ist einem eindeutigen Schlüsselwort zugeordnet, + mit dem er aus der Map herausgesucht werden kann. +

        + Jedes Schlüsselwort sollte einen Sinnvollen Bezug zum Einsatz des Buttons haben! +

        +
        +
        Specified by:
        +
        getButtonMap in interface Controllable
        +
        Returns:
        +
        Map, die alle Buttons einer View enthält
        +
        +
      • +
      + + + +
        +
      • +

        getNodeMap

        +
        public final Map<String,​javafx.scene.Node> getNodeMap()
        +
        Gibt eine Map mit allen Elemente (Nodes) der View zurück, die keine Buttons oder Textfelder sind und im Controller benötigt werden. + Jedes Element ist einem eindeutigen Schlüsselwort zugeordnet, mit dem es aus der Map herausgesucht werden kann. +

        + Jedes Schlüsselwort sollte einen Sinnvollen Bezug zum Einsatz des Elements haben! +

        +
        +
        Specified by:
        +
        getNodeMap in interface Controllable
        +
        Returns:
        +
        Map, die alle Elemente einer View enthält, die keine Buttons oder Textfelder sind und im Controller benötigt werden
        +
        +
      • +
      + + + + + +
        +
      • +

        setMenuBar

        +
        public <V extends javafx.scene.control.MenuBar> void setMenuBar​(V menubar)
        +
        Setzt die übergebene MenuBar in den Scenegraph der View. Eine eventuell vorhandene MenuBar + wird zuvor aus dem Scenegraph entfernt und ersetzt. Ist das Argument null wird nur + versucht die bereits vorhandene MenuBar aus dem Scenegraphen zu entfernen. + +

        + Wenn der Wurzelknoten dieser View eine Instanz von BorderPane ist, wird + die übergebene MenuBar in Top gelegt, ansonsten wird nur die alte MenuBar + entfernt. +

        +
        +
        Specified by:
        +
        setMenuBar in interface Viewable
        +
        Type Parameters:
        +
        V - Typ der MenuBar zur Laufzeit
        +
        Parameters:
        +
        menubar - MenuBar, die von dieser View verwendet werden soll. Darf null sein, um die aktuelle MenuBar zu entfernen
        +
        +
      • +
      + + + +
        +
      • +

        init

        +
        protected void init()
        +
        Initialisierungsmethode. + Diese Methode wird als erstes vom Konstruktor aufgerufen, nachdem die Attribute initialisiert wurden. +

        + Unterklassen können diese Methode überschreiben, um Attribute vor der Konstruktion des Scenegraphen zu initialisieren. +

        +

        + Die Implementierung der Methode in dieser Klasse hat keine Anweisungen. +

        +
      • +
      + + + + + + + +
        +
      • +

        createScenegraph

        +
        protected abstract void createScenegraph()
        +
        Methode, die den Scenegraphen konstruiert. Diese Methode wird aufgerufen, nachdem die init-Methode beendet wurde. +

        + In dieser Methode müssen alle Bedien- und Oberflächenelemente zum Scenegraphen hinzugefügt werden. Alle Elemente, die + auch im Controller benötigt werden, müssen zu der entsprechenden Map hinzugefügt werden: + btnMap, tfMap, nodeMap +

        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/views/Viewable.html b/doc/0.1.4/de_private/bitchanger/gui/views/Viewable.html new file mode 100644 index 0000000..ce396a9 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/views/Viewable.html @@ -0,0 +1,453 @@ + + + + + +Viewable + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface Viewable

+
+
+
+
    +
  • +
    +
    All Superinterfaces:
    +
    Controllable
    +
    +
    +
    All Known Implementing Classes:
    +
    AlphaNumGridView, CalculatorView, ConverterView, IEEEView, ViewBase
    +
    +
    +
    public interface Viewable
    +extends Controllable
    +
    Die Schnittstelle Viewable definiert die Basis für eine View. +

    + Eine View ist in einem JavaFX-Fenster (javafx.stage.Stage) darstellbar. Dazu kapselt die View eine Scene, die + in einer Stage präsentiert werden kann. +

    +

    + Der Scenegraph wird von der View konstruiert, dabei wird in der View nur das + Layout und keine Funktion festgelegt. +

    +

    + Jeder View kann ein Controller zugeordnet werden, um den Bedienelementen im Scenegraph eine Funktion zu geben. +

    +
    +
    Since:
    +
    Bitchanger 0.1.0
    +
    Version:
    +
    0.1.0
    +
    Author:
    +
    Tim Mühle
    +
    See Also:
    +
    Controllable, +Controller
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        generateMenuBar

        +
        default BasicMenuBar generateMenuBar()
        +
      • +
      + + + + + + + +
        +
      • +

        getScene

        +
        javafx.scene.Scene getScene()
        +
        Gibt die repräsentierte Scene zurück
        +
        +
        Returns:
        +
        von der View repräsentierte Scene
        +
        +
      • +
      + + + +
        +
      • +

        getMaxHeigth

        +
        double getMaxHeigth()
        +
        Gibt die maximale Höhe der View an
        +
        +
        Returns:
        +
        maximale Höhe der View
        +
        +
      • +
      + + + +
        +
      • +

        getMaxWidth

        +
        double getMaxWidth()
        +
        Gibt die maximale Breite der View an
        +
        +
        Returns:
        +
        maximale Breite der View
        +
        +
      • +
      + + + +
        +
      • +

        getMinHeigth

        +
        double getMinHeigth()
        +
        Gibt die minimale Höhe der View an
        +
        +
        Returns:
        +
        minimale Höhe der View
        +
        +
      • +
      + + + +
        +
      • +

        getMinWidth

        +
        double getMinWidth()
        +
        Gibt die minimale Breite der View an
        +
        +
        Returns:
        +
        minimale Breite der View
        +
        +
      • +
      + + + + + +
        +
      • +

        setMenuBar

        +
        <T extends javafx.scene.control.MenuBar> void setMenuBar​(T menubar)
        +
        Setzt die übergebene MenuBar in den Scenegraph der View. Eine eventuell vorhandene MenuBar + wird zuvor aus dem Scenegraph entfernt und ersetzt. Ist das Argument null wird nur + versucht die bereits vorhandene MenuBar aus dem Scenegraphen zu entfernen.
        +
        +
        Type Parameters:
        +
        T - Typ der MenuBar zur Laufzeit
        +
        Parameters:
        +
        menubar - MenuBar, die von dieser View verwendet werden soll. Darf null sein, um die aktuelle MenuBar zu entfernen
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/views/class-use/AlphaNumGridView.ConstraintType.html b/doc/0.1.4/de_private/bitchanger/gui/views/class-use/AlphaNumGridView.ConstraintType.html new file mode 100644 index 0000000..27ff182 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/views/class-use/AlphaNumGridView.ConstraintType.html @@ -0,0 +1,231 @@ + + + + + +Uses of Class bitchanger.gui.views.AlphaNumGridView.ConstraintType + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.gui.views.AlphaNumGridView.ConstraintType

+
+
+ +
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/views/class-use/AlphaNumGridView.html b/doc/0.1.4/de_private/bitchanger/gui/views/class-use/AlphaNumGridView.html new file mode 100644 index 0000000..47a0caa --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/views/class-use/AlphaNumGridView.html @@ -0,0 +1,209 @@ + + + + + +Uses of Class bitchanger.gui.views.AlphaNumGridView + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.gui.views.AlphaNumGridView

+
+
+ +
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/views/class-use/CalculatorView.html b/doc/0.1.4/de_private/bitchanger/gui/views/class-use/CalculatorView.html new file mode 100644 index 0000000..d90649b --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/views/class-use/CalculatorView.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.views.CalculatorView + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.gui.views.CalculatorView

+
+
No usage of bitchanger.gui.views.CalculatorView
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/views/class-use/Controllable.html b/doc/0.1.4/de_private/bitchanger/gui/views/class-use/Controllable.html new file mode 100644 index 0000000..1a11678 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/views/class-use/Controllable.html @@ -0,0 +1,259 @@ + + + + + +Uses of Interface bitchanger.gui.views.Controllable + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
bitchanger.gui.views.Controllable

+
+
+ +
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/views/class-use/ConverterView.html b/doc/0.1.4/de_private/bitchanger/gui/views/class-use/ConverterView.html new file mode 100644 index 0000000..a55af76 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/views/class-use/ConverterView.html @@ -0,0 +1,196 @@ + + + + + +Uses of Class bitchanger.gui.views.ConverterView + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.gui.views.ConverterView

+
+
+ +
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/views/class-use/IEEEView.html b/doc/0.1.4/de_private/bitchanger/gui/views/class-use/IEEEView.html new file mode 100644 index 0000000..994bb68 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/views/class-use/IEEEView.html @@ -0,0 +1,199 @@ + + + + + +Uses of Class bitchanger.gui.views.IEEEView + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.gui.views.IEEEView

+
+
+ +
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/views/class-use/ViewBase.html b/doc/0.1.4/de_private/bitchanger/gui/views/class-use/ViewBase.html new file mode 100644 index 0000000..babb455 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/views/class-use/ViewBase.html @@ -0,0 +1,217 @@ + + + + + +Uses of Class bitchanger.gui.views.ViewBase + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.gui.views.ViewBase

+
+
+
    +
  • + + + + + + + + + + + + +
    Packages that use ViewBase 
    PackageDescription
    bitchanger.gui.views +
    Bietet verschiedene Views, die auf einer graphischen Oberfläche präsentiert werden können
    +
    +
  • +
  • + +
  • +
+
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/views/class-use/Viewable.html b/doc/0.1.4/de_private/bitchanger/gui/views/class-use/Viewable.html new file mode 100644 index 0000000..5411b12 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/views/class-use/Viewable.html @@ -0,0 +1,405 @@ + + + + + +Uses of Interface bitchanger.gui.views.Viewable + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
bitchanger.gui.views.Viewable

+
+
+ +
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/views/package-summary.html b/doc/0.1.4/de_private/bitchanger/gui/views/package-summary.html new file mode 100644 index 0000000..cdd45ad --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/views/package-summary.html @@ -0,0 +1,232 @@ + + + + + +bitchanger.gui.views + + + + + + + + + + + + + + + +
+ +
+
+
+

Package bitchanger.gui.views

+
+
+
+ + +
Bietet verschiedene Views, die auf einer graphischen Oberfläche präsentiert werden können
+
+
    +
  • + + + + + + + + + + + + +
    Interface Summary 
    InterfaceDescription
    Viewable +
    Die Schnittstelle Viewable definiert die Basis für eine View.
    +
    +
  • +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    AlphaNumGridView +
    View, die die Basis Scene für eine Tabelle aus einer Spalte mit Labels, einer Spalte mit Textfeldern + und einer Tastaturmatrix aus AlphaNumKeys erstellt.
    +
    CalculatorView 
    ConverterView +
    View, die die Scene für die Umwandlung von Zahlensystemen enthält.
    +
    IEEEView +
    View, die die Scene für die Umwandlung zwischen dezimal Zahlen und der IEEE-Norm enthält.
    +
    ViewBase<T extends javafx.scene.Parent> +
    Basis-Klasse für alle View-Klassen, die das Interface Viewable implementieren und mit einem + Controller eine Funktion erhalten.
    +
    +
  • +
  • + + + + + + + + + + + + +
    Enum Summary 
    EnumDescription
    AlphaNumGridView.ConstraintType +
    Aufzählung von möglichen Typen für Constraints einer GridPane
    +
    +
  • +
+
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/views/package-tree.html b/doc/0.1.4/de_private/bitchanger/gui/views/package-tree.html new file mode 100644 index 0000000..68b7ddd --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/views/package-tree.html @@ -0,0 +1,198 @@ + + + + + +bitchanger.gui.views Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package bitchanger.gui.views

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+

Interface Hierarchy

+ +
+
+

Enum Hierarchy

+ +
+
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/gui/views/package-use.html b/doc/0.1.4/de_private/bitchanger/gui/views/package-use.html new file mode 100644 index 0000000..95ea6cc --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/gui/views/package-use.html @@ -0,0 +1,270 @@ + + + + + +Uses of Package bitchanger.gui.views + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
bitchanger.gui.views

+
+
+
    +
  • + + + + + + + + + + + + + + + + + + + + +
    Packages that use bitchanger.gui.views 
    PackageDescription
    bitchanger.gui.controller +
    Stellt Controller bereit, die den Views eine Funktion geben.
    +
    bitchanger.gui.views +
    Bietet verschiedene Views, die auf einer graphischen Oberfläche präsentiert werden können
    +
    bitchanger.main +
    Beinhaltet den Launcher mit der Main-Methode und die JavaFX Applikation zum starten der grafischen Oberfläche.
    +
    +
  • +
  • + + + + + + + + + + + + + + + + + + + + + + +
    Classes in bitchanger.gui.views used by bitchanger.gui.controller 
    ClassDescription
    ConverterView +
    View, die die Scene für die Umwandlung von Zahlensystemen enthält.
    +
    IEEEView +
    View, die die Scene für die Umwandlung zwischen dezimal Zahlen und der IEEE-Norm enthält.
    +
    Viewable +
    Die Schnittstelle Viewable definiert die Basis für eine View.
    +
    +
  • +
  • + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Classes in bitchanger.gui.views used by bitchanger.gui.views 
    ClassDescription
    AlphaNumGridView +
    View, die die Basis Scene für eine Tabelle aus einer Spalte mit Labels, einer Spalte mit Textfeldern + und einer Tastaturmatrix aus AlphaNumKeys erstellt.
    +
    AlphaNumGridView.ConstraintType +
    Aufzählung von möglichen Typen für Constraints einer GridPane
    +
    Viewable +
    Die Schnittstelle Viewable definiert die Basis für eine View.
    +
    ViewBase +
    Basis-Klasse für alle View-Klassen, die das Interface Viewable implementieren und mit einem + Controller eine Funktion erhalten.
    +
    +
  • +
  • + + + + + + + + + + + + + + +
    Classes in bitchanger.gui.views used by bitchanger.main 
    ClassDescription
    Viewable +
    Die Schnittstelle Viewable definiert die Basis für eine View.
    +
    +
  • +
+
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/main/BitchangerLauncher.html b/doc/0.1.4/de_private/bitchanger/main/BitchangerLauncher.html new file mode 100644 index 0000000..5f4d265 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/main/BitchangerLauncher.html @@ -0,0 +1,327 @@ + + + + + +BitchangerLauncher + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class BitchangerLauncher

+
+
+ +
+
    +
  • +
    +
    public class BitchangerLauncher
    +extends Object
    +
    Diese Klasse enthält die Main-Methode, die der Einstiegspunkt für die Applikation ist.
    +
    +
    Since:
    +
    Bitchanger 0.1.0
    +
    Version:
    +
    0.1.4
    +
    Author:
    +
    Tim Mühle
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        BitchangerLauncher

        +
        public BitchangerLauncher()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        main

        +
        public static void main​(String[] args)
        +
        Die Main Methode startet die PrimaryFXApp der Anwendung und wartet, bis das Anwendungsfenster geschlossen wurde. + Danach werden zuerst alle Einstellungen aus Preferences gespeichert, bevor das Programm beendet wird.
        +
        +
        Parameters:
        +
        args - Argumente, die beim Programmstart übergeben werden. Die Argumente werden vom Programm ignoriert.
        +
        See Also:
        +
        Preferences, +PrimaryFXApp.launchFXApplication(String[])
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/main/PrimaryFXApp.html b/doc/0.1.4/de_private/bitchanger/main/PrimaryFXApp.html new file mode 100644 index 0000000..a41b42e --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/main/PrimaryFXApp.html @@ -0,0 +1,760 @@ + + + + + +PrimaryFXApp + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class PrimaryFXApp

+
+
+
    +
  • java.lang.Object
  • +
  • +
      +
    • javafx.application.Application
    • +
    • +
        +
      • bitchanger.main.PrimaryFXApp
      • +
      +
    • +
    +
  • +
+
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    ControllableApplication
    +
    +
    +
    public class PrimaryFXApp
    +extends javafx.application.Application
    +implements ControllableApplication
    +
    Hauptfenster der Applikation mit javaFX +

    + Das Fenster bietet verschiedene Szenen zum Rechnen und Umwandeln von verschiedenen Zahlensystemen. + Über eine Menüleiste kann zwischen den Szenen gewechselt werden, sowie die Programm-Einstellungen geöffnet werden. +

    +
    +
    Since:
    +
    Bitchanger 0.1.0
    +
    Version:
    +
    0.1.4
    +
    Author:
    +
    Tim Mühle
    +
    See Also:
    +
    ConverterView, +ConverterController
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + + + + + + + + + + + + + + + + + +
        +
      • +

        currentViewProperty

        +
        public final javafx.beans.property.ObjectProperty<Viewable> currentViewProperty
        +
        Property für die aktuell im Fenster dargestellte View
        +
      • +
      + + + +
        +
      • +

        converterView

        +
        private Viewable converterView
        +
        View für die Umwandlung von Zahlensystemen
        +
      • +
      + + + +
        +
      • +

        ieeeView

        +
        private Viewable ieeeView
        +
        View für die Umwandlung mit der IEEE-Norm
        +
      • +
      + + + +
        +
      • +

        calculatorView

        +
        private Viewable calculatorView
        +
        View für das Rechnen mit Zahlensystemen
        +
      • +
      + + + +
        +
      • +

        primaryStage

        +
        private javafx.stage.Stage primaryStage
        +
        Hauptfenster der Anwendung
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        PrimaryFXApp

        +
        public PrimaryFXApp()
        +
        Erzeugt eine neue PrimaryFXApp für den Bitchanger
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        launchFXApplication

        +
        public static void launchFXApplication​(String[] args)
        +
        Startet die Anwendung und öffnet das Applikationsfenster.
        +
        +
        Parameters:
        +
        args - Argumente, die beim Programmstart übergeben werden. Die Argumente werden an die Methode launch weitergegeben und ansonsten ignoriert.
        +
        See Also:
        +
        Application.launch(String...)
        +
        +
      • +
      + + + +
        +
      • +

        getPrimaryStage

        +
        public javafx.stage.Stage getPrimaryStage()
        +
        Returns the main application window
        +
        +
        Specified by:
        +
        getPrimaryStage in interface ControllableApplication
        +
        Returns:
        +
        main application window
        +
        +
      • +
      + + + +
        +
      • +

        getViewable

        +
        public Viewable getViewable​(String key)
        +
        Gibt die mit dem String key verknüpfte View zurück
        +
        +
        Specified by:
        +
        getViewable in interface ControllableApplication
        +
        Parameters:
        +
        key - Schlüsselwort für die View
        +
        Returns:
        +
        View, die dem Schlüssel zugeordnet ist oder null, wenn keine passende View gefunden wird
        +
        +
      • +
      + + + +
        +
      • +

        getCurrentViewProperty

        +
        public javafx.beans.property.ObjectProperty<Viewable> getCurrentViewProperty()
        +
        Gibt die CurrentViewProperty zurück
        +
        +
        Specified by:
        +
        getCurrentViewProperty in interface ControllableApplication
        +
        Returns:
        +
        CurrentViewProperty
        +
        +
      • +
      + + + +
        +
      • +

        start

        +
        public void start​(javafx.stage.Stage primaryStage)
        +           throws Exception
        +
        Diese Methode erstellt den Inhalt für das PrimaryFXApp und öffnet dieses. +

        + - Es wird eine Menübar erstellt, die in jeder Szene die Steuerung des Fensters erlaubt. +

        +

        + - Die verschiedenen Views für die unterschiedlichen Oberflächen werden erzeugt. +

        +

        + - Die zuletzt geöffnete Szene wird geladen. +

        +

        + - Das in den Einstellungen ausgewählte Stylesheet wird geladen. +

        +

        + - Das Fenster wird formatiert und geöffnet. +

        + + Diese Methode wird erst beendet, wenn das PrimaryFXApp geschlossen wurde
        +
        +
        Specified by:
        +
        start in class javafx.application.Application
        +
        Throws:
        +
        Exception
        +
        See Also:
        +
        ConverterView
        +
        +
      • +
      + + + + + + + +
        +
      • +

        observeStageOnShowing

        +
        private void observeStageOnShowing()
        +
      • +
      + + + +
        +
      • +

        observeScene

        +
        private void observeScene()
        +
      • +
      + + + +
        +
      • +

        adjustViews

        +
        private void adjustViews​(Viewable... views)
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/main/class-use/BitchangerLauncher.html b/doc/0.1.4/de_private/bitchanger/main/class-use/BitchangerLauncher.html new file mode 100644 index 0000000..cc490f3 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/main/class-use/BitchangerLauncher.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.main.BitchangerLauncher + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.main.BitchangerLauncher

+
+
No usage of bitchanger.main.BitchangerLauncher
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/main/class-use/PrimaryFXApp.html b/doc/0.1.4/de_private/bitchanger/main/class-use/PrimaryFXApp.html new file mode 100644 index 0000000..348f520 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/main/class-use/PrimaryFXApp.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.main.PrimaryFXApp + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.main.PrimaryFXApp

+
+
No usage of bitchanger.main.PrimaryFXApp
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/main/package-summary.html b/doc/0.1.4/de_private/bitchanger/main/package-summary.html new file mode 100644 index 0000000..c0a4e69 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/main/package-summary.html @@ -0,0 +1,180 @@ + + + + + +bitchanger.main + + + + + + + + + + + + + + + +
+ +
+
+
+

Package bitchanger.main

+
+
+
+ + +
Beinhaltet den Launcher mit der Main-Methode und die JavaFX Applikation zum starten der grafischen Oberfläche.
+
+
    +
  • + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    BitchangerLauncher +
    Diese Klasse enthält die Main-Methode, die der Einstiegspunkt für die Applikation ist.
    +
    PrimaryFXApp +
    Hauptfenster der Applikation mit javaFX
    +
    +
  • +
+
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/main/package-tree.html b/doc/0.1.4/de_private/bitchanger/main/package-tree.html new file mode 100644 index 0000000..f0ae114 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/main/package-tree.html @@ -0,0 +1,169 @@ + + + + + +bitchanger.main Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package bitchanger.main

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/main/package-use.html b/doc/0.1.4/de_private/bitchanger/main/package-use.html new file mode 100644 index 0000000..cda5a59 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/main/package-use.html @@ -0,0 +1,149 @@ + + + + + +Uses of Package bitchanger.main + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
bitchanger.main

+
+
No usage of bitchanger.main
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/package-summary.html b/doc/0.1.4/de_private/bitchanger/package-summary.html new file mode 100644 index 0000000..5ef3ca2 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/package-summary.html @@ -0,0 +1,165 @@ + + + + + +bitchanger + + + + + + + + + + + + + + + +
+ +
+
+
+

Package bitchanger

+
+
+
+ + +
Bitchanger ist ein Programm zum umwandeln von diversen Zahlensystemen. Das Hauptmerkmal liegt bei der Umwandlung + von verschiedenen Zahlensystemen mit Nachkommastellen. Zusätzlich ist es möglich in unterschiedlichen Zahlensystemen + die Grundrechenarten und Bitoperationen durchzuführen. Auch die Umwandlung von Dezimalsystem zu IEEE-Norm (32-Bit oder + 16-Bit) ist möglich. +

+ Alle angebotenen Operationen werden über die graphische Benutzeroberfläche ausgeführt, die mit javaFX implementiert ist. +

+

+ Das Programm wird mit dem Buildtool Maven in eine JAR-Datei inklusive aller Abhängigkeiten gepackt und im Anschluss über + das jpackage Kommandozeilentool mit der Java-Runtime als Installer für Windows, macOS und Linux zur Auslieferung bereitgestellt. +

+
+
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/package-tree.html b/doc/0.1.4/de_private/bitchanger/package-tree.html new file mode 100644 index 0000000..66e7428 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/package-tree.html @@ -0,0 +1,152 @@ + + + + + +bitchanger Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package bitchanger

+Package Hierarchies: + +
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/package-use.html b/doc/0.1.4/de_private/bitchanger/package-use.html new file mode 100644 index 0000000..28d5242 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/package-use.html @@ -0,0 +1,149 @@ + + + + + +Uses of Package bitchanger + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
bitchanger

+
+
No usage of bitchanger
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/preferences/Comma.html b/doc/0.1.4/de_private/bitchanger/preferences/Comma.html new file mode 100644 index 0000000..484d598 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/preferences/Comma.html @@ -0,0 +1,516 @@ + + + + + +Comma + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Enum Comma

+
+
+ +
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Enum Constant Summary

      + + + + + + + + + + + + + + +
      Enum Constants 
      Enum ConstantDescription
      COMMA_DE +
      Konstante, die das deutsche Komma (',') repräsentiert
      +
      COMMA_EN +
      Konstante, die das englische Komma ('.') repräsentiert
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      private charcomma +
      Eingeschlossenes Kommazeichen
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + +
      Constructors 
      ModifierConstructorDescription
      private Comma​(char comma) +
      Kommazeichen im Konstruktor initialisieren
      +
      +
    • +
    +
    + +
    + +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Enum Constant Detail

      + + + +
        +
      • +

        COMMA_DE

        +
        public static final Comma COMMA_DE
        +
        Konstante, die das deutsche Komma (',') repräsentiert
        +
      • +
      + + + +
        +
      • +

        COMMA_EN

        +
        public static final Comma COMMA_EN
        +
        Konstante, die das englische Komma ('.') repräsentiert
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        comma

        +
        private char comma
        +
        Eingeschlossenes Kommazeichen
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Comma

        +
        private Comma​(char comma)
        +
        Kommazeichen im Konstruktor initialisieren
        +
        +
        Parameters:
        +
        comma - Kommazeichen
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        values

        +
        public static Comma[] values()
        +
        Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
        +for (Comma c : Comma.values())
        +    System.out.println(c);
        +
        +
        +
        Returns:
        +
        an array containing the constants of this enum type, in the order they are declared
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static Comma valueOf​(String name)
        +
        Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
        +
        +
        Parameters:
        +
        name - the name of the enum constant to be returned.
        +
        Returns:
        +
        the enum constant with the specified name
        +
        Throws:
        +
        IllegalArgumentException - if this enum type has no constant with the specified name
        +
        NullPointerException - if the argument is null
        +
        +
      • +
      + + + +
        +
      • +

        get

        +
        public char get()
        +
        Gibt das repräsentierte Kommazeichen zurück
        +
        +
        Returns:
        +
        das repräsentierte Kommazeichen
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/preferences/Preferences.html b/doc/0.1.4/de_private/bitchanger/preferences/Preferences.html new file mode 100644 index 0000000..81d4a07 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/preferences/Preferences.html @@ -0,0 +1,750 @@ + + + + + +Preferences + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class Preferences

+
+
+ +
+
    +
  • +
    +
    public class Preferences
    +extends Object
    +
    Preferences ist die globale Sammlung für alle möglichen Einstellungen, die am Bitchanger vorgenommen + werden können. Die Einstellungen können über die Methode getPrefs() aus allen anderen Klassen + abgefragt und geändert werden. + +

    + Zudem gibt es Methoden, mit denen alle Einstellungen dauerhaft abgespeichert und wieder geladen werden können. +

    +
    +
    Since:
    +
    Bitchanger 0.1.0
    +
    Version:
    +
    0.1.4
    +
    Author:
    +
    Tim Mühle
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        prefs

        +
        private static Preferences prefs
        +
        Konstante, die alle aktuellen Einstellungen enthält
        +
      • +
      + + + +
        +
      • +

        commaProperty

        +
        public final javafx.beans.property.ObjectProperty<Comma> commaProperty
        +
        Property für das Kommazeichen
        +
      • +
      + + + +
        +
      • +

        indicateFractionalPrecisionProperty

        +
        public final javafx.beans.property.BooleanProperty indicateFractionalPrecisionProperty
        +
        Property für die Anzeige von abgebrochenen Nachkommastellen
        +
      • +
      + + + +
        +
      • +

        readOnlyStylesheetProperty

        +
        public final javafx.beans.property.ReadOnlyStringProperty readOnlyStylesheetProperty
        +
        ReadOnlyProperty für das gewählte Stylesheet
        +
      • +
      + + + +
        +
      • +

        readOnlyStyleProperty

        +
        public final javafx.beans.property.ReadOnlyObjectProperty<Style> readOnlyStyleProperty
        +
        ReadOnlyProperty für das gewählte Stylesheet
        +
      • +
      + + + +
        +
      • +

        stylesheetProperty

        +
        private final javafx.beans.property.StringProperty stylesheetProperty
        +
        Property für das gewählte Stylesheet
        +
      • +
      + + + +
        +
      • +

        styleProperty

        +
        private final javafx.beans.property.ObjectProperty<Style> styleProperty
        +
        Property für den gewählten Style des Stylesheets
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Preferences

        +
        private Preferences()
        +
        Erstellt neue Preferences mit den Basiswerten. Diese Klasse ist in keiner anderen Klasse instanziierbar
        +
        +
        Since:
        +
        Bitchanger 0.1.4
        +
        +
      • +
      + + + +
        +
      • +

        Preferences

        +
        private Preferences​(File file)
        +
        Erstellt neue Preferences mit den Einstellungen, die in der übergebenen Datei gespeichert sind oder den Standardeinstellungen, + wenn die übergebene Datei nicht gefunden oder geladen werden konnte.
        +
        +
        Parameters:
        +
        file - Datei mit den Einstellungen, die geladen werden sollen, im XML-Format
        +
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getPrefs

        +
        public static Preferences getPrefs()
        +
        Gibt die aktuellen Einstellungen zurück
        +
        +
        Returns:
        +
        aktuelle Einstellungen
        +
        Since:
        +
        Bitchanger 0.1.4
        +
        +
      • +
      + + + + + + + + + + + + + + + +
        +
      • +

        getComma

        +
        public char getComma()
        +
        Gibt das eingestellte Kommazeichen zurück
        +
        +
        Returns:
        +
        eingestelltes Kommazeichen
        +
        Since:
        +
        Bitchanger 0.1.4
        +
        +
      • +
      + + + +
        +
      • +

        indicateFractionalPrecision

        +
        public boolean indicateFractionalPrecision()
        +
        Gibt den Wert der indicateFractionalPrecisionProperty zurück
        +
        +
        Returns:
        +
        true, wenn die Anzeige von abgebrochenen Nachkommastellen angeschaltet ist, sonst false
        +
        Since:
        +
        Bitchanger 0.1.4
        +
        +
      • +
      + + + +
        +
      • +

        setIndicateFractionalPrecision

        +
        public void setIndicateFractionalPrecision​(boolean b)
        +
        Schaltet die Anzeige von abgebrochenen Nachkommastellen ein und aus
        +
        +
        Parameters:
        +
        b - true zum Einschalten oder false zum Ausschalten
        +
        Since:
        +
        Bitchanger 0.1.4
        +
        +
      • +
      + + + +
        +
      • +

        setStylesheet

        +
        public boolean setStylesheet​(String path)
        +
        Searches for the resource with the given path and saves the location of the resource in the stylesheetProperty.
        +
        +
        Parameters:
        +
        path - Path to the Stylesheet
        +
        Returns:
        +
        true if the resource was found and saved in the property, false otherwise
        +
        Since:
        +
        Bitchanger 0.1.4
        +
        +
      • +
      + + + +
        +
      • +

        setStylesheet

        +
        public boolean setStylesheet​(Style style)
        +
        Saves the location of the Stylesheet with the given Style in the stylesheetProperty.
        +
        +
        Parameters:
        +
        style - Style of the Stylesheet to be set
        +
        Returns:
        +
        true if Style is not UNKNOWN if the Stylesheet was set, otherwise false
        +
        Since:
        +
        Bitchanger 0.1.4
        +
        +
      • +
      + + + +
        +
      • +

        load

        +
        private void load​(File file)
        +
        Lädt alle Einstellungen aus der übergebenen XML-Datei
        +
        +
        Parameters:
        +
        file - Datei, aus der die Einstellungen geladen werden sollen
        +
        Since:
        +
        Bitchanger 0.1.4
        +
        +
      • +
      + + + +
        +
      • +

        store

        +
        private void store​(File file)
        +
        Speichert alle Einstellungen in der übergebenen Datei im XML-Format
        +
        +
        Parameters:
        +
        file - Datei, in der die Einstellungen gespeichert werden. Der eventuelle Inhalt der Datei wird überschrieben!
        +
        Since:
        +
        Bitchanger 0.1.4
        +
        +
      • +
      + + + +
        +
      • +

        createXMLTree

        +
        private void createXMLTree​(Document doc,
        +                           Element xmlRoot)
        +
        Fügt alle Einstellungen dieser Preferences zu dem XML-Baum des Element xmlRoot hinzu
        +
        +
        Parameters:
        +
        doc - XML-Dokument, in dem xmlRoot gespeichert ist
        +
        xmlRoot - Wurzelelement des XML-Baumes, der erweitert wird
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/preferences/Style.html b/doc/0.1.4/de_private/bitchanger/preferences/Style.html new file mode 100644 index 0000000..b2ef3f0 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/preferences/Style.html @@ -0,0 +1,452 @@ + + + + + +Style + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Enum Style

+
+
+ +
+
    +
  • +
    +
    All Implemented Interfaces:
    +
    Serializable, Comparable<Style>
    +
    +
    +
    public enum Style
    +extends Enum<Style>
    +
    Aufzählung für verschiedene Stile, die als CSS Datei für javaFX verfügbar sind
    +
    +
    Since:
    +
    Bitchanger 0.1.4
    +
    Version:
    +
    0.1.4
    +
    Author:
    +
    Tim Mühle
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Enum Constant Detail

      + + + +
        +
      • +

        LIGHT

        +
        public static final Style LIGHT
        +
        Konstante für ein helles Layout
        +
      • +
      + + + +
        +
      • +

        DARK

        +
        public static final Style DARK
        +
        Konstante für ein dunkles Layout
        +
      • +
      + + + +
        +
      • +

        UNKNOWN

        +
        public static final Style UNKNOWN
        +
        Konstante für ein unbekanntes Layout
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Style

        +
        private Style()
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        values

        +
        public static Style[] values()
        +
        Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
        +for (Style c : Style.values())
        +    System.out.println(c);
        +
        +
        +
        Returns:
        +
        an array containing the constants of this enum type, in the order they are declared
        +
        +
      • +
      + + + +
        +
      • +

        valueOf

        +
        public static Style valueOf​(String name)
        +
        Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
        +
        +
        Parameters:
        +
        name - the name of the enum constant to be returned.
        +
        Returns:
        +
        the enum constant with the specified name
        +
        Throws:
        +
        IllegalArgumentException - if this enum type has no constant with the specified name
        +
        NullPointerException - if the argument is null
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/preferences/class-use/Comma.html b/doc/0.1.4/de_private/bitchanger/preferences/class-use/Comma.html new file mode 100644 index 0000000..18a37d0 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/preferences/class-use/Comma.html @@ -0,0 +1,254 @@ + + + + + +Uses of Class bitchanger.preferences.Comma + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.preferences.Comma

+
+
+
    +
  • + + + + + + + + + + + + + + + + +
    Packages that use Comma 
    PackageDescription
    bitchanger.gui.controls +
    Stellt angepasste Bedienelemente und Funktionen für die Benutzeroberfläche zur Verfügung
    +
    bitchanger.preferences +
    Mit den Klassen aus diesem Package können alle Komponenten auf globale Einstellungen zugreifen und diese verändern.
    +
    +
  • +
  • + +
  • +
+
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/preferences/class-use/Preferences.html b/doc/0.1.4/de_private/bitchanger/preferences/class-use/Preferences.html new file mode 100644 index 0000000..b351d8b --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/preferences/class-use/Preferences.html @@ -0,0 +1,214 @@ + + + + + +Uses of Class bitchanger.preferences.Preferences + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.preferences.Preferences

+
+
+ +
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/preferences/class-use/Style.html b/doc/0.1.4/de_private/bitchanger/preferences/class-use/Style.html new file mode 100644 index 0000000..d9f43ba --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/preferences/class-use/Style.html @@ -0,0 +1,279 @@ + + + + + +Uses of Class bitchanger.preferences.Style + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.preferences.Style

+
+
+
    +
  • + + + + + + + + + + + + + + + + +
    Packages that use Style 
    PackageDescription
    bitchanger.preferences +
    Mit den Klassen aus diesem Package können alle Komponenten auf globale Einstellungen zugreifen und diese verändern.
    +
    bitchanger.util +
    Enthält Klassen mit allgemeinen und klassenübergreifend benötigten Methoden.
    +
    +
  • +
  • +
      +
    • +
      + + +

      Uses of Style in bitchanger.preferences

      + + + + + + + + + + + + + + + + + + + +
      Fields in bitchanger.preferences with type parameters of type Style 
      Modifier and TypeFieldDescription
      javafx.beans.property.ReadOnlyObjectProperty<Style>Preferences.readOnlyStyleProperty +
      ReadOnlyProperty für das gewählte Stylesheet
      +
      private javafx.beans.property.ObjectProperty<Style>Preferences.styleProperty +
      Property für den gewählten Style des Stylesheets
      +
      + + + + + + + + + + + + + + + + + + + +
      Methods in bitchanger.preferences that return Style 
      Modifier and TypeMethodDescription
      static StyleStyle.valueOf​(String name) +
      Returns the enum constant of this type with the specified name.
      +
      static Style[]Style.values() +
      Returns an array containing the constants of this enum type, in +the order they are declared.
      +
      + + + + + + + + + + + + + + +
      Methods in bitchanger.preferences with parameters of type Style 
      Modifier and TypeMethodDescription
      booleanPreferences.setStylesheet​(Style style) +
      Saves the location of the Stylesheet with the given Style in the Preferences.stylesheetProperty.
      +
      +
      +
    • +
    • +
      + + +

      Uses of Style in bitchanger.util

      + + + + + + + + + + + + + + +
      Methods in bitchanger.util with parameters of type Style 
      Modifier and TypeMethodDescription
      private static voidIconFactory.setSVGStyle​(SVGIcon icon, + javafx.scene.shape.SVGPath lightSVG, + javafx.scene.shape.SVGPath darkSVG, + Style style) +
      Setzt den SVG-Pfad des SVGIcon icon auf den Pfad von lightSVG oder darkSVG, basierend auf dem Style style.
      +
      +
      +
    • +
    +
  • +
+
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/preferences/package-summary.html b/doc/0.1.4/de_private/bitchanger/preferences/package-summary.html new file mode 100644 index 0000000..1280171 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/preferences/package-summary.html @@ -0,0 +1,200 @@ + + + + + +bitchanger.preferences + + + + + + + + + + + + + + + +
+ +
+
+
+

Package bitchanger.preferences

+
+
+
+ + +
Mit den Klassen aus diesem Package können alle Komponenten auf globale Einstellungen zugreifen und diese verändern. + Die Einstellungen betreffen die Optik und auch das Verhalten des Programms und können dauerhaft gespeichert werden, + um das Programm an eigene Bedürfnisse anzupassen. Zudem sind die Standardeinstellungen wiederherstellbar.
+
+
    +
  • + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    Preferences +
    Preferences ist die globale Sammlung für alle möglichen Einstellungen, die am Bitchanger vorgenommen + werden können.
    +
    +
  • +
  • + + + + + + + + + + + + + + + + +
    Enum Summary 
    EnumDescription
    Comma +
    Aufzählung der Wrapper-Klasse Comma, die das Zeichen für ein Komma repräsentiert.
    +
    Style +
    Aufzählung für verschiedene Stile, die als CSS Datei für javaFX verfügbar sind
    +
    +
  • +
+
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/preferences/package-tree.html b/doc/0.1.4/de_private/bitchanger/preferences/package-tree.html new file mode 100644 index 0000000..8105af4 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/preferences/package-tree.html @@ -0,0 +1,179 @@ + + + + + +bitchanger.preferences Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package bitchanger.preferences

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+

Enum Hierarchy

+ +
+
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/preferences/package-use.html b/doc/0.1.4/de_private/bitchanger/preferences/package-use.html new file mode 100644 index 0000000..ea3fbb3 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/preferences/package-use.html @@ -0,0 +1,251 @@ + + + + + +Uses of Package bitchanger.preferences + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
bitchanger.preferences

+
+
+
    +
  • + + + + + + + + + + + + + + + + + + + + +
    Packages that use bitchanger.preferences 
    PackageDescription
    bitchanger.gui.controls +
    Stellt angepasste Bedienelemente und Funktionen für die Benutzeroberfläche zur Verfügung
    +
    bitchanger.preferences +
    Mit den Klassen aus diesem Package können alle Komponenten auf globale Einstellungen zugreifen und diese verändern.
    +
    bitchanger.util +
    Enthält Klassen mit allgemeinen und klassenübergreifend benötigten Methoden.
    +
    +
  • +
  • + + + + + + + + + + + + + + +
    Classes in bitchanger.preferences used by bitchanger.gui.controls 
    ClassDescription
    Comma +
    Aufzählung der Wrapper-Klasse Comma, die das Zeichen für ein Komma repräsentiert.
    +
    +
  • +
  • + + + + + + + + + + + + + + + + + + + + + + +
    Classes in bitchanger.preferences used by bitchanger.preferences 
    ClassDescription
    Comma +
    Aufzählung der Wrapper-Klasse Comma, die das Zeichen für ein Komma repräsentiert.
    +
    Preferences +
    Preferences ist die globale Sammlung für alle möglichen Einstellungen, die am Bitchanger vorgenommen + werden können.
    +
    Style +
    Aufzählung für verschiedene Stile, die als CSS Datei für javaFX verfügbar sind
    +
    +
  • +
  • + + + + + + + + + + + + + + +
    Classes in bitchanger.preferences used by bitchanger.util 
    ClassDescription
    Style +
    Aufzählung für verschiedene Stile, die als CSS Datei für javaFX verfügbar sind
    +
    +
  • +
+
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/util/ArrayUtils.html b/doc/0.1.4/de_private/bitchanger/util/ArrayUtils.html new file mode 100644 index 0000000..d4f6e92 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/util/ArrayUtils.html @@ -0,0 +1,335 @@ + + + + + +ArrayUtils + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class ArrayUtils

+
+
+ +
+
    +
  • +
    +
    public class ArrayUtils
    +extends Object
    +
    Klasse, die Werkzeug-Methoden für Arrays enthält.
    +
    +
    Since:
    +
    Bitchanger 0.1.4
    +
    Version:
    +
    0.1.4
    +
    Author:
    +
    Tim Mühle
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        ArrayUtils

        +
        private ArrayUtils()
        +
        Diese Klasse ist nicht instanziierbar
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + + + +
        +
      • +

        arrayOf

        +
        @SafeVarargs
        +public static <T> T[] arrayOf​(T... values)
        +
        Wandelt eine Aufzählung von Objekten in ein Array um und gibt dieses zurück.
        +
        +
        Type Parameters:
        +
        T - Typ der Objekte und des zurückgegebenen Arrays
        +
        Parameters:
        +
        values - Objekte, aus denen das Array gebildet wird
        +
        Returns:
        +
        Array aus den übergebenen Objekten
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/util/FXUtils.html b/doc/0.1.4/de_private/bitchanger/util/FXUtils.html new file mode 100644 index 0000000..77e4245 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/util/FXUtils.html @@ -0,0 +1,547 @@ + + + + + +FXUtils + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class FXUtils

+
+
+ +
+
    +
  • +
    +
    public class FXUtils
    +extends Object
    +
    Utility-Klasse zur allgemeinen Verarbeitung von Objekten, die zur Oberfläche gehören.
    +
    +
    Since:
    +
    Bitchanger 0.1.4
    +
    Version:
    +
    0.1.4
    +
    Author:
    +
    Tim Mühle
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + +
      Constructors 
      ModifierConstructorDescription
      private FXUtils() +
      Diese Klasse ist nicht instanziierbar
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Static Methods Concrete Methods 
      Modifier and TypeMethodDescription
      static javafx.scene.shape.SVGPathloadSVG​(File svgFile) +
      Lädt ein Icon im svg-Format aus der übergebenen Datei und erstellt aus der Datei ein SVGPath Objekt, + das dem Scenegraph in javaFX hinzugefügt werden kann.
      +
      static <T extends javafx.scene.Node>
      void
      setGridConstraints​(int firstColumn, + int firstRow, + int columnCount, + int columnOffset, + Queue<T> controls) +
      Setzt die Constrains der Nodes in einer Schlange, um diese in einer GridPane zu positionieren.
      +
      static <T extends javafx.scene.Node>
      void
      setGridConstraints​(int firstColumn, + int firstRow, + int columnCount, + int columnOffset, + Queue<T> controls, + TriConsumer<javafx.scene.Node,​Integer,​Integer> consumer) +
      Arbeitet Nodes in einer Schlange als Tabelle ab.
      +
      static voidsetIconOrText​(javafx.scene.control.Labeled labeled, + SVGIcon icon) 
      static voidsetIconOrText​(javafx.scene.control.Labeled labeled, + SVGIcon icon, + String alternativeText) 
      static voidsetIconOrText​(javafx.scene.control.MenuItem menuItem, + SVGIcon icon) 
      static voidsetIconOrText​(javafx.scene.control.MenuItem menuItem, + SVGIcon icon, + String alternativeText) 
      static voidsetMaxSizes​(Iterable<? extends javafx.scene.Node> nodes, + double maxSize) +
      Setzt die maximale Größe aller Controls in einem Iterable auf den Wert maxSize.
      +
      static voidsetMaxSizes​(Iterable<? extends javafx.scene.Node> nodes, + double maxWidth, + double maxHeight) +
      Setzt die maximale Breite aller Controls in einem Iterable auf den Wert maxWidth und + die maximale Höhe auf den Wert maxHeight.
      +
      + +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        FXUtils

        +
        private FXUtils()
        +
        Diese Klasse ist nicht instanziierbar
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        setGridConstraints

        +
        public static <T extends javafx.scene.Node> void setGridConstraints​(int firstColumn,
        +                                                                    int firstRow,
        +                                                                    int columnCount,
        +                                                                    int columnOffset,
        +                                                                    Queue<T> controls)
        +
        Setzt die Constrains der Nodes in einer Schlange, um diese in einer GridPane zu positionieren. +

        + Die erste Node wird an die Position gesetzt, die über die Parameter und firstColumn, + firstRow und columnOffset definiert ist. Die Matrix wird auf die Anzahl von + Spalten verteilt, die mit columnCount festgelegt ist und die Zeile automatisch umgebrochen. + Die Constraints werden solange gesetzt, wie es Elemente in der Queue gibt. +

        +

        + Die Nodes dürfen auch mehr als eine Spalte in der GridPane einnehmen. Die Spalte der darauffolgenden + Node wird entsprechend inkrementiert, um keine Elemente zu überlagern. +

        +
        +
        Type Parameters:
        +
        T - Der Typ, den die Elemente in der Schlange zur Laufzeit haben
        +
        Parameters:
        +
        firstColumn - Erste Spalte der resultierenden Tabelle
        +
        firstRow - Erste Zeile der resultierenden Tabelle
        +
        columnCount - Anzahl der Spalten in der Tabelle
        +
        columnOffset - Verschiebung der ersten Spalte (wird nur in der ersten Zeile angewendet)
        +
        controls - Elemente in der Tabelle, mit der Reihenfolge von oben links nach unten rechts (Spalten werden vor den Zeilen inkrementiert)
        +
        See Also:
        +
        setGridConstraints(int, int, int, int, Queue, TriConsumer)
        +
        +
      • +
      + + + +
        +
      • +

        setGridConstraints

        +
        public static <T extends javafx.scene.Node> void setGridConstraints​(int firstColumn,
        +                                                                    int firstRow,
        +                                                                    int columnCount,
        +                                                                    int columnOffset,
        +                                                                    Queue<T> controls,
        +                                                                    TriConsumer<javafx.scene.Node,​Integer,​Integer> consumer)
        +
        Arbeitet Nodes in einer Schlange als Tabelle ab. +

        + Für jede Node in der Schlange wir die Spalte inkrementiert. Wird die maximale Spaltenanzahl überschritten, + wird die Zeile inkrementiert und die Spalte auf den Startwert gesetzt. Die Node wird mit den Werten der Zeile + und Spalte an den TriConsumer übergeben, um diese Daten zu verarbeiten. +

        +

        + Die Nodes dürfen auch mehr als eine Spalte in der GridPane einnehmen. Die Spalte der darauffolgenden + Node wird entsprechend inkrementiert, um keine Elemente zu überlagern. +

        +
        +
        Type Parameters:
        +
        T - Der Typ, den die Elemente in der Schlange zur Laufzeit haben
        +
        Parameters:
        +
        firstColumn - Erste Spalte der resultierenden Tabelle
        +
        firstRow - Erste Zeile der resultierenden Tabelle
        +
        columnCount - Anzahl der Spalten in der Tabelle
        +
        columnOffset - Verschiebung der ersten Spalte (wird nur in der ersten Zeile angewendet)
        +
        controls - Elemente in der Tabelle, mit der Reihenfolge von oben links nach unten rechts (Spalten werden vor den Zeilen inkrementiert)
        +
        consumer - TriConsumer, der die Daten verarbeitet
        +
        +
      • +
      + + + +
        +
      • +

        setMaxSizes

        +
        public static void setMaxSizes​(Iterable<? extends javafx.scene.Node> nodes,
        +                               double maxSize)
        +
        Setzt die maximale Größe aller Controls in einem Iterable auf den Wert maxSize.
        +
        +
        Parameters:
        +
        nodes - Sammlung aller anzupassenden Controls, die auch in Layout-Containern liegen dürfen
        +
        maxSize - Maximale Größe der Controls
        +
        +
      • +
      + + + +
        +
      • +

        setMaxSizes

        +
        public static void setMaxSizes​(Iterable<? extends javafx.scene.Node> nodes,
        +                               double maxWidth,
        +                               double maxHeight)
        +
        Setzt die maximale Breite aller Controls in einem Iterable auf den Wert maxWidth und + die maximale Höhe auf den Wert maxHeight.
        +
        +
        Parameters:
        +
        nodes - Sammlung aller anzupassenden Controls, die auch in Layout-Containern liegen dürfen
        +
        maxWidth - maximale Breite aller Controls
        +
        maxHeight - maximale Höhe aller Controls
        +
        +
      • +
      + + + +
        +
      • +

        loadSVG

        +
        public static javafx.scene.shape.SVGPath loadSVG​(File svgFile)
        +
        Lädt ein Icon im svg-Format aus der übergebenen Datei und erstellt aus der Datei ein SVGPath Objekt, + das dem Scenegraph in javaFX hinzugefügt werden kann.
        +
        +
        Parameters:
        +
        svgFile - Icon als svg-Datei
        +
        Returns:
        +
        Eingelesenes Icon als SVGPath oder null, wenn die Datei nicht eingelesen werden konnte
        +
        +
      • +
      + + + +
        +
      • +

        setIconOrText

        +
        public static void setIconOrText​(javafx.scene.control.MenuItem menuItem,
        +                                 SVGIcon icon,
        +                                 String alternativeText)
        +
      • +
      + + + +
        +
      • +

        setIconOrText

        +
        public static void setIconOrText​(javafx.scene.control.MenuItem menuItem,
        +                                 SVGIcon icon)
        +
      • +
      + + + +
        +
      • +

        setIconOrText

        +
        public static void setIconOrText​(javafx.scene.control.Labeled labeled,
        +                                 SVGIcon icon,
        +                                 String alternativeText)
        +
      • +
      + + + +
        +
      • +

        setIconOrText

        +
        public static void setIconOrText​(javafx.scene.control.Labeled labeled,
        +                                 SVGIcon icon)
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/util/IconFactory.html b/doc/0.1.4/de_private/bitchanger/util/IconFactory.html new file mode 100644 index 0000000..ca99c95 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/util/IconFactory.html @@ -0,0 +1,379 @@ + + + + + +IconFactory + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class IconFactory

+
+
+ +
+
    +
  • +
    +
    public class IconFactory
    +extends Object
    +
    Factory Klasse für das Erstellen von SVGIcons
    +
    +
    Since:
    +
    Bitchanger 0.1.4
    +
    Version:
    +
    0.1.4
    +
    Author:
    +
    Tim Mühle
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        IconFactory

        +
        private IconFactory()
        +
        Diese Klasse ist nicht instanziierbar
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        styleBindIcon

        +
        public static SVGIcon styleBindIcon​(File lightIconFile,
        +                                    File darkIconFile)
        +
        Erzeugt ein neues SVGIcon, das je nach eingestelltem Style in Preferences.readOnlyStyleProperty der svg-Datei + lightIconFile oder darkIconFile entspricht und sich automatisch bei Änderung des Styles anpasst.
        +
        +
        Parameters:
        +
        lightIconFile - svg-Datei für den Style Style.LIGHT
        +
        darkIconFile - svg-Datei für den Style Style.DARK
        +
        Returns:
        +
        neues SVGIcon, generiert aus den Files lightIconFile und darkIconFile oder null, wenn die Dateien nicht gelesen werden konnten
        +
        +
      • +
      + + + +
        +
      • +

        setSVGStyle

        +
        private static void setSVGStyle​(SVGIcon icon,
        +                                javafx.scene.shape.SVGPath lightSVG,
        +                                javafx.scene.shape.SVGPath darkSVG,
        +                                Style style)
        +
        Setzt den SVG-Pfad des SVGIcon icon auf den Pfad von lightSVG oder darkSVG, basierend auf dem Style style.
        +
        +
        Parameters:
        +
        icon - SVGIcon, dessen SVG-Pfad neu gesetzt wird
        +
        lightSVG - SVGPath für den Fall Style.LIGHT
        +
        darkSVG - SVGPath für den Fall Style.DARK
        +
        style - Style, der über den SCG-Pfad entscheidet
        +
        +
      • +
      + + + +
        +
      • +

        ofSVGFile

        +
        public static SVGIcon ofSVGFile​(File file)
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/util/Resources.html b/doc/0.1.4/de_private/bitchanger/util/Resources.html new file mode 100644 index 0000000..0fd21f7 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/util/Resources.html @@ -0,0 +1,2340 @@ + + + + + +Resources + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Class Resources

+
+
+ +
+
    +
  • +
    +
    public class Resources
    +extends Object
    +
    Enthält alle benötigten Ressourcen, wie Pfade zu den CSS Dateien oder den Icons
    +
    +
    Since:
    +
    Bitchanger 0.1.4
    +
    Version:
    +
    0.1.4
    +
    Author:
    +
    Tim Mühle
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Fields 
      Modifier and TypeFieldDescription
      static FileABC_BRICKS_FILLED_ICON +
      Speicherort des Icons mit ABC-Würfeln, gefüllt oder null, wenn das Icon nicht gefunden wurde
      +
      static FileABC_BRICKS_ICON +
      Speicherort des Icons mit ABC-Würfeln oder null, wenn das Icon nicht gefunden wurde
      +
      static FileANGEL_DOWN_CIRCLE_THIN_ICON +
      Speicherort des Icons eines nach unten zeigenden Pfeils in einem Kreis im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
      +
      static FileANGEL_DOWN_THIN_ICON +
      Speicherort des Icons eines nach unten zeigenden Pfeils im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
      +
      static FileANGEL_LEFT_CIRCLE_THIN_ICON +
      Speicherort des Icons eines nach links zeigenden Pfeils in einem Kreis im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
      +
      static FileANGEL_LEFT_THIN_ICON +
      Speicherort des Icons eines nach links zeigenden Pfeils im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
      +
      static FileANGEL_RIGHT_CIRCLE_THIN_ICON +
      Speicherort des Icons eines nach rechts zeigenden Pfeils in einem Kreis im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
      +
      static FileANGEL_RIGHT_THIN_ICON +
      Speicherort des Icons eines nach rechts zeigenden Pfeils im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
      +
      static FileANGEL_UP_CIRCLE_THIN_ICON +
      Speicherort des Icons eines nach oben zeigenden Pfeils in einem Kreis im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
      +
      static FileANGEL_UP_THIN_ICON +
      Speicherort des Icons eines nach oben zeigenden Pfeils im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
      +
      static FileARROW_DOWN_CIRCLE_FILLED_ICON +
      Speicherort des Icons eines nach unten zeigenden Pfeils in einem gefüllten Kreis oder null, wenn das Icon nicht gefunden wurde
      +
      static FileARROW_DOWN_ICON +
      Speicherort des Icons eines nach unten zeigenden Pfeils oder null, wenn das Icon nicht gefunden wurde
      +
      static FileARROW_LEFT_CIRCLE_FILLED_ICON +
      Speicherort des Icons eines nach links zeigenden Pfeils in einem gefüllten Kreis oder null, wenn das Icon nicht gefunden wurde
      +
      static FileARROW_LEFT_ICON +
      Speicherort des Icons eines nach links zeigenden Pfeils oder null, wenn das Icon nicht gefunden wurde
      +
      static FileARROW_RIGHT_CIRCLE_FILLED_ICON +
      Speicherort des Icons eines nach rechts zeigenden Pfeils in einem gefüllten Kreis oder null, wenn das Icon nicht gefunden wurde
      +
      static FileARROW_RIGHT_ICON +
      Speicherort des Icons eines nach rechts zeigenden Pfeils oder null, wenn das Icon nicht gefunden wurde
      +
      static FileARROW_UP_CIRCLE_FILLED_ICON +
      Speicherort des Icons eines nach oben zeigenden Pfeils in einem gefüllten Kreis oder null, wenn das Icon nicht gefunden wurde
      +
      static FileARROW_UP_ICON +
      Speicherort des Icons eines nach oben zeigenden Pfeils oder null, wenn das Icon nicht gefunden wurde
      +
      static FileCALCULATOR_FILLED_ICON +
      Speicherort des Icons eines Taschenrechners, gefüllt oder null, wenn das Icon nicht gefunden wurde
      +
      static FileCALCULATOR_ICON +
      Speicherort des Icons eines Taschenrechners oder null, wenn das Icon nicht gefunden wurde
      +
      static FileCALCULATOR_SYMBOLS_FILLED_ICON +
      Speicherort des Icons mit Rechensymbolen, gefüllt oder null, wenn das Icon nicht gefunden wurde
      +
      static FileCALCULATOR_SYMBOLS_ICON +
      Speicherort des Icons mit Rechensymbolen oder null, wenn das Icon nicht gefunden wurde
      +
      static FileCOPYRIGHT_FILLED_ICON +
      Speicherort des Icons mit dem Copyright-Symbol, gefüllt oder null, wenn das Icon nicht gefunden wurde
      +
      static FileCOPYRIGHT_ICON +
      Speicherort des Icons mit dem Copyright-Symbol oder null, wenn das Icon nicht gefunden wurde
      +
      static FileCUSTOM_PREFERENCES +
      Speicherort der Benutzereinstellungen beim letzten Schließen des Programms oder null, wenn die Datei nicht gefunden wurde
      +
      static StringDARK_CSS +
      Pfad zum Stylesheet für die dunkle Darstellung oder null, wenn das CSS nicht gefunden wurde
      +
      static FileDEFAULT_PREFERENCES +
      Speicherort der Standardeinstellungen des Programms oder null, wenn die Datei nicht gefunden wurde
      +
      static FileENTER_FULLSCREEN_ICON +
      Speicherort des Icons zum Aktivieren des Vollbilds oder null, wenn das Icon nicht gefunden wurde
      +
      static FileERASER_FILLED_ICON +
      Speicherort des Icons eines gefüllten Radiergummis oder null, wenn das Icon nicht gefunden wurde
      +
      static FileERASER_ICON +
      Speicherort des Icons eines Radiergummis oder null, wenn das Icon nicht gefunden wurde
      +
      static FileEXIT_FULLSCREEN_ICON +
      Speicherort des Icons zum Deaktivieren des Vollbilds oder null, wenn das Icon nicht gefunden wurde
      +
      static FileFULLSCREEN_THIN_ICON +
      Speicherort des Icons zum Wechseln des Vollbilds in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
      +
      static LinkedList<File>ICON_LIST +
      Liste, die Speicherorte aller in dieser Klasse definierten Icons enthält
      +
      static FileIDEA_FILLED_ICON +
      Speicherort des gefüllten Idee Icons ("Glühbirne") oder null, wenn das Icon nicht gefunden wurde
      +
      static FileIDEA_ICON +
      Speicherort des Idee Icons ("Glühbirne") oder null, wenn das Icon nicht gefunden wurde
      +
      static FileIDEA_SPEECH_BUBBLE_FILLED_ICON +
      Speicherort des Idee Icons in einer gefüllten Sprechblase oder null, wenn das Icon nicht gefunden wurde
      +
      static FileIDEA_SPEECH_BUBBLE_ICON +
      Speicherort des Idee Icons in einer Sprechblase oder null, wenn das Icon nicht gefunden wurde
      +
      static FileINFO_CIRCLE_FILLED_ICON +
      Speicherort des gefüllten Info Icons oder null, wenn das Icon nicht gefunden wurde
      +
      static FileINFO_CIRCLE_ICON +
      Speicherort des Info Icons oder null, wenn das Icon nicht gefunden wurde
      +
      static FileINFO_CIRCLE_SIMPLE_FILLED_ICON +
      Speicherort des einfachen gefüllten Info Icons mit schlichtem 'i' oder null, wenn das Icon nicht gefunden wurde
      +
      static FileINFO_CIRCLE_SIMPLE_ICON +
      Speicherort des Info Icons mit schlichtem 'i' oder null, wenn das Icon nicht gefunden wurde
      +
      static FileINFO_CIRCLE_THIN_ICON +
      Speicherort des Info Icons mit schlichtem 'i' in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
      +
      static FileINFO_SPEECH_BOX_FILLED_ICON +
      Speicherort des Info Icons in einer gefüllten "Sprechbox" oder null, wenn das Icon nicht gefunden wurde
      +
      static FileINFO_SPEECH_BOX_ICON +
      Speicherort des Info Icons in einer "Sprechbox" oder null, wenn das Icon nicht gefunden wurde
      +
      static FileKEYBORD_CLOSE_FILLED_ICON +
      Speicherort des gefüllten Icons mit schließender Tastatur oder null, wenn das Icon nicht gefunden wurde
      +
      static FileKEYBORD_CLOSE_ICON +
      Speicherort des Icons mit schließender Tastatur oder null, wenn das Icon nicht gefunden wurde
      +
      static FileKEYBORD_COMPACT_FILLED_ICON +
      Speicherort des gefüllten Icons mit kompakter Tastatur oder null, wenn das Icon nicht gefunden wurde
      +
      static FileKEYBORD_COMPACT_ICON +
      Speicherort des Icons mit kompakter Tastatur oder null, wenn das Icon nicht gefunden wurde
      +
      static FileKEYBORD_FILLED_ICON +
      Speicherort des gefüllten Tastatur Icons oder null, wenn das Icon nicht gefunden wurde
      +
      static FileKEYBORD_ICON +
      Speicherort des Tastatur Icons oder null, wenn das Icon nicht gefunden wurde
      +
      static FileKEYBORD_OPEN_FILLED_ICON +
      Speicherort des gefüllten Icons mit öffnender Tastatur oder null, wenn das Icon nicht gefunden wurde
      +
      static FileKEYBORD_OPEN_ICON +
      Speicherort des Icons mit öffnender Tastatur oder null, wenn das Icon nicht gefunden wurde
      +
      static StringLAYOUT_CSS +
      Pfad zum Stylesheet für das allgemeine Layout oder null, wenn das CSS nicht gefunden wurde
      +
      static FileLIGHT_BULB_1_ICON +
      Speicherort des Icons einer "Glühbirne" mit Draht oder null, wenn das Icon nicht gefunden wurde
      +
      static FileLIGHT_BULB_2_FILLED_ICON +
      Speicherort des Icons einer gefüllten "Glühbirne" oder null, wenn das Icon nicht gefunden wurde
      +
      static FileLIGHT_BULB_2_ICON +
      Speicherort des Icons einer "Glühbirne" oder null, wenn das Icon nicht gefunden wurde
      +
      static FileLIGHT_BULB_3_FILLED_ICON +
      Speicherort des Icons einer leuchtenden gefüllten "Glühbirne" oder null, wenn das Icon nicht gefunden wurde
      +
      static FileLIGHT_BULB_3_ICON +
      Speicherort des Icons einer leuchtenden "Glühbirne" oder null, wenn das Icon nicht gefunden wurde
      +
      static StringLIGHT_CSS +
      Pfad zum Stylesheet für die helle Darstellung oder null, wenn das CSS nicht gefunden wurde
      +
      static FileMAGIC_1_ICON +
      Speicherort des Icons eines Zauberstabs oder null, wenn das Icon nicht gefunden wurde
      +
      static FileMAGIC_2_ICON +
      Speicherort des Icons eines Zauberstabs mit Blatt oder null, wenn das Icon nicht gefunden wurde
      +
      static FileMENU_DOTS_HORIZONTAL_FILLED_ICON +
      Speicherort des Menü Icons mit drei horizontalen gefüllten Punkten oder null, wenn das Icon nicht gefunden wurde
      +
      static FileMENU_DOTS_HORIZONTAL_ICON +
      Speicherort des Menü Icons mit drei horizontalen Punkten oder null, wenn das Icon nicht gefunden wurde
      +
      static FileMENU_DOTS_VERTICAL_FILLED_ICON +
      Speicherort des Menü Icons mit drei vertikalen gefüllten Punkten oder null, wenn das Icon nicht gefunden wurde
      +
      static FileMENU_DOTS_VERTICAL_ICON +
      Speicherort des Menü Icons mit drei vertikalen Punkten oder null, wenn das Icon nicht gefunden wurde
      +
      static FileMENU_ICON +
      Speicherort des Menü Icons oder null, wenn das Icon nicht gefunden wurde
      +
      static FileMENU_THIN_ICON +
      Speicherort des Menü Icons in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
      +
      static FileMONITOR_FILLED_ICON +
      Speicherort des gefüllten Monitor Icons oder null, wenn das Icon nicht gefunden wurde
      +
      static FileMONITOR_ICON +
      Speicherort des Monitor Icons oder null, wenn das Icon nicht gefunden wurde
      +
      static FilePAINT_BRUSH_BUCKET_FILLED_ICON +
      Speicherort des gefüllten Icons eines Farbeimers mit Pinsel oder null, wenn das Icon nicht gefunden wurde
      +
      static FilePAINT_BRUSH_BUCKET_ICON +
      Speicherort des Icons eines Farbeimers mit Pinsel oder null, wenn das Icon nicht gefunden wurde
      +
      static FilePAINT_BRUSH_FILLED_ICON +
      Speicherort des gefüllten Pinsel Icons oder null, wenn das Icon nicht gefunden wurde
      +
      static FilePAINT_BRUSH_ICON +
      Speicherort des Pinsel Icons oder null, wenn das Icon nicht gefunden wurde
      +
      static FilePAINT_BRUSH_WINDOW_ICON +
      Speicherort des Icons mit einem Fenster und Pinsel oder null, wenn das Icon nicht gefunden wurde
      +
      static FilePREFERENCES_GEAR_1_ICON +
      Speicherort des Icons eines gefüllten Zahnrades oder null, wenn das Icon nicht gefunden wurde
      +
      static FilePREFERENCES_GEAR_2_ICON +
      Speicherort des Icons mit zwei gefüllten Zahnrädern oder null, wenn das Icon nicht gefunden wurde
      +
      static FilePREFERENCES_GEAR_3_ICON +
      Speicherort des Icons mit drei gefüllten Zahnrädern oder null, wenn das Icon nicht gefunden wurde
      +
      static FilePREFERENCES_GEAR_THIN_ICON +
      Speicherort des Icons eines Zahnrades im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
      +
      static FilePREFERENCES_WRENCH_ICON +
      Speicherort des Icons eines Schraubenschlüssels oder null, wenn das Icon nicht gefunden wurde
      +
      static FilePREFERENCES_WRENCH_RESET_ICON +
      Speicherort des Icons eines Schraubenschlüssels mit Rückgängig-Pfeil oder null, wenn das Icon nicht gefunden wurde
      +
      static FileQUESTION_CIRCLE_FILLED_ICON +
      Speicherort des gefüllten Frage Icons oder null, wenn das Icon nicht gefunden wurde
      +
      static FileQUESTION_CIRCLE_ICON +
      Speicherort des Frage Icons oder null, wenn das Icon nicht gefunden wurde
      +
      static FileQUESTION_SPEECH_BUBBLE_FILLED_ICON +
      Speicherort des Frage Icons in einer gefüllten Sprechblase oder null, wenn das Icon nicht gefunden wurde
      +
      static FileQUESTION_SPEECH_BUBBLE_ICON +
      Speicherort des Frage Icons in einer Sprechblase oder null, wenn das Icon nicht gefunden wurde
      +
      static FileQUESTION_THIN_ICON +
      Speicherort des Frage Icons in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
      +
      static FileSUN_FILLED_ICON +
      Speicherort des gefüllten Icons einer Sonne oder null, wenn das Icon nicht gefunden wurde
      +
      static FileSUN_ICON +
      Speicherort des Icons einer Sonne oder null, wenn das Icon nicht gefunden wurde
      +
      static FileSYNC_1_ICON +
      Speicherort des Icons mit zwei runden Pfeilen gegen den Uhrzeigersinn oder null, wenn das Icon nicht gefunden wurde
      +
      static FileSYNC_2_ICON +
      Speicherort des Icons mit drei runden Pfeilen gegen den Uhrzeigersinn oder null, wenn das Icon nicht gefunden wurde
      +
      static FileTEXTFIELD_1_ICON +
      Speicherort des Icons eines Textfeldes mit drei Punkten und einem Unterstrich oder null, wenn das Icon nicht gefunden wurde
      +
      static FileTEXTFIELD_ICON +
      Speicherort des Icons eines Textfeldes mit vier Punkten oder null, wenn das Icon nicht gefunden wurde
      +
      static FileTRASH_FILLED_ICON +
      Speicherort des Icons eines gefüllten Mülleimers oder null, wenn das Icon nicht gefunden wurde
      +
      static FileTRASH_ICON +
      Speicherort des Icons eines Mülleimers oder null, wenn das Icon nicht gefunden wurde
      +
      static FileTRASH_THIN_ICON +
      Speicherort des Icons eines Mülleimers in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
      +
      static FileTRASH_X_FILLED_ICON +
      Speicherort des Icons eines gefüllten Mülleimers mit 'X'-Symbol oder null, wenn das Icon nicht gefunden wurde
      +
      static FileTRASH_X_ICON +
      Speicherort des Icons eines Mülleimers mit 'X'-Symbol oder null, wenn das Icon nicht gefunden wurde
      +
      static FileWINDOW_ICON +
      Speicherort des Icons eines Programmfensters oder null, wenn das Icon nicht gefunden wurde
      +
      static FileWINDOW_THIN_2_ICON +
      Speicherort des Icons mit zwei Programmfenstern im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
      +
      static FileWINDOW_THIN_ICON +
      Speicherort des Icons eines Programmfensters in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
      +
      static FileX_MARK_1_ICON +
      Speicherort des Icons eines 'X'-Symbols oder null, wenn das Icon nicht gefunden wurde
      +
      static FileX_MARK_2_ICON +
      Speicherort des Icons eines 'X'-Symbols in einem gefüllten Quadrat oder null, wenn das Icon nicht gefunden wurde
      +
      static FileX_MARK_ARROW_LEFT_FILLED_ICON +
      Speicherort des Icons eines gefüllten Löschen-Symbols mit 'X' oder null, wenn das Icon nicht gefunden wurde
      +
      static FileX_MARK_ARROW_LEFT_ICON +
      Speicherort des Icons eines Löschen-Symbols mit 'X' oder null, wenn das Icon nicht gefunden wurde
      +
      static FileX_MARK_CIRCLE_1_FILLED_ICON +
      Speicherort des Icons eines 'X'-Symbols in einem gefüllten Kreis oder null, wenn das Icon nicht gefunden wurde
      +
      static FileX_MARK_CIRCLE_1_ICON +
      Speicherort des Icons eines 'X'-Symbols in einem Kreis oder null, wenn das Icon nicht gefunden wurde
      +
      static FileX_MARK_CIRCLE_2_FILLED_ICON +
      Speicherort des Icons eines 'X'-Symbols in einem gefüllten Kreis oder null, wenn das Icon nicht gefunden wurde
      +
      static FileX_MARK_CIRCLE_2_ICON +
      Speicherort des Icons eines 'X'-Symbols in einem Kreis oder null, wenn das Icon nicht gefunden wurde
      +
      static FileX_MARK_CIRCLE_THIN_ICON +
      Speicherort des Icons eines 'X'-Symbols in einem Kreis in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
      +
      static FileX_MARK_SQUARE_FILLED_ICON +
      Speicherort des Icons eines 'X'-Symbols in einem gefüllten Quadrat oder null, wenn das Icon nicht gefunden wurde
      +
      static FileX_MARK_SQUARE_ICON +
      Speicherort des Icons eines 'X'-Symbols in einem Quadrat oder null, wenn das Icon nicht gefunden wurde
      +
      static FileX_MARK_THIN_ICON +
      Speicherort des Icons eines 'X'-Symbols in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
      +
      static FileZOOM_IN_ICON +
      Speicherort des Icons einer Lupe mit '+' oder null, wenn das Icon nicht gefunden wurde
      +
      static FileZOOM_IN_THIN_ICON +
      Speicherort des Icons einer Lupe mit '+' in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
      +
      static FileZOOM_OUT_ICON +
      Speicherort des Icons einer Lupe mit '-' oder null, wenn das Icon nicht gefunden wurde
      +
      static FileZOOM_OUT_THIN_ICON +
      Speicherort des Icons einer Lupe mit '-' in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
      +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Summary

      + + + + + + + + + + + + +
      Constructors 
      ModifierConstructorDescription
      private Resources() +
      Diese Klasse ist nicht instanziierbar
      +
      +
    • +
    +
    + +
    + +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Field Detail

      + + + +
        +
      • +

        LAYOUT_CSS

        +
        public static final String LAYOUT_CSS
        +
        Pfad zum Stylesheet für das allgemeine Layout oder null, wenn das CSS nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        LIGHT_CSS

        +
        public static final String LIGHT_CSS
        +
        Pfad zum Stylesheet für die helle Darstellung oder null, wenn das CSS nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        DARK_CSS

        +
        public static final String DARK_CSS
        +
        Pfad zum Stylesheet für die dunkle Darstellung oder null, wenn das CSS nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        CUSTOM_PREFERENCES

        +
        public static final File CUSTOM_PREFERENCES
        +
        Speicherort der Benutzereinstellungen beim letzten Schließen des Programms oder null, wenn die Datei nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        DEFAULT_PREFERENCES

        +
        public static final File DEFAULT_PREFERENCES
        +
        Speicherort der Standardeinstellungen des Programms oder null, wenn die Datei nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        ABC_BRICKS_FILLED_ICON

        +
        public static final File ABC_BRICKS_FILLED_ICON
        +
        Speicherort des Icons mit ABC-Würfeln, gefüllt oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        ABC_BRICKS_ICON

        +
        public static final File ABC_BRICKS_ICON
        +
        Speicherort des Icons mit ABC-Würfeln oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        ANGEL_DOWN_CIRCLE_THIN_ICON

        +
        public static final File ANGEL_DOWN_CIRCLE_THIN_ICON
        +
        Speicherort des Icons eines nach unten zeigenden Pfeils in einem Kreis im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        ANGEL_LEFT_CIRCLE_THIN_ICON

        +
        public static final File ANGEL_LEFT_CIRCLE_THIN_ICON
        +
        Speicherort des Icons eines nach links zeigenden Pfeils in einem Kreis im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        ANGEL_RIGHT_CIRCLE_THIN_ICON

        +
        public static final File ANGEL_RIGHT_CIRCLE_THIN_ICON
        +
        Speicherort des Icons eines nach rechts zeigenden Pfeils in einem Kreis im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        ANGEL_UP_CIRCLE_THIN_ICON

        +
        public static final File ANGEL_UP_CIRCLE_THIN_ICON
        +
        Speicherort des Icons eines nach oben zeigenden Pfeils in einem Kreis im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        ANGEL_DOWN_THIN_ICON

        +
        public static final File ANGEL_DOWN_THIN_ICON
        +
        Speicherort des Icons eines nach unten zeigenden Pfeils im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        ANGEL_LEFT_THIN_ICON

        +
        public static final File ANGEL_LEFT_THIN_ICON
        +
        Speicherort des Icons eines nach links zeigenden Pfeils im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        ANGEL_RIGHT_THIN_ICON

        +
        public static final File ANGEL_RIGHT_THIN_ICON
        +
        Speicherort des Icons eines nach rechts zeigenden Pfeils im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        ANGEL_UP_THIN_ICON

        +
        public static final File ANGEL_UP_THIN_ICON
        +
        Speicherort des Icons eines nach oben zeigenden Pfeils im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        ARROW_DOWN_CIRCLE_FILLED_ICON

        +
        public static final File ARROW_DOWN_CIRCLE_FILLED_ICON
        +
        Speicherort des Icons eines nach unten zeigenden Pfeils in einem gefüllten Kreis oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        ARROW_LEFT_CIRCLE_FILLED_ICON

        +
        public static final File ARROW_LEFT_CIRCLE_FILLED_ICON
        +
        Speicherort des Icons eines nach links zeigenden Pfeils in einem gefüllten Kreis oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        ARROW_RIGHT_CIRCLE_FILLED_ICON

        +
        public static final File ARROW_RIGHT_CIRCLE_FILLED_ICON
        +
        Speicherort des Icons eines nach rechts zeigenden Pfeils in einem gefüllten Kreis oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        ARROW_UP_CIRCLE_FILLED_ICON

        +
        public static final File ARROW_UP_CIRCLE_FILLED_ICON
        +
        Speicherort des Icons eines nach oben zeigenden Pfeils in einem gefüllten Kreis oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        ARROW_DOWN_ICON

        +
        public static final File ARROW_DOWN_ICON
        +
        Speicherort des Icons eines nach unten zeigenden Pfeils oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        ARROW_LEFT_ICON

        +
        public static final File ARROW_LEFT_ICON
        +
        Speicherort des Icons eines nach links zeigenden Pfeils oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        ARROW_RIGHT_ICON

        +
        public static final File ARROW_RIGHT_ICON
        +
        Speicherort des Icons eines nach rechts zeigenden Pfeils oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        ARROW_UP_ICON

        +
        public static final File ARROW_UP_ICON
        +
        Speicherort des Icons eines nach oben zeigenden Pfeils oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        CALCULATOR_SYMBOLS_FILLED_ICON

        +
        public static final File CALCULATOR_SYMBOLS_FILLED_ICON
        +
        Speicherort des Icons mit Rechensymbolen, gefüllt oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        CALCULATOR_SYMBOLS_ICON

        +
        public static final File CALCULATOR_SYMBOLS_ICON
        +
        Speicherort des Icons mit Rechensymbolen oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        CALCULATOR_FILLED_ICON

        +
        public static final File CALCULATOR_FILLED_ICON
        +
        Speicherort des Icons eines Taschenrechners, gefüllt oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        CALCULATOR_ICON

        +
        public static final File CALCULATOR_ICON
        +
        Speicherort des Icons eines Taschenrechners oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        COPYRIGHT_FILLED_ICON

        +
        public static final File COPYRIGHT_FILLED_ICON
        +
        Speicherort des Icons mit dem Copyright-Symbol, gefüllt oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        COPYRIGHT_ICON

        +
        public static final File COPYRIGHT_ICON
        +
        Speicherort des Icons mit dem Copyright-Symbol oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        ERASER_FILLED_ICON

        +
        public static final File ERASER_FILLED_ICON
        +
        Speicherort des Icons eines gefüllten Radiergummis oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        ERASER_ICON

        +
        public static final File ERASER_ICON
        +
        Speicherort des Icons eines Radiergummis oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        ENTER_FULLSCREEN_ICON

        +
        public static final File ENTER_FULLSCREEN_ICON
        +
        Speicherort des Icons zum Aktivieren des Vollbilds oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        EXIT_FULLSCREEN_ICON

        +
        public static final File EXIT_FULLSCREEN_ICON
        +
        Speicherort des Icons zum Deaktivieren des Vollbilds oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        FULLSCREEN_THIN_ICON

        +
        public static final File FULLSCREEN_THIN_ICON
        +
        Speicherort des Icons zum Wechseln des Vollbilds in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        IDEA_FILLED_ICON

        +
        public static final File IDEA_FILLED_ICON
        +
        Speicherort des gefüllten Idee Icons ("Glühbirne") oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        IDEA_ICON

        +
        public static final File IDEA_ICON
        +
        Speicherort des Idee Icons ("Glühbirne") oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        IDEA_SPEECH_BUBBLE_FILLED_ICON

        +
        public static final File IDEA_SPEECH_BUBBLE_FILLED_ICON
        +
        Speicherort des Idee Icons in einer gefüllten Sprechblase oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        IDEA_SPEECH_BUBBLE_ICON

        +
        public static final File IDEA_SPEECH_BUBBLE_ICON
        +
        Speicherort des Idee Icons in einer Sprechblase oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        INFO_CIRCLE_SIMPLE_FILLED_ICON

        +
        public static final File INFO_CIRCLE_SIMPLE_FILLED_ICON
        +
        Speicherort des einfachen gefüllten Info Icons mit schlichtem 'i' oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        INFO_CIRCLE_SIMPLE_ICON

        +
        public static final File INFO_CIRCLE_SIMPLE_ICON
        +
        Speicherort des Info Icons mit schlichtem 'i' oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        INFO_CIRCLE_FILLED_ICON

        +
        public static final File INFO_CIRCLE_FILLED_ICON
        +
        Speicherort des gefüllten Info Icons oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        INFO_CIRCLE_ICON

        +
        public static final File INFO_CIRCLE_ICON
        +
        Speicherort des Info Icons oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        INFO_SPEECH_BOX_FILLED_ICON

        +
        public static final File INFO_SPEECH_BOX_FILLED_ICON
        +
        Speicherort des Info Icons in einer gefüllten "Sprechbox" oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        INFO_SPEECH_BOX_ICON

        +
        public static final File INFO_SPEECH_BOX_ICON
        +
        Speicherort des Info Icons in einer "Sprechbox" oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        INFO_CIRCLE_THIN_ICON

        +
        public static final File INFO_CIRCLE_THIN_ICON
        +
        Speicherort des Info Icons mit schlichtem 'i' in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        KEYBORD_FILLED_ICON

        +
        public static final File KEYBORD_FILLED_ICON
        +
        Speicherort des gefüllten Tastatur Icons oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        KEYBORD_ICON

        +
        public static final File KEYBORD_ICON
        +
        Speicherort des Tastatur Icons oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        KEYBORD_COMPACT_FILLED_ICON

        +
        public static final File KEYBORD_COMPACT_FILLED_ICON
        +
        Speicherort des gefüllten Icons mit kompakter Tastatur oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        KEYBORD_COMPACT_ICON

        +
        public static final File KEYBORD_COMPACT_ICON
        +
        Speicherort des Icons mit kompakter Tastatur oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        KEYBORD_OPEN_FILLED_ICON

        +
        public static final File KEYBORD_OPEN_FILLED_ICON
        +
        Speicherort des gefüllten Icons mit öffnender Tastatur oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        KEYBORD_OPEN_ICON

        +
        public static final File KEYBORD_OPEN_ICON
        +
        Speicherort des Icons mit öffnender Tastatur oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        KEYBORD_CLOSE_FILLED_ICON

        +
        public static final File KEYBORD_CLOSE_FILLED_ICON
        +
        Speicherort des gefüllten Icons mit schließender Tastatur oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        KEYBORD_CLOSE_ICON

        +
        public static final File KEYBORD_CLOSE_ICON
        +
        Speicherort des Icons mit schließender Tastatur oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        LIGHT_BULB_1_ICON

        +
        public static final File LIGHT_BULB_1_ICON
        +
        Speicherort des Icons einer "Glühbirne" mit Draht oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        LIGHT_BULB_2_FILLED_ICON

        +
        public static final File LIGHT_BULB_2_FILLED_ICON
        +
        Speicherort des Icons einer gefüllten "Glühbirne" oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        LIGHT_BULB_2_ICON

        +
        public static final File LIGHT_BULB_2_ICON
        +
        Speicherort des Icons einer "Glühbirne" oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        LIGHT_BULB_3_FILLED_ICON

        +
        public static final File LIGHT_BULB_3_FILLED_ICON
        +
        Speicherort des Icons einer leuchtenden gefüllten "Glühbirne" oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        LIGHT_BULB_3_ICON

        +
        public static final File LIGHT_BULB_3_ICON
        +
        Speicherort des Icons einer leuchtenden "Glühbirne" oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        MAGIC_1_ICON

        +
        public static final File MAGIC_1_ICON
        +
        Speicherort des Icons eines Zauberstabs oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        MAGIC_2_ICON

        +
        public static final File MAGIC_2_ICON
        +
        Speicherort des Icons eines Zauberstabs mit Blatt oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        MENU_ICON

        +
        public static final File MENU_ICON
        +
        Speicherort des Menü Icons oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        MENU_DOTS_HORIZONTAL_FILLED_ICON

        +
        public static final File MENU_DOTS_HORIZONTAL_FILLED_ICON
        +
        Speicherort des Menü Icons mit drei horizontalen gefüllten Punkten oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        MENU_DOTS_VERTICAL_FILLED_ICON

        +
        public static final File MENU_DOTS_VERTICAL_FILLED_ICON
        +
        Speicherort des Menü Icons mit drei vertikalen gefüllten Punkten oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        MENU_DOTS_HORIZONTAL_ICON

        +
        public static final File MENU_DOTS_HORIZONTAL_ICON
        +
        Speicherort des Menü Icons mit drei horizontalen Punkten oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        MENU_DOTS_VERTICAL_ICON

        +
        public static final File MENU_DOTS_VERTICAL_ICON
        +
        Speicherort des Menü Icons mit drei vertikalen Punkten oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        MENU_THIN_ICON

        +
        public static final File MENU_THIN_ICON
        +
        Speicherort des Menü Icons in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        MONITOR_FILLED_ICON

        +
        public static final File MONITOR_FILLED_ICON
        +
        Speicherort des gefüllten Monitor Icons oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        MONITOR_ICON

        +
        public static final File MONITOR_ICON
        +
        Speicherort des Monitor Icons oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        PAINT_BRUSH_FILLED_ICON

        +
        public static final File PAINT_BRUSH_FILLED_ICON
        +
        Speicherort des gefüllten Pinsel Icons oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        PAINT_BRUSH_ICON

        +
        public static final File PAINT_BRUSH_ICON
        +
        Speicherort des Pinsel Icons oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        PAINT_BRUSH_WINDOW_ICON

        +
        public static final File PAINT_BRUSH_WINDOW_ICON
        +
        Speicherort des Icons mit einem Fenster und Pinsel oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        PAINT_BRUSH_BUCKET_FILLED_ICON

        +
        public static final File PAINT_BRUSH_BUCKET_FILLED_ICON
        +
        Speicherort des gefüllten Icons eines Farbeimers mit Pinsel oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        PAINT_BRUSH_BUCKET_ICON

        +
        public static final File PAINT_BRUSH_BUCKET_ICON
        +
        Speicherort des Icons eines Farbeimers mit Pinsel oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        PREFERENCES_GEAR_1_ICON

        +
        public static final File PREFERENCES_GEAR_1_ICON
        +
        Speicherort des Icons eines gefüllten Zahnrades oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        PREFERENCES_GEAR_2_ICON

        +
        public static final File PREFERENCES_GEAR_2_ICON
        +
        Speicherort des Icons mit zwei gefüllten Zahnrädern oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        PREFERENCES_GEAR_3_ICON

        +
        public static final File PREFERENCES_GEAR_3_ICON
        +
        Speicherort des Icons mit drei gefüllten Zahnrädern oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        PREFERENCES_GEAR_THIN_ICON

        +
        public static final File PREFERENCES_GEAR_THIN_ICON
        +
        Speicherort des Icons eines Zahnrades im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        PREFERENCES_WRENCH_RESET_ICON

        +
        public static final File PREFERENCES_WRENCH_RESET_ICON
        +
        Speicherort des Icons eines Schraubenschlüssels mit Rückgängig-Pfeil oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        PREFERENCES_WRENCH_ICON

        +
        public static final File PREFERENCES_WRENCH_ICON
        +
        Speicherort des Icons eines Schraubenschlüssels oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        QUESTION_CIRCLE_FILLED_ICON

        +
        public static final File QUESTION_CIRCLE_FILLED_ICON
        +
        Speicherort des gefüllten Frage Icons oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        QUESTION_CIRCLE_ICON

        +
        public static final File QUESTION_CIRCLE_ICON
        +
        Speicherort des Frage Icons oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        QUESTION_SPEECH_BUBBLE_FILLED_ICON

        +
        public static final File QUESTION_SPEECH_BUBBLE_FILLED_ICON
        +
        Speicherort des Frage Icons in einer gefüllten Sprechblase oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        QUESTION_SPEECH_BUBBLE_ICON

        +
        public static final File QUESTION_SPEECH_BUBBLE_ICON
        +
        Speicherort des Frage Icons in einer Sprechblase oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        QUESTION_THIN_ICON

        +
        public static final File QUESTION_THIN_ICON
        +
        Speicherort des Frage Icons in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        SUN_FILLED_ICON

        +
        public static final File SUN_FILLED_ICON
        +
        Speicherort des gefüllten Icons einer Sonne oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        SUN_ICON

        +
        public static final File SUN_ICON
        +
        Speicherort des Icons einer Sonne oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        SYNC_1_ICON

        +
        public static final File SYNC_1_ICON
        +
        Speicherort des Icons mit zwei runden Pfeilen gegen den Uhrzeigersinn oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        SYNC_2_ICON

        +
        public static final File SYNC_2_ICON
        +
        Speicherort des Icons mit drei runden Pfeilen gegen den Uhrzeigersinn oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        TEXTFIELD_ICON

        +
        public static final File TEXTFIELD_ICON
        +
        Speicherort des Icons eines Textfeldes mit vier Punkten oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        TEXTFIELD_1_ICON

        +
        public static final File TEXTFIELD_1_ICON
        +
        Speicherort des Icons eines Textfeldes mit drei Punkten und einem Unterstrich oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        TRASH_FILLED_ICON

        +
        public static final File TRASH_FILLED_ICON
        +
        Speicherort des Icons eines gefüllten Mülleimers oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        TRASH_ICON

        +
        public static final File TRASH_ICON
        +
        Speicherort des Icons eines Mülleimers oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        TRASH_X_FILLED_ICON

        +
        public static final File TRASH_X_FILLED_ICON
        +
        Speicherort des Icons eines gefüllten Mülleimers mit 'X'-Symbol oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        TRASH_X_ICON

        +
        public static final File TRASH_X_ICON
        +
        Speicherort des Icons eines Mülleimers mit 'X'-Symbol oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        TRASH_THIN_ICON

        +
        public static final File TRASH_THIN_ICON
        +
        Speicherort des Icons eines Mülleimers in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        WINDOW_ICON

        +
        public static final File WINDOW_ICON
        +
        Speicherort des Icons eines Programmfensters oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        WINDOW_THIN_ICON

        +
        public static final File WINDOW_THIN_ICON
        +
        Speicherort des Icons eines Programmfensters in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        WINDOW_THIN_2_ICON

        +
        public static final File WINDOW_THIN_2_ICON
        +
        Speicherort des Icons mit zwei Programmfenstern im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        X_MARK_SQUARE_FILLED_ICON

        +
        public static final File X_MARK_SQUARE_FILLED_ICON
        +
        Speicherort des Icons eines 'X'-Symbols in einem gefüllten Quadrat oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        X_MARK_SQUARE_ICON

        +
        public static final File X_MARK_SQUARE_ICON
        +
        Speicherort des Icons eines 'X'-Symbols in einem Quadrat oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        X_MARK_1_ICON

        +
        public static final File X_MARK_1_ICON
        +
        Speicherort des Icons eines 'X'-Symbols oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        X_MARK_2_ICON

        +
        public static final File X_MARK_2_ICON
        +
        Speicherort des Icons eines 'X'-Symbols in einem gefüllten Quadrat oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        X_MARK_CIRCLE_1_FILLED_ICON

        +
        public static final File X_MARK_CIRCLE_1_FILLED_ICON
        +
        Speicherort des Icons eines 'X'-Symbols in einem gefüllten Kreis oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        X_MARK_CIRCLE_1_ICON

        +
        public static final File X_MARK_CIRCLE_1_ICON
        +
        Speicherort des Icons eines 'X'-Symbols in einem Kreis oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        X_MARK_CIRCLE_2_FILLED_ICON

        +
        public static final File X_MARK_CIRCLE_2_FILLED_ICON
        +
        Speicherort des Icons eines 'X'-Symbols in einem gefüllten Kreis oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        X_MARK_CIRCLE_2_ICON

        +
        public static final File X_MARK_CIRCLE_2_ICON
        +
        Speicherort des Icons eines 'X'-Symbols in einem Kreis oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        X_MARK_CIRCLE_THIN_ICON

        +
        public static final File X_MARK_CIRCLE_THIN_ICON
        +
        Speicherort des Icons eines 'X'-Symbols in einem Kreis in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        X_MARK_THIN_ICON

        +
        public static final File X_MARK_THIN_ICON
        +
        Speicherort des Icons eines 'X'-Symbols in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        X_MARK_ARROW_LEFT_FILLED_ICON

        +
        public static final File X_MARK_ARROW_LEFT_FILLED_ICON
        +
        Speicherort des Icons eines gefüllten Löschen-Symbols mit 'X' oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        X_MARK_ARROW_LEFT_ICON

        +
        public static final File X_MARK_ARROW_LEFT_ICON
        +
        Speicherort des Icons eines Löschen-Symbols mit 'X' oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        ZOOM_IN_ICON

        +
        public static final File ZOOM_IN_ICON
        +
        Speicherort des Icons einer Lupe mit '+' oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        ZOOM_OUT_ICON

        +
        public static final File ZOOM_OUT_ICON
        +
        Speicherort des Icons einer Lupe mit '-' oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        ZOOM_IN_THIN_ICON

        +
        public static final File ZOOM_IN_THIN_ICON
        +
        Speicherort des Icons einer Lupe mit '+' in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        ZOOM_OUT_THIN_ICON

        +
        public static final File ZOOM_OUT_THIN_ICON
        +
        Speicherort des Icons einer Lupe mit '-' in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
        +
      • +
      + + + +
        +
      • +

        ICON_LIST

        +
        public static final LinkedList<File> ICON_LIST
        +
        Liste, die Speicherorte aller in dieser Klasse definierten Icons enthält
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Constructor Detail

      + + + +
        +
      • +

        Resources

        +
        private Resources()
        +
        Diese Klasse ist nicht instanziierbar
        +
      • +
      +
    • +
    +
    + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        getResourceAsExternalForm

        +
        public static String getResourceAsExternalForm​(String name)
        +
        Sucht die Ressource mit gegebenem Namen und gibt die URL als String zurück.
        +
        +
        Parameters:
        +
        name - Name (und Pfad) der gewünschten Ressource
        +
        Returns:
        +
        URL der gefundenen Ressource oder null, wenn die Ressource nicht gefunden werden konnte
        +
        See Also:
        +
        Class.getResource(String)
        +
        +
      • +
      + + + +
        +
      • +

        getResourceAsFile

        +
        public static File getResourceAsFile​(String name)
        +
        Sucht die Ressource mit gegebenem Namen und gibt diese als File zurück.
        +
        +
        Parameters:
        +
        name - Name (und Pfad) der gewünschten Ressource
        +
        Returns:
        +
        File der gewünschten Ressource oder null, wenn die Ressource nicht gefunden werden konnte
        +
        See Also:
        +
        Class.getResource(String)
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/util/TriConsumer.html b/doc/0.1.4/de_private/bitchanger/util/TriConsumer.html new file mode 100644 index 0000000..45f4d1e --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/util/TriConsumer.html @@ -0,0 +1,282 @@ + + + + + +TriConsumer + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface TriConsumer<T,​U,​V>

+
+
+
+
    +
  • +
    +
    Type Parameters:
    +
    T - Typ des ersten Ãœbergabeparameters
    +
    U - Typ des zweiten Ãœbergabeparameters
    +
    V - Typ des dritten Ãœbergabeparameters
    +
    +
    +
    Functional Interface:
    +
    This is a functional interface and can therefore be used as the assignment target for a lambda expression or method reference.
    +
    +
    +
    @FunctionalInterface
    +public interface TriConsumer<T,​U,​V>
    +
    Repräsentiert eine Operation, die drei Übergabeparameter akzeptiert und keine Rückgabe hat.
    +
    +
    Author:
    +
    Tim Mühle
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + +
      All Methods Instance Methods Abstract Methods 
      Modifier and TypeMethodDescription
      voidaccept​(T t, + U u, + V v) +
      Führt diese Operation mit den übergebenen Argumenten aus.
      +
      +
    • +
    +
    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + + + +
        +
      • +

        accept

        +
        void accept​(T t,
        +            U u,
        +            V v)
        +
        Führt diese Operation mit den übergebenen Argumenten aus.
        +
        +
        Parameters:
        +
        t - erster Ãœbergabeparameter
        +
        u - zweiter Ãœbergabeparameter
        +
        v - dritter Ãœbergabeparameter
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + diff --git a/doc/0.1.4/de_private/bitchanger/util/class-use/ArrayUtils.html b/doc/0.1.4/de_private/bitchanger/util/class-use/ArrayUtils.html new file mode 100644 index 0000000..2daaba9 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/util/class-use/ArrayUtils.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.util.ArrayUtils + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.util.ArrayUtils

+
+
No usage of bitchanger.util.ArrayUtils
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/util/class-use/FXUtils.html b/doc/0.1.4/de_private/bitchanger/util/class-use/FXUtils.html new file mode 100644 index 0000000..c5c546c --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/util/class-use/FXUtils.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.util.FXUtils + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.util.FXUtils

+
+
No usage of bitchanger.util.FXUtils
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/util/class-use/IconFactory.html b/doc/0.1.4/de_private/bitchanger/util/class-use/IconFactory.html new file mode 100644 index 0000000..d156bbd --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/util/class-use/IconFactory.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.util.IconFactory + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.util.IconFactory

+
+
No usage of bitchanger.util.IconFactory
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/util/class-use/Resources.html b/doc/0.1.4/de_private/bitchanger/util/class-use/Resources.html new file mode 100644 index 0000000..a00b0b2 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/util/class-use/Resources.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.util.Resources + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Class
bitchanger.util.Resources

+
+
No usage of bitchanger.util.Resources
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/util/class-use/TriConsumer.html b/doc/0.1.4/de_private/bitchanger/util/class-use/TriConsumer.html new file mode 100644 index 0000000..574fe32 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/util/class-use/TriConsumer.html @@ -0,0 +1,202 @@ + + + + + +Uses of Interface bitchanger.util.TriConsumer + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Interface
bitchanger.util.TriConsumer

+
+
+
    +
  • + + + + + + + + + + + + +
    Packages that use TriConsumer 
    PackageDescription
    bitchanger.util +
    Enthält Klassen mit allgemeinen und klassenübergreifend benötigten Methoden.
    +
    +
  • +
  • + +
  • +
+
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/util/package-summary.html b/doc/0.1.4/de_private/bitchanger/util/package-summary.html new file mode 100644 index 0000000..320eaa3 --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/util/package-summary.html @@ -0,0 +1,209 @@ + + + + + +bitchanger.util + + + + + + + + + + + + + + + +
+ +
+
+
+

Package bitchanger.util

+
+
+
+ + +
Enthält Klassen mit allgemeinen und klassenübergreifend benötigten Methoden.
+
+
    +
  • + + + + + + + + + + + + +
    Interface Summary 
    InterfaceDescription
    TriConsumer<T,​U,​V> +
    Repräsentiert eine Operation, die drei Übergabeparameter akzeptiert und keine Rückgabe hat.
    +
    +
  • +
  • + + + + + + + + + + + + + + + + + + + + + + + + +
    Class Summary 
    ClassDescription
    ArrayUtils +
    Klasse, die Werkzeug-Methoden für Arrays enthält.
    +
    FXUtils +
    Utility-Klasse zur allgemeinen Verarbeitung von Objekten, die zur Oberfläche gehören.
    +
    IconFactory +
    Factory Klasse für das Erstellen von SVGIcons
    +
    Resources +
    Enthält alle benötigten Ressourcen, wie Pfade zu den CSS Dateien oder den Icons
    +
    +
  • +
+
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/util/package-tree.html b/doc/0.1.4/de_private/bitchanger/util/package-tree.html new file mode 100644 index 0000000..8b632da --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/util/package-tree.html @@ -0,0 +1,173 @@ + + + + + +bitchanger.util Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For Package bitchanger.util

+Package Hierarchies: + +
+
+
+

Class Hierarchy

+ +
+
+

Interface Hierarchy

+ +
+
+
+ + + diff --git a/doc/0.1.4/de_private/bitchanger/util/package-use.html b/doc/0.1.4/de_private/bitchanger/util/package-use.html new file mode 100644 index 0000000..97f725a --- /dev/null +++ b/doc/0.1.4/de_private/bitchanger/util/package-use.html @@ -0,0 +1,188 @@ + + + + + +Uses of Package bitchanger.util + + + + + + + + + + + + + + + +
+ +
+
+
+

Uses of Package
bitchanger.util

+
+
+
    +
  • + + + + + + + + + + + + +
    Packages that use bitchanger.util 
    PackageDescription
    bitchanger.util +
    Enthält Klassen mit allgemeinen und klassenübergreifend benötigten Methoden.
    +
    +
  • +
  • + + + + + + + + + + + + + + +
    Classes in bitchanger.util used by bitchanger.util 
    ClassDescription
    TriConsumer +
    Repräsentiert eine Operation, die drei Übergabeparameter akzeptiert und keine Rückgabe hat.
    +
    +
  • +
+
+
+ + + diff --git a/doc/0.1.4/de_private/constant-values.html b/doc/0.1.4/de_private/constant-values.html new file mode 100644 index 0000000..e7b8979 --- /dev/null +++ b/doc/0.1.4/de_private/constant-values.html @@ -0,0 +1,655 @@ + + + + + +Constant Field Values + + + + + + + + + + + + + + + +
+ +
+
+
+

Constant Field Values

+
+

Contents

+ +
+
+
+ + +
+

bitchanger.calculations.*

+ +
+ + + +
+

bitchanger.gui.*

+ + +
+ + + +
+

bitchanger.main.*

+ +
+
+
+ + + diff --git a/doc/0.1.4/de_private/deprecated-list.html b/doc/0.1.4/de_private/deprecated-list.html new file mode 100644 index 0000000..0d2ceb5 --- /dev/null +++ b/doc/0.1.4/de_private/deprecated-list.html @@ -0,0 +1,149 @@ + + + + + +Deprecated List + + + + + + + + + + + + + + + +
+ +
+
+
+

Deprecated API

+

Contents

+
+
+ + + diff --git a/doc/0.1.4/de_private/element-list b/doc/0.1.4/de_private/element-list new file mode 100644 index 0000000..685c0f3 --- /dev/null +++ b/doc/0.1.4/de_private/element-list @@ -0,0 +1,7 @@ +bitchanger.calculations +bitchanger.gui.controller +bitchanger.gui.controls +bitchanger.gui.views +bitchanger.main +bitchanger.preferences +bitchanger.util diff --git a/doc/0.1.4/de_private/help-doc.html b/doc/0.1.4/de_private/help-doc.html new file mode 100644 index 0000000..c2dccd2 --- /dev/null +++ b/doc/0.1.4/de_private/help-doc.html @@ -0,0 +1,281 @@ + + + + + +API Help + + + + + + + + + + + + + + + +
+ +
+
+
+

How This API Document Is Organized

+
This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.
+
+
+
    +
  • +
    +

    Overview

    +

    The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

    +
    +
  • +
  • +
    +

    Package

    +

    Each package has a page that contains a list of its classes and interfaces, with a summary for each. These pages may contain six categories:

    +
      +
    • Interfaces
    • +
    • Classes
    • +
    • Enums
    • +
    • Exceptions
    • +
    • Errors
    • +
    • Annotation Types
    • +
    +
    +
  • +
  • +
    +

    Class or Interface

    +

    Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

    +
      +
    • Class Inheritance Diagram
    • +
    • Direct Subclasses
    • +
    • All Known Subinterfaces
    • +
    • All Known Implementing Classes
    • +
    • Class or Interface Declaration
    • +
    • Class or Interface Description
    • +
    +
    +
      +
    • Nested Class Summary
    • +
    • Field Summary
    • +
    • Property Summary
    • +
    • Constructor Summary
    • +
    • Method Summary
    • +
    +
    +
      +
    • Field Detail
    • +
    • Property Detail
    • +
    • Constructor Detail
    • +
    • Method Detail
    • +
    +

    Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

    +
    +
  • +
  • +
    +

    Annotation Type

    +

    Each annotation type has its own separate page with the following sections:

    +
      +
    • Annotation Type Declaration
    • +
    • Annotation Type Description
    • +
    • Required Element Summary
    • +
    • Optional Element Summary
    • +
    • Element Detail
    • +
    +
    +
  • +
  • +
    +

    Enum

    +

    Each enum has its own separate page with the following sections:

    +
      +
    • Enum Declaration
    • +
    • Enum Description
    • +
    • Enum Constant Summary
    • +
    • Enum Constant Detail
    • +
    +
    +
  • +
  • +
    +

    Use

    +

    Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its "Use" page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.

    +
    +
  • +
  • +
    +

    Tree (Class Hierarchy)

    +

    There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. Classes are organized by inheritance structure starting with java.lang.Object. Interfaces do not inherit from java.lang.Object.

    +
      +
    • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
    • +
    • When viewing a particular package, class or interface page, clicking on "Tree" displays the hierarchy for only that package.
    • +
    +
    +
  • +
  • +
    +

    Deprecated API

    +

    The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.

    +
    +
  • +
  • +
    +

    Index

    +

    The Index contains an alphabetic index of all classes, interfaces, constructors, methods, and fields, as well as lists of all packages and all classes.

    +
    +
  • +
  • +
    +

    All Classes

    +

    The All Classes link shows all classes and interfaces except non-static nested types.

    +
    +
  • +
  • +
    +

    Serialized Form

    +

    Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.

    +
    +
  • +
  • +
    +

    Constant Field Values

    +

    The Constant Field Values page lists the static final fields and their values.

    +
    +
  • +
  • +
    +

    Search

    +

    You can search for definitions of modules, packages, types, fields, methods and other terms defined in the API, using some or all of the name. "Camel-case" abbreviations are supported: for example, "InpStr" will find "InputStream" and "InputStreamReader".

    +
    +
  • +
+
+This help file applies to API documentation generated by the standard doclet.
+
+ + + diff --git a/doc/0.1.4/de_private/index-files/index-1.html b/doc/0.1.4/de_private/index-files/index-1.html new file mode 100644 index 0000000..213234a --- /dev/null +++ b/doc/0.1.4/de_private/index-files/index-1.html @@ -0,0 +1,357 @@ + + + + + +A-Index + + + + + + + + + + + + + + + +
+ +
+
+
A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages + + +

A

+
+
ABC_BRICKS_FILLED_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons mit ABC-Würfeln, gefüllt oder null, wenn das Icon nicht gefunden wurde
+
+
ABC_BRICKS_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons mit ABC-Würfeln oder null, wenn das Icon nicht gefunden wurde
+
+
about - Variable in class bitchanger.gui.controller.BasicMenuController
+
 
+
ABOUT - bitchanger.gui.controls.InformationDialog.InformationType
+
 
+
accept(T, U, V) - Method in interface bitchanger.util.TriConsumer
+
+
Führt diese Operation mit den übergebenen Argumenten aus.
+
+
addButton(Node, int, int) - Method in class bitchanger.gui.controls.AlphaNumKeys
+
+
Fügt den nächsten Button zur Liste AlphaNumKeys.buttonList hinzu + und setzt die Constraints zur Positionierung in einer GridPane.
+
+
addButton(Node, int, int, String) - Method in class bitchanger.gui.controls.AlphaNumKeys
+
+
Fügt den nächsten Button zur Liste AlphaNumKeys.buttonList und zur Map AlphaNumKeys.buttonMap hinzu + und setzt die Constraints zur Positionierung in einer GridPane.
+
+
addColumnConstraint(int, AlphaNumGridView.ConstraintType) - Method in class bitchanger.gui.views.AlphaNumGridView
+
+
Erstellt neue ColumnConstraints für die Spalte mit dem Index columnIndex, die an den ConstraintType angepasst sind.
+
+
addItems() - Method in class bitchanger.gui.controls.ConverterMenuBar
+
 
+
addMenu(Menu, String) - Method in class bitchanger.gui.controls.BasicMenuBar
+
+
Fügt das übergebene Menu zu dieser MenuBar hinzu und speichert dieses mit dem Schlüssel + key in der Map BasicMenuBar.menuItemMap
+
+
addRowConstraint(int, AlphaNumGridView.ConstraintType) - Method in class bitchanger.gui.views.AlphaNumGridView
+
+
Erstellt neue RowConstraints für die Zeile mit dem Index rowIndex, die an den ConstraintType angepasst sind.
+
+
adjustViews(Viewable...) - Method in class bitchanger.main.PrimaryFXApp
+
 
+
ALPHA_KEYS - Static variable in class bitchanger.gui.controls.AlphaNumKeys
+
+
Array, das die Schlüsselwörter für die Buchstaben-Buttons definiert
+
+
alphaKeys - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
Array, das die Schlüsselwörter für die Buchstaben-Buttons definiert
+
+
alphaNum - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
Buttons, die als alpha-numerische Tastatur dienen, die für verschiedene Zahlensysteme ausgelegt ist.
+
+
alphaNumButtons - Variable in class bitchanger.gui.controller.ConverterController
+
+
alphanumerische Buttons zur Simulation einer Tastatur
+
+
AlphaNumGridView - Class in bitchanger.gui.views
+
+
View, die die Basis Scene für eine Tabelle aus einer Spalte mit Labels, einer Spalte mit Textfeldern + und einer Tastaturmatrix aus AlphaNumKeys erstellt.
+
+
AlphaNumGridView(int, int) - Constructor for class bitchanger.gui.views.AlphaNumGridView
+
+
Erzeugt eine neue AlphaNumGridView, die keine Labels und keine Textfelder enthält.
+
+
AlphaNumGridView(int, int, int, int, int, int, String[], String...) - Constructor for class bitchanger.gui.views.AlphaNumGridView
+
+
Erzeugt eine neue AlphaNumGridView, die ihre Labels, Textfelder und die Tastaturmatrix nach den übergebenen Parametern + positioniert.
+
+
AlphaNumGridView(int, int, int, int, int, int, String[], String[], double, double, double, double, double, double, double) - Constructor for class bitchanger.gui.views.AlphaNumGridView
+
+
Erzeugt eine neue AlphaNumGridView, die ihre Labels, Textfelder und die Tastaturmatrix nach den übergebenen Parametern + positioniert.
+
+
AlphaNumGridView(int, int, int, int, int, int, String[], String[], double, double, double, double, double, double, double, double, double, double, double, double, double, double, double) - Constructor for class bitchanger.gui.views.AlphaNumGridView
+
+
Erzeugt eine neue AlphaNumGridView, die ihre Labels, Textfelder und die Tastaturmatrix nach den übergebenen Parametern + positioniert.
+
+
AlphaNumGridView(String[], String...) - Constructor for class bitchanger.gui.views.AlphaNumGridView
+
+
Erzeugt eine neue AlphaNumGridView, die ihre Labels in der Spalte 0 ab Zeile 0 und ihre Textfelder in der Spalte 1 + ab Zeile 0 positioniert.
+
+
AlphaNumGridView.ConstraintType - Enum in bitchanger.gui.views
+
+
Aufzählung von möglichen Typen für Constraints einer GridPane
+
+
AlphaNumKeys - Class in bitchanger.gui.controls
+
+
AlphaNumKeys stellt ein Tastaturlayout als 4x5 Matrix bereit.
+
+
AlphaNumKeys(int, int, double, Scene) - Constructor for class bitchanger.gui.controls.AlphaNumKeys
+
+
Erstellt alle Buttons für das Tastaturlayout und setzt die Constraints für die Positionierung in einer GridPane.
+
+
AlphaNumKeys(int, int, DoubleProperty, Scene) - Constructor for class bitchanger.gui.controls.AlphaNumKeys
+
+
Erstellt alle Buttons für das Tastaturlayout und setzt die Constraints für die Positionierung in einer GridPane.
+
+
AlphaNumKeysController - Class in bitchanger.gui.controller
+
+
Dieser Controller gibt den Bedienelementen einer Instanz von AlphaNumKeys eine Funktion und bindet die Simulation der + Tastatur an die gekapselte Scene.
+
+
AlphaNumKeysController(AlphaNumKeys, Scene) - Constructor for class bitchanger.gui.controller.AlphaNumKeysController
+
+
Erzeugt einen neuen Controller, der einer AlphaNumKeys eine Funktion gibt.
+
+
ANGEL_DOWN_CIRCLE_THIN_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines nach unten zeigenden Pfeils in einem Kreis im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
+
+
ANGEL_DOWN_THIN_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines nach unten zeigenden Pfeils im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
+
+
ANGEL_LEFT_CIRCLE_THIN_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines nach links zeigenden Pfeils in einem Kreis im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
+
+
ANGEL_LEFT_THIN_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines nach links zeigenden Pfeils im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
+
+
ANGEL_RIGHT_CIRCLE_THIN_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines nach rechts zeigenden Pfeils in einem Kreis im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
+
+
ANGEL_RIGHT_THIN_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines nach rechts zeigenden Pfeils im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
+
+
ANGEL_UP_CIRCLE_THIN_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines nach oben zeigenden Pfeils in einem Kreis im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
+
+
ANGEL_UP_THIN_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines nach oben zeigenden Pfeils im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
+
+
anyBase - Variable in class bitchanger.gui.controller.ConverterController
+
+
Spinner für die auswählbare, beliebige Basis
+
+
application - Variable in class bitchanger.gui.controller.BasicMenuController
+
 
+
arrayOf(T...) - Static method in class bitchanger.util.ArrayUtils
+
+
Wandelt eine Aufzählung von Objekten in ein Array um und gibt dieses zurück.
+
+
ArrayUtils - Class in bitchanger.util
+
+
Klasse, die Werkzeug-Methoden für Arrays enthält.
+
+
ArrayUtils() - Constructor for class bitchanger.util.ArrayUtils
+
+
Diese Klasse ist nicht instanziierbar
+
+
ARROW_DOWN_CIRCLE_FILLED_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines nach unten zeigenden Pfeils in einem gefüllten Kreis oder null, wenn das Icon nicht gefunden wurde
+
+
ARROW_DOWN_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines nach unten zeigenden Pfeils oder null, wenn das Icon nicht gefunden wurde
+
+
ARROW_LEFT_CIRCLE_FILLED_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines nach links zeigenden Pfeils in einem gefüllten Kreis oder null, wenn das Icon nicht gefunden wurde
+
+
ARROW_LEFT_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines nach links zeigenden Pfeils oder null, wenn das Icon nicht gefunden wurde
+
+
ARROW_RIGHT_CIRCLE_FILLED_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines nach rechts zeigenden Pfeils in einem gefüllten Kreis oder null, wenn das Icon nicht gefunden wurde
+
+
ARROW_RIGHT_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines nach rechts zeigenden Pfeils oder null, wenn das Icon nicht gefunden wurde
+
+
ARROW_UP_CIRCLE_FILLED_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines nach oben zeigenden Pfeils in einem gefüllten Kreis oder null, wenn das Icon nicht gefunden wurde
+
+
ARROW_UP_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines nach oben zeigenden Pfeils oder null, wenn das Icon nicht gefunden wurde
+
+
arrowButtons - Variable in class bitchanger.gui.controller.AlphaNumKeysController
+
+
HBox mit den Buttons, mit denen durch die Tastatur gescrollt werden kann.
+
+
arrowButtons - Variable in class bitchanger.gui.controls.AlphaNumKeys
+
+
HBox mit den Buttons, mit denen durch die Tastatur gescrollt werden kann.
+
+
asDouble() - Method in interface bitchanger.calculations.ChangeableNumber
+
 
+
+A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages
+
+ + + diff --git a/doc/0.1.4/de_private/index-files/index-10.html b/doc/0.1.4/de_private/index-files/index-10.html new file mode 100644 index 0000000..21d7549 --- /dev/null +++ b/doc/0.1.4/de_private/index-files/index-10.html @@ -0,0 +1,204 @@ + + + + + +K-Index + + + + + + + + + + + + + + + +
+ +
+
+
A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages + + +

K

+
+
KEYBOARD_BTN_KEY - Static variable in class bitchanger.gui.controls.AlphaNumKeys
+
+
Schlüsselwort für den Button zum Umschalten des Tastaturlayouts
+
+
keyboardBtn - Variable in class bitchanger.gui.controller.AlphaNumKeysController
+
+
Button zum Umschalten zwischen Nummernfeld und Alphabet-Ansicht
+
+
keyboardBtn - Variable in class bitchanger.gui.controls.AlphaNumKeys
+
+
Button zum Umschalten zwischen Nummernfeld und Alphabet-Ansicht
+
+
keyboardBtnKey - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
Schlüsselwort für den Button zum Umschalten des Tastaturlayouts
+
+
keyboardCloseGraphic - Variable in class bitchanger.gui.controller.AlphaNumKeysController
+
 
+
keyboardOpenGraphic - Variable in class bitchanger.gui.controller.AlphaNumKeysController
+
 
+
KEYBORD_CLOSE_FILLED_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des gefüllten Icons mit schließender Tastatur oder null, wenn das Icon nicht gefunden wurde
+
+
KEYBORD_CLOSE_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons mit schließender Tastatur oder null, wenn das Icon nicht gefunden wurde
+
+
KEYBORD_COMPACT_FILLED_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des gefüllten Icons mit kompakter Tastatur oder null, wenn das Icon nicht gefunden wurde
+
+
KEYBORD_COMPACT_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons mit kompakter Tastatur oder null, wenn das Icon nicht gefunden wurde
+
+
KEYBORD_FILLED_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des gefüllten Tastatur Icons oder null, wenn das Icon nicht gefunden wurde
+
+
KEYBORD_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Tastatur Icons oder null, wenn das Icon nicht gefunden wurde
+
+
KEYBORD_OPEN_FILLED_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des gefüllten Icons mit öffnender Tastatur oder null, wenn das Icon nicht gefunden wurde
+
+
KEYBORD_OPEN_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons mit öffnender Tastatur oder null, wenn das Icon nicht gefunden wurde
+
+
+A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages
+
+ + + diff --git a/doc/0.1.4/de_private/index-files/index-11.html b/doc/0.1.4/de_private/index-files/index-11.html new file mode 100644 index 0000000..2114628 --- /dev/null +++ b/doc/0.1.4/de_private/index-files/index-11.html @@ -0,0 +1,227 @@ + + + + + +L-Index + + + + + + + + + + + + + + + +
+ +
+
+
A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages + + +

L

+
+
LABEL_TEXTS - Static variable in class bitchanger.gui.views.ConverterView
+
+
Array, das die Beschriftungen für die Labels vor den Textfeldern definiert
+
+
LABEL_TEXTS - Static variable in class bitchanger.gui.views.IEEEView
+
+
Array, das die Beschriftungen für die Labels vor den Textfeldern definiert
+
+
labelColumn - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
Konstante, die die Spalte der GridPane definiert, in der die Labels positioniert werden
+
+
labelTexts - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
Array, das die Beschriftungen für die Labels vor den Textfeldern definiert
+
+
lastCaretPosition - Variable in class bitchanger.gui.controls.ValueField
+
+
Hilfsvariable für die letzte bekannte Position im Textfeld
+
+
launchFXApplication(String[]) - Static method in class bitchanger.main.PrimaryFXApp
+
+
Startet die Anwendung und öffnet das Applikationsfenster.
+
+
LAYOUT_CSS - Static variable in class bitchanger.util.Resources
+
+
Pfad zum Stylesheet für das allgemeine Layout oder null, wenn das CSS nicht gefunden wurde
+
+
LIGHT - bitchanger.preferences.Style
+
+
Konstante für ein helles Layout
+
+
LIGHT_BULB_1_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons einer "Glühbirne" mit Draht oder null, wenn das Icon nicht gefunden wurde
+
+
LIGHT_BULB_2_FILLED_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons einer gefüllten "Glühbirne" oder null, wenn das Icon nicht gefunden wurde
+
+
LIGHT_BULB_2_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons einer "Glühbirne" oder null, wenn das Icon nicht gefunden wurde
+
+
LIGHT_BULB_3_FILLED_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons einer leuchtenden gefüllten "Glühbirne" oder null, wenn das Icon nicht gefunden wurde
+
+
LIGHT_BULB_3_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons einer leuchtenden "Glühbirne" oder null, wenn das Icon nicht gefunden wurde
+
+
LIGHT_CSS - Static variable in class bitchanger.util.Resources
+
+
Pfad zum Stylesheet für die helle Darstellung oder null, wenn das CSS nicht gefunden wurde
+
+
listenScreenConfig() - Method in class bitchanger.gui.controller.BasicMenuController
+
 
+
load(File) - Method in class bitchanger.preferences.Preferences
+
+
Lädt alle Einstellungen aus der übergebenen XML-Datei
+
+
loadCustom() - Static method in class bitchanger.preferences.Preferences
+
+
Lädt die letzten Einstellungen aus der Datei Resources.CUSTOM_PREFERENCES
+
+
loadDefault() - Static method in class bitchanger.preferences.Preferences
+
+
Lädt die Standardeinstellungen aus der Datei Resources.DEFAULT_PREFERENCES
+
+
loadSVG(File) - Static method in class bitchanger.util.FXUtils
+
+
Lädt ein Icon im svg-Format aus der übergebenen Datei und erstellt aus der Datei ein SVGPath Objekt, + das dem Scenegraph in javaFX hinzugefügt werden kann.
+
+
+A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages
+
+ + + diff --git a/doc/0.1.4/de_private/index-files/index-12.html b/doc/0.1.4/de_private/index-files/index-12.html new file mode 100644 index 0000000..fa34a1a --- /dev/null +++ b/doc/0.1.4/de_private/index-files/index-12.html @@ -0,0 +1,236 @@ + + + + + +M-Index + + + + + + + + + + + + + + + +
+ +
+
+
A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages + + +

M

+
+
MAGIC_1_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines Zauberstabs oder null, wenn das Icon nicht gefunden wurde
+
+
MAGIC_2_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines Zauberstabs mit Blatt oder null, wenn das Icon nicht gefunden wurde
+
+
main(String[]) - Static method in class bitchanger.main.BitchangerLauncher
+
+
Die Main Methode startet die PrimaryFXApp der Anwendung und wartet, bis das Anwendungsfenster geschlossen wurde.
+
+
MAX_BASE - Static variable in class bitchanger.calculations.ConvertingNumbers
+
+
Eine Konstante für die größtmögliche Basis bei einem Zeichenvorrat von 0-9 und A-Z
+
+
MENU_DOTS_HORIZONTAL_FILLED_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Menü Icons mit drei horizontalen gefüllten Punkten oder null, wenn das Icon nicht gefunden wurde
+
+
MENU_DOTS_HORIZONTAL_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Menü Icons mit drei horizontalen Punkten oder null, wenn das Icon nicht gefunden wurde
+
+
MENU_DOTS_VERTICAL_FILLED_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Menü Icons mit drei vertikalen gefüllten Punkten oder null, wenn das Icon nicht gefunden wurde
+
+
MENU_DOTS_VERTICAL_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Menü Icons mit drei vertikalen Punkten oder null, wenn das Icon nicht gefunden wurde
+
+
MENU_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Menü Icons oder null, wenn das Icon nicht gefunden wurde
+
+
MENU_THIN_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Menü Icons in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
+
+
menubar - Variable in class bitchanger.gui.views.ViewBase
+
+
MenuBar des Scenegraphen
+
+
menuItemMap - Variable in class bitchanger.gui.controls.BasicMenuBar
+
+
Map, in der alle vom Controller benötigten MenuItems mit einem eindeutigen Schlüssel abgelegt werden
+
+
MIN_BASE - Static variable in class bitchanger.calculations.ConvertingNumbers
+
+
Eine Konstante für die kleinstmögliche Basis
+
+
MODUS_CALCULATOR_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
+
+
Schlüsselwort, mit dem das MenuItem "Berechnungen" in der Map BasicMenuBar.menuItemMap abgelegt ist
+
+
MODUS_CONVERTER_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
+
+
Schlüsselwort, mit dem das MenuItem "Umrechner" in der Map BasicMenuBar.menuItemMap abgelegt ist
+
+
MODUS_IEEE_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
+
+
Schlüsselwort, mit dem das MenuItem "IEEE" in der Map BasicMenuBar.menuItemMap abgelegt ist
+
+
MODUS_MENU_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
+
+
Schlüsselwort, mit dem das Menu "Modus" in der Map BasicMenuBar.menuItemMap abgelegt ist
+
+
modusCalculator - Variable in class bitchanger.gui.controller.BasicMenuController
+
 
+
modusConverter - Variable in class bitchanger.gui.controller.BasicMenuController
+
 
+
modusIEEE - Variable in class bitchanger.gui.controller.BasicMenuController
+
 
+
MONITOR_FILLED_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des gefüllten Monitor Icons oder null, wenn das Icon nicht gefunden wurde
+
+
MONITOR_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Monitor Icons oder null, wenn das Icon nicht gefunden wurde
+
+
moveToScreen - Variable in class bitchanger.gui.controller.BasicMenuController
+
 
+
+A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages
+
+ + + diff --git a/doc/0.1.4/de_private/index-files/index-13.html b/doc/0.1.4/de_private/index-files/index-13.html new file mode 100644 index 0000000..9878244 --- /dev/null +++ b/doc/0.1.4/de_private/index-files/index-13.html @@ -0,0 +1,188 @@ + + + + + +N-Index + + + + + + + + + + + + + + + +
+ +
+
+
A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages + + +

N

+
+
NEXT_BTN_KEY - Static variable in class bitchanger.gui.controls.AlphaNumKeys
+
+
Schlüsselwort für den Button zum Weiterscrollen durch die Tastatur
+
+
nextBtn - Variable in class bitchanger.gui.controller.AlphaNumKeysController
+
+
Button, mit dem durch die Tastatur vorwärts gescrollt werden kann
+
+
nextBtn - Variable in class bitchanger.gui.controls.AlphaNumKeys
+
+
Button, mit dem durch die Tastatur vorwärts gescrollt werden kann
+
+
nextBtnKey - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
Schlüsselwort für den Button zum Weiterscrollen durch die Tastatur
+
+
nodeMap - Variable in class bitchanger.gui.controller.ControllerBase
+
+
Map, die alle Nodes des gekapselten Controllables enthält, die eine Funktion erhalten + und weder eine Instanz von Button noch von Textfeld sind
+
+
nodeMap - Variable in class bitchanger.gui.views.ViewBase
+
+
Map, in die alle vom Controller benötigten Elemente der View mit einem + eindeutigen Schlüssel abgelegt werden, die keine Buttons oder Textfelder sind
+
+
NONE - bitchanger.gui.controls.InformationDialog.InformationType
+
 
+
NUM_KEYS - Static variable in class bitchanger.gui.controls.AlphaNumKeys
+
+
Array, das die Schlüsselwörter für die Zahlen-Buttons definiert
+
+
numKeys - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
Array, das die Schlüsselwörter für die Zahlen-Buttons definiert
+
+
+A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages
+
+ + + diff --git a/doc/0.1.4/de_private/index-files/index-14.html b/doc/0.1.4/de_private/index-files/index-14.html new file mode 100644 index 0000000..3b0e74b --- /dev/null +++ b/doc/0.1.4/de_private/index-files/index-14.html @@ -0,0 +1,187 @@ + + + + + +O-Index + + + + + + + + + + + + + + + +
+ +
+
+
A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages + + +

O

+
+
observeCommaProperty() - Method in class bitchanger.gui.controls.ValueField
+
+
Überwacht die CommaProperty aus Preferences und passt das Komma der Zahl in diesem Textfeld + bei Änderung an
+
+
observeGraphicScaling() - Method in class bitchanger.gui.controls.UnfocusedButton
+
 
+
observeScene() - Method in class bitchanger.main.PrimaryFXApp
+
 
+
observeStageOnShowing() - Method in class bitchanger.main.PrimaryFXApp
+
 
+
octalValue - Variable in class bitchanger.calculations.SimpleChangeableNumber
+
+
eingeschlossener Wert in der oktalen String-Darstellung
+
+
of(Controllable) - Static method in interface bitchanger.gui.controller.Controller
+
+
Factory-Methode, die einen neuen Controller für das übergebene Controllable erzeugt und zurückgibt.
+
+
ofArg(Controllable, Object...) - Static method in interface bitchanger.gui.controller.Controller
+
+
Factory-Methode, die einen neuen Controller für das übergebene Controllable erzeugt und zurückgibt.
+
+
ofSVGFile(File) - Static method in class bitchanger.util.IconFactory
+
 
+
options - Variable in class bitchanger.gui.controller.BasicMenuController
+
 
+
OPTIONS_INDICATE_FRACTIONAL_INACCURACY_CHECK_ITEM_KEY - Static variable in class bitchanger.gui.controls.ConverterMenuBar
+
+
Schlüsselwort, mit dem das CheckMenuItem "abgeschnittene Nachkommastellen kennzeichnen" in der Map BasicMenuBar.menuItemMap abgelegt ist
+
+
OPTIONS_MENU_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
+
+
Schlüsselwort, mit dem das Menu "Optionen" in der Map BasicMenuBar.menuItemMap abgelegt ist
+
+
+A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages
+
+ + + diff --git a/doc/0.1.4/de_private/index-files/index-15.html b/doc/0.1.4/de_private/index-files/index-15.html new file mode 100644 index 0000000..1dc1fbf --- /dev/null +++ b/doc/0.1.4/de_private/index-files/index-15.html @@ -0,0 +1,258 @@ + + + + + +P-Index + + + + + + + + + + + + + + + +
+ +
+
+
A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages + + +

P

+
+
paddingBottomProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
Property für den Abstand am unteren Rand der GridPane im Center
+
+
paddingLeftProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
Property für den Abstand am linken Rand der GridPane im Center
+
+
paddingRigthProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
Property für den Abstand am rechten Rand der GridPane im Center
+
+
paddingTopProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
Property für den Abstand am oberen Rand der GridPane im Center
+
+
PAINT_BRUSH_BUCKET_FILLED_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des gefüllten Icons eines Farbeimers mit Pinsel oder null, wenn das Icon nicht gefunden wurde
+
+
PAINT_BRUSH_BUCKET_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines Farbeimers mit Pinsel oder null, wenn das Icon nicht gefunden wurde
+
+
PAINT_BRUSH_FILLED_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des gefüllten Pinsel Icons oder null, wenn das Icon nicht gefunden wurde
+
+
PAINT_BRUSH_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Pinsel Icons oder null, wenn das Icon nicht gefunden wurde
+
+
PAINT_BRUSH_WINDOW_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons mit einem Fenster und Pinsel oder null, wenn das Icon nicht gefunden wurde
+
+
Preferences - Class in bitchanger.preferences
+
+
Preferences ist die globale Sammlung für alle möglichen Einstellungen, die am Bitchanger vorgenommen + werden können.
+
+
Preferences() - Constructor for class bitchanger.preferences.Preferences
+
+
Erstellt neue Preferences mit den Basiswerten.
+
+
Preferences(File) - Constructor for class bitchanger.preferences.Preferences
+
+
Erstellt neue Preferences mit den Einstellungen, die in der übergebenen Datei gespeichert sind oder den Standardeinstellungen, + wenn die übergebene Datei nicht gefunden oder geladen werden konnte.
+
+
PREFERENCES_GEAR_1_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines gefüllten Zahnrades oder null, wenn das Icon nicht gefunden wurde
+
+
PREFERENCES_GEAR_2_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons mit zwei gefüllten Zahnrädern oder null, wenn das Icon nicht gefunden wurde
+
+
PREFERENCES_GEAR_3_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons mit drei gefüllten Zahnrädern oder null, wenn das Icon nicht gefunden wurde
+
+
PREFERENCES_GEAR_THIN_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines Zahnrades im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
+
+
PREFERENCES_WRENCH_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines Schraubenschlüssels oder null, wenn das Icon nicht gefunden wurde
+
+
PREFERENCES_WRENCH_RESET_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines Schraubenschlüssels mit Rückgängig-Pfeil oder null, wenn das Icon nicht gefunden wurde
+
+
prefs - Static variable in class bitchanger.preferences.Preferences
+
+
Konstante, die alle aktuellen Einstellungen enthält
+
+
PREVIOUS_BTN_KEY - Static variable in class bitchanger.gui.controls.AlphaNumKeys
+
+
Schlüsselwort für den Button zum Rückwärtsscrollen durch die Tastatur
+
+
previousBtn - Variable in class bitchanger.gui.controller.AlphaNumKeysController
+
+
Button, mit dem durch die Tastatur zurück gescrollt werden kann
+
+
previousBtn - Variable in class bitchanger.gui.controls.AlphaNumKeys
+
+
Button, mit dem durch die Tastatur zurück gescrollt werden kann
+
+
previousBtnKey - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
Schlüsselwort für den Button zum Rückwärtsscrollen durch die Tastatur
+
+
PrimaryFXApp - Class in bitchanger.main
+
+
Hauptfenster der Applikation mit javaFX
+
+
PrimaryFXApp() - Constructor for class bitchanger.main.PrimaryFXApp
+
+
Erzeugt eine neue PrimaryFXApp für den Bitchanger
+
+
primaryStage - Variable in class bitchanger.main.PrimaryFXApp
+
+
Hauptfenster der Anwendung
+
+
+A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages
+
+ + + diff --git a/doc/0.1.4/de_private/index-files/index-16.html b/doc/0.1.4/de_private/index-files/index-16.html new file mode 100644 index 0000000..a5ee3fb --- /dev/null +++ b/doc/0.1.4/de_private/index-files/index-16.html @@ -0,0 +1,172 @@ + + + + + +Q-Index + + + + + + + + + + + + + + + +
+ +
+
+
A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages + + +

Q

+
+
QUESTION_CIRCLE_FILLED_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des gefüllten Frage Icons oder null, wenn das Icon nicht gefunden wurde
+
+
QUESTION_CIRCLE_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Frage Icons oder null, wenn das Icon nicht gefunden wurde
+
+
QUESTION_SPEECH_BUBBLE_FILLED_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Frage Icons in einer gefüllten Sprechblase oder null, wenn das Icon nicht gefunden wurde
+
+
QUESTION_SPEECH_BUBBLE_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Frage Icons in einer Sprechblase oder null, wenn das Icon nicht gefunden wurde
+
+
QUESTION_THIN_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Frage Icons in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
+
+
+A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages
+
+ + + diff --git a/doc/0.1.4/de_private/index-files/index-17.html b/doc/0.1.4/de_private/index-files/index-17.html new file mode 100644 index 0000000..c715075 --- /dev/null +++ b/doc/0.1.4/de_private/index-files/index-17.html @@ -0,0 +1,197 @@ + + + + + +R-Index + + + + + + + + + + + + + + + +
+ +
+
+
A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages + + +

R

+
+
readOnlyStyleProperty - Variable in class bitchanger.preferences.Preferences
+
+
ReadOnlyProperty für das gewählte Stylesheet
+
+
readOnlyStylesheetProperty - Variable in class bitchanger.preferences.Preferences
+
+
ReadOnlyProperty für das gewählte Stylesheet
+
+
register(Class<? extends Controllable>, Class<? extends Controller>) - Static method in interface bitchanger.gui.controller.Controller
+
+
Registriert eine Controller-Klasse für die Factory-Methode Controller.of(Controllable) + und ordnet diese einer Controllable-Klasse zu.
+
+
REGISTERED_CONTROLLERS - Static variable in interface bitchanger.gui.controller.Controller
+
+
Map, die die für ein Controllable registrierten Controller speichert und diese verknüpft
+
+
reset() - Method in interface bitchanger.calculations.ChangeableNumber
+
+
Setzt den eingeschlossenen Wert zurück.
+
+
reset() - Method in class bitchanger.calculations.SimpleChangeableNumber
+
+
Setzt den eingeschlossenen Wert zurück.
+
+
resetPreferences - Variable in class bitchanger.gui.controller.BasicMenuController
+
 
+
resetPreferencesAction() - Method in class bitchanger.gui.controller.BasicMenuController
+
 
+
Resources - Class in bitchanger.util
+
+
Enthält alle benötigten Ressourcen, wie Pfade zu den CSS Dateien oder den Icons
+
+
Resources() - Constructor for class bitchanger.util.Resources
+
+
Diese Klasse ist nicht instanziierbar
+
+
root - Variable in class bitchanger.gui.views.ViewBase
+
+
Wurzelknoten im Scenegraph
+
+
ROW_COUNT - Static variable in class bitchanger.gui.controls.AlphaNumKeys
+
+
Konstante, die die Anzahl der Zeilen dieser Tastaturmatrix enthält
+
+
+A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages
+
+ + + diff --git a/doc/0.1.4/de_private/index-files/index-18.html b/doc/0.1.4/de_private/index-files/index-18.html new file mode 100644 index 0000000..8927aa0 --- /dev/null +++ b/doc/0.1.4/de_private/index-files/index-18.html @@ -0,0 +1,567 @@ + + + + + +S-Index + + + + + + + + + + + + + + + +
+ +
+
+
A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages + + +

S

+
+
scene - Variable in class bitchanger.gui.controller.AlphaNumKeysController
+
+
Scene, an die dieser Controller gebunden wird und die alle simulierten KeyEvents erhält
+
+
scene - Variable in class bitchanger.gui.views.ViewBase
+
+
Szene, die von der View repräsentiert wird
+
+
separateByComma(String) - Static method in class bitchanger.calculations.ConvertingNumbers
+
+
Separiert den Anteil vor und nach dem Komma bzw.
+
+
set(double) - Method in interface bitchanger.calculations.ChangeableNumber
+
 
+
setActions() - Method in class bitchanger.gui.controller.AlphaNumKeysController
+
+
Setzt die Actions zum Umschalten zwischen den Tastaturmodi, zum scrollen durch die Tastatur, zur Aktualisierung des Komma-Buttons + und simuliert die Tastatureingaben für die alphanumerischen Buttons.
+
+
setActions() - Method in class bitchanger.gui.controller.BasicMenuController
+
+
Setzt alle für die View benötigten Funktionen.
+
+
setActions() - Method in interface bitchanger.gui.controller.Controller
+
+
Setzt alle für die View benötigten Funktionen.
+
+
setActions() - Method in class bitchanger.gui.controller.ConverterController
+
+
Setzt alle für die View benötigten Funktionen.
+
+
setActions() - Method in class bitchanger.gui.controller.ConverterMenuController
+
+
Setzt alle für die View benötigten Funktionen.
+
+
setActions() - Method in class bitchanger.gui.controller.IEEEController
+
+
Setzt alle für die View benötigten Funktionen.
+
+
setActions() - Method in class bitchanger.gui.controls.BaseSpinner
+
+
Setzt einen EventHandler, der bei Eingabe im Editor automatisch den Wert überprüft + und, wenn möglich, mit der Methode Spinner.commitValue() aktualisiert.
+
+
setAllToKeyboard(char) - Method in class bitchanger.gui.controller.AlphaNumKeysController
+
+
Setzt bei allen Buttons die Texte.
+
+
setAlphaButtonTexts(char) - Method in class bitchanger.gui.controller.AlphaNumKeysController
+
+
Setzt die Texte der Alpha-Buttons in der Reihenfolge von AlphaNumKeys.ALPHA_KEYS.
+
+
setAlphaNumBindings() - Method in class bitchanger.gui.controller.ConverterController
+
+
Bindet die baseProperty aller alphanumerischen Buttons an das Attribut ConverterController.baseProperty, um die Buttons + bei einem Wechsel der Basis automatisch aus- oder einzublenden.
+
+
setAnyValListener() - Method in class bitchanger.gui.controller.ConverterController
+
+
Setzt den Listener für ConverterController.tfAny, um die Eingabe direkt umzuwandeln und die anderen Textfelder zu aktualisieren.
+
+
setArrowScaleFactors(double) - Method in class bitchanger.gui.controller.AlphaNumKeysController
+
 
+
setBackspaceAction() - Method in class bitchanger.gui.controller.ConverterController
+
+
Lässt den Backspace-Button die Backspace-Taste auf der Tastatur simulieren.
+
+
setBase(int) - Method in class bitchanger.gui.controls.ValueButton
+
+
Setzt den Wert für die Basis
+
+
setBase(int) - Method in class bitchanger.gui.controls.ValueField
+
+
Setzt den Wert der ValueField.baseProperty
+
+
setBaseListener() - Method in class bitchanger.gui.controls.ValueButton
+
+
Überprüft die baseProperty und aktiviert bzw. deaktiviert diesen Button, wenn der Text + zum neuen Wert der baseProperty passt bzw. nicht passt
+
+
setBin(String) - Method in interface bitchanger.calculations.ChangeableNumber
+
+
Setzt den Wert dieser ChangeableNumber auf den Wert eines binären Strings
+
+
setBin(String) - Method in class bitchanger.calculations.SimpleChangeableNumber
+
+
Setzt den Wert dieser ChangeableNumber auf den Wert eines binären Strings
+
+
setBinValListener() - Method in class bitchanger.gui.controller.ConverterController
+
+
Setzt den Listener für ConverterController.tfBin, um die Eingabe direkt umzuwandeln und die anderen Textfelder zu aktualisieren.
+
+
setButtonActions() - Method in class bitchanger.gui.controller.ConverterController
+
+
Setzt die Actions für alle Buttons
+
+
setChooseCommaAction(MenuItem, Comma) - Method in class bitchanger.gui.controls.BasicMenuBar
+
+
Setzt die Action des übergebenen MenuItems, sodass das spezifische Comma in den Einstellungen + gesetzt wird.
+
+
setClearAction() - Method in class bitchanger.gui.controller.ConverterController
+
+
Setzt ConverterController.value bei Klick auf den Clear-Button zurück und aktualisiert alle Textfelder.
+
+
setColumnConstraints() - Method in class bitchanger.gui.views.AlphaNumGridView
+
+
Setzt alle ColumnConstraints für center.
+
+
setCommaBinding() - Method in class bitchanger.gui.controller.AlphaNumKeysController
+
+
Bindet den Text des Komma-Buttons an das CommaProperty.
+
+
setDec(String) - Method in interface bitchanger.calculations.ChangeableNumber
+
+
Setzt den Wert dieser ChangeableNumber auf den Wert eines dezimalen Strings
+
+
setDec(String) - Method in class bitchanger.calculations.SimpleChangeableNumber
+
+
Setzt den Wert dieser ChangeableNumber auf den Wert eines dezimalen Strings
+
+
setDecValListener() - Method in class bitchanger.gui.controller.ConverterController
+
+
Setzt den Listener für ConverterController.tfDec, um die Eingabe direkt umzuwandeln und die anderen Textfelder zu aktualisieren.
+
+
setGraphicScaleFactor(Double) - Method in class bitchanger.gui.controls.UnfocusedButton
+
 
+
setGridConstraints(int, int, int, int, Queue<T>) - Static method in class bitchanger.util.FXUtils
+
+
Setzt die Constrains der Nodes in einer Schlange, um diese in einer GridPane zu positionieren.
+
+
setGridConstraints(int, int, int, int, Queue<T>, TriConsumer<Node, Integer, Integer>) - Static method in class bitchanger.util.FXUtils
+
+
Arbeitet Nodes in einer Schlange als Tabelle ab.
+
+
setHex(String) - Method in interface bitchanger.calculations.ChangeableNumber
+
+
Setzt den Wert dieser ChangeableNumber auf den Wert eines hexadezimalen Strings
+
+
setHex(String) - Method in class bitchanger.calculations.SimpleChangeableNumber
+
+
Setzt den Wert dieser ChangeableNumber auf den Wert eines hexadezimalen Strings
+
+
setHexValListener() - Method in class bitchanger.gui.controller.ConverterController
+
+
Setzt den Listener für ConverterController.tfHex, um die Eingabe direkt umzuwandeln und die anderen Textfelder zu aktualisieren.
+
+
setIconOrText(Labeled, SVGIcon) - Static method in class bitchanger.util.FXUtils
+
 
+
setIconOrText(Labeled, SVGIcon, String) - Static method in class bitchanger.util.FXUtils
+
 
+
setIconOrText(MenuItem, SVGIcon) - Static method in class bitchanger.util.FXUtils
+
 
+
setIconOrText(MenuItem, SVGIcon, String) - Static method in class bitchanger.util.FXUtils
+
 
+
setIndicateFractionalPrecision(boolean) - Method in class bitchanger.preferences.Preferences
+
+
Schaltet die Anzeige von abgebrochenen Nachkommastellen ein und aus
+
+
setInitialState() - Method in class bitchanger.gui.controller.ConverterController
+
+
Setzt die Attribute auf den Ausgangszustand.
+
+
setKeyboardBtnAction() - Method in class bitchanger.gui.controller.AlphaNumKeysController
+
+
Setzt die Funktion zum Wechseln des Tastatur-Modus beim Klick auf den Button AlphaNumKeysController.keyboardBtn.
+
+
setMaxSizes(Iterable<? extends Node>, double) - Static method in class bitchanger.util.FXUtils
+
+
Setzt die maximale Größe aller Controls in einem Iterable auf den Wert maxSize.
+
+
setMaxSizes(Iterable<? extends Node>, double, double) - Static method in class bitchanger.util.FXUtils
+
+
Setzt die maximale Breite aller Controls in einem Iterable auf den Wert maxWidth und + die maximale Höhe auf den Wert maxHeight.
+
+
setMenuBar(T) - Method in interface bitchanger.gui.views.Viewable
+
+
Setzt die übergebene MenuBar in den Scenegraph der View.
+
+
setMenuBar(V) - Method in class bitchanger.gui.views.ViewBase
+
+
Setzt die übergebene MenuBar in den Scenegraph der View.
+
+
setNextBtnAction() - Method in class bitchanger.gui.controller.AlphaNumKeysController
+
+
Setzt die Funktion zum vorwärts scrollen durch die Alpha-Tastatur beim Klick auf den Button AlphaNumKeysController.nextBtn.
+
+
setNextBtnDisable() - Method in class bitchanger.gui.controller.AlphaNumKeysController
+
+
Setzt ChangeListener beim letzten Alpha-Button und beim letzten Nummer-Button, um zu überwachen, ob das Ende des Alphabets erreicht wurde.
+
+
setNumButtonTexts() - Method in class bitchanger.gui.controller.AlphaNumKeysController
+
+
Setzt die Texte der nummerischen-Buttons in der Reihenfolge von AlphaNumKeys.NUM_KEYS.
+
+
setOct(String) - Method in interface bitchanger.calculations.ChangeableNumber
+
+
Setzt den Wert dieser ChangeableNumber auf den Wert eines oktalen Strings
+
+
setOct(String) - Method in class bitchanger.calculations.SimpleChangeableNumber
+
+
Setzt den Wert dieser ChangeableNumber auf den Wert eines oktalen Strings
+
+
setOctValListener() - Method in class bitchanger.gui.controller.ConverterController
+
+
Setzt den Listener für ConverterController.tfOct, um die Eingabe direkt umzuwandeln und die anderen Textfelder zu aktualisieren.
+
+
setPreviousBtnAction() - Method in class bitchanger.gui.controller.AlphaNumKeysController
+
+
Setzt die Funktion zum rückwärts scrollen durch die Alpha-Tastatur beim Klick auf den Button AlphaNumKeysController.previousBtn.
+
+
setPreviousBtnDisable() - Method in class bitchanger.gui.controller.AlphaNumKeysController
+
+
Setzt einen ChangeListener beim ersten Alpha-Button, um zu überwachen, ob der Anfang des Alphabets erreicht wurde.
+
+
setRowConstraints() - Method in class bitchanger.gui.views.AlphaNumGridView
+
+
Setzt alle RowConstraints für center.
+
+
setScreenItems() - Method in class bitchanger.gui.controller.BasicMenuController
+
 
+
setSignAction() - Method in class bitchanger.gui.controller.ConverterController
+
+
Kehrt das Vorzeichen von ConverterController.value beim Klick auf den Vorzeichen-Button um und aktualisiert alle Textfelder.
+
+
setSimulateKeyEvents() - Method in class bitchanger.gui.controller.AlphaNumKeysController
+
+
Setzt die Actions aller alphanumerischen Buttons und des Komma-Buttons, um mit diesen Buttons eine Tastatur zu simulieren.
+
+
setSimulateKeyOnAction(Button) - Method in class bitchanger.gui.controller.AlphaNumKeysController
+
+
Fügt einem Button die Funktion hinzu, dass dieser beim Klick einen Druck einer Taste auf der Tastatur simuliert.
+
+
setSpinnerActions() - Method in class bitchanger.gui.controller.ConverterController
+
+
Aktualisiert die Basis von ConverterController.tfAny, wenn sich die valueProperty von ConverterController.anyBase ändert.
+
+
setStageSize() - Method in class bitchanger.main.PrimaryFXApp
+
+
Passt die minimale und die maximale Größe des Fensters an die Größe der aktuellen Szene (currentView) an
+
+
setStylesheet(Style) - Method in class bitchanger.preferences.Preferences
+
+
Saves the location of the Stylesheet with the given Style in the Preferences.stylesheetProperty.
+
+
setStylesheet(String) - Method in class bitchanger.preferences.Preferences
+
+
Searches for the resource with the given path and saves the location of the resource in the Preferences.stylesheetProperty.
+
+
setSVG(SVGPath) - Method in class bitchanger.gui.controls.SVGIcon
+
 
+
setSVGStyle(SVGIcon, SVGPath, SVGPath, Style) - Static method in class bitchanger.util.IconFactory
+
+
Setzt den SVG-Pfad des SVGIcon icon auf den Pfad von lightSVG oder darkSVG, basierend auf dem Style style.
+
+
setTextFieldActions() - Method in class bitchanger.gui.controller.ConverterController
+
+
Setzt Listener für die Textfelder, um die Eingabe direkt in alle anderen Zahlensysteme umzuwandeln.
+
+
setTextListener() - Method in class bitchanger.gui.controls.ValueButton
+
+
Überprüft die textProperty und aktiviert bzw. deaktiviert diesen Button, wenn der neue Text + zur baseProperty passt bzw. nicht passt
+
+
setTexts(boolean, boolean, boolean, boolean, boolean) - Method in class bitchanger.gui.controller.ConverterController
+
+
Aktualisiert die Texte der gewählten Textfelder mit dem aktuellen Wert von ConverterController.value in der + zum Textfeld gehörenden Darstellung.
+
+
setTFColumnSpan - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
true, wenn die Textfelder über die Anzahl der Spalten von der Tastatur verteilt werden sollen.
+
+
setTFSelection() - Method in class bitchanger.gui.controller.ConverterController
+
+
Aktualisiert das Attribut ConverterController.focusedTF bei Auswahl eines Textfeldes durch einen Mausklick und + verbindet ConverterController.baseProperty mit der baseProperty des Textfelds.
+
+
setValue(String, int) - Method in interface bitchanger.calculations.ChangeableNumber
+
+
Setzt den Wert dieser ChangeableNumber auf einen Wert in einem beliebigen Zahlensystem
+
+
setValue(String, int) - Method in class bitchanger.calculations.SimpleChangeableNumber
+
+
Setzt den Wert dieser ChangeableNumber auf einen Wert in einem beliebigen Zahlensystem
+
+
showAboutAction() - Method in class bitchanger.gui.controller.BasicMenuController
+
 
+
showFullscreen - Variable in class bitchanger.gui.controller.BasicMenuController
+
 
+
showVersionAction() - Method in class bitchanger.gui.controller.BasicMenuController
+
 
+
SIGN_BTN_KEY - Static variable in class bitchanger.gui.controls.AlphaNumKeys
+
+
Schlüsselwort für den Button zum Vorzeichenwechsel
+
+
signBtn - Variable in class bitchanger.gui.controller.AlphaNumKeysController
+
+
Button, mit dem das Vorzeichen der eingegebenen Zahl gewechselt wird
+
+
signBtn - Variable in class bitchanger.gui.controller.ConverterController
+
+
Button, mit dem das Vorzeichen der Zahl gewechselt werden kann
+
+
signBtnKey - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
Schlüsselwort für den Button zum Vorzeichenwechsel
+
+
SimpleChangeableNumber - Class in bitchanger.calculations
+
+
Die Klasse SimpleChangeableNumber bietet eine vollständige Implementierung von ChangeableNumber.
+
+
SimpleChangeableNumber() - Constructor for class bitchanger.calculations.SimpleChangeableNumber
+
+
Erzeugt eine neue Instanz mit dem eingeschlossenen Wert 0
+
+
SimpleChangeableNumber(String) - Constructor for class bitchanger.calculations.SimpleChangeableNumber
+
+
Erzeugt eine neue Instanz, die den übergebenen dezimal-Wert repräsentiert
+
+
simulateKey(Button, KeyCode) - Method in class bitchanger.gui.controller.AlphaNumKeysController
+
+
Simuliert den Druck der Taste auf einer Tastatur mit dem spezifischen keycode und feuert nacheinander die KeyEvents + KeyEvent.KEY_PRESSED, KeyEvent.KEY_TYPED und KeyEvent.KEY_RELEASED.
+
+
simulateKeyEvents(Button, Node, Scene, String, String, KeyCode) - Method in class bitchanger.gui.controller.ControllerBase
+
+
Verhält sich wie ControllerBase.simulateKeyEvents(Button, Node, Scene, String, String, KeyCode, boolean, boolean, boolean, boolean), + bis auf dass die Parameter shiftDown, controlDown, altDown und metaDown alle den Wert false haben.
+
+
simulateKeyEvents(Button, Node, Scene, String, String, KeyCode, boolean, boolean, boolean, boolean) - Method in class bitchanger.gui.controller.ControllerBase
+
+
Simuliert den Druck der Taste auf einer Tastatur mit dem spezifischen keycode und feuert nacheinander die KeyEvents + KeyEvent.KEY_PRESSED, KeyEvent.KEY_TYPED und KeyEvent.KEY_RELEASED an den gewählten Empfänger + target.
+
+
spacingProperty - Variable in class bitchanger.gui.controls.AlphaNumKeys
+
+
Property für den Abstand der Buttons previousBtn und nextBtn in der HBox arrowButtons
+
+
splitInBlocks(String, int) - Static method in class bitchanger.calculations.ConvertingNumbers
+
+
Unterteilt den übergebenen String in Blöcke mit der gegebenen Länge, beispielsweise + zur Tausendertrennung
+
+
start(Stage) - Method in class bitchanger.main.PrimaryFXApp
+
+
Diese Methode erstellt den Inhalt für das PrimaryFXApp und öffnet dieses.
+
+
store(File) - Method in class bitchanger.preferences.Preferences
+
+
Speichert alle Einstellungen in der übergebenen Datei im XML-Format
+
+
storeCaretPosition(ObservableValue<? extends Number>, Number, Number) - Method in class bitchanger.gui.controls.ValueField
+
+
Speichert die letzte bekannte CaretPosition, um diese zurücksetzen zu können.
+
+
storeCustom() - Static method in class bitchanger.preferences.Preferences
+
+
Speichert die aktuellen Einstellungen in der Datei Resources.CUSTOM_PREFERENCES
+
+
Style - Enum in bitchanger.preferences
+
+
Aufzählung für verschiedene Stile, die als CSS Datei für javaFX verfügbar sind
+
+
Style() - Constructor for enum bitchanger.preferences.Style
+
 
+
styleBindIcon(File, File) - Static method in class bitchanger.util.IconFactory
+
+
Erzeugt ein neues SVGIcon, das je nach eingestelltem Style in Preferences.readOnlyStyleProperty der svg-Datei + lightIconFile oder darkIconFile entspricht und sich automatisch bei Änderung des Styles anpasst.
+
+
styleDark - Variable in class bitchanger.gui.controller.BasicMenuController
+
 
+
styleLight - Variable in class bitchanger.gui.controller.BasicMenuController
+
 
+
styleMenu - Variable in class bitchanger.gui.controller.BasicMenuController
+
 
+
styleProperty - Variable in class bitchanger.preferences.Preferences
+
+
Property für den gewählten Style des Stylesheets
+
+
stylesheetProperty - Variable in class bitchanger.preferences.Preferences
+
+
Property für das gewählte Stylesheet
+
+
SUN_FILLED_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des gefüllten Icons einer Sonne oder null, wenn das Icon nicht gefunden wurde
+
+
SUN_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons einer Sonne oder null, wenn das Icon nicht gefunden wurde
+
+
SVGIcon - Class in bitchanger.gui.controls
+
 
+
SVGIcon() - Constructor for class bitchanger.gui.controls.SVGIcon
+
 
+
SVGIcon(File) - Constructor for class bitchanger.gui.controls.SVGIcon
+
 
+
SVGIcon(SVGPath) - Constructor for class bitchanger.gui.controls.SVGIcon
+
 
+
switchFullscreenAction() - Method in class bitchanger.gui.controller.BasicMenuController
+
 
+
switchIndicateFractionalInaccuracyAction() - Method in class bitchanger.gui.controller.ConverterMenuController
+
 
+
SYNC_1_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons mit zwei runden Pfeilen gegen den Uhrzeigersinn oder null, wenn das Icon nicht gefunden wurde
+
+
SYNC_2_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons mit drei runden Pfeilen gegen den Uhrzeigersinn oder null, wenn das Icon nicht gefunden wurde
+
+
+A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages
+
+ + + diff --git a/doc/0.1.4/de_private/index-files/index-19.html b/doc/0.1.4/de_private/index-files/index-19.html new file mode 100644 index 0000000..48a8742 --- /dev/null +++ b/doc/0.1.4/de_private/index-files/index-19.html @@ -0,0 +1,343 @@ + + + + + +T-Index + + + + + + + + + + + + + + + +
+ +
+
+
A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages + + +

T

+
+
TEXT_FIELD_ROW - bitchanger.gui.views.AlphaNumGridView.ConstraintType
+
+
Konstante für eine Zeile, die Textfelder enthält
+
+
TEXTFIELD_1_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines Textfeldes mit drei Punkten und einem Unterstrich oder null, wenn das Icon nicht gefunden wurde
+
+
TEXTFIELD_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines Textfeldes mit vier Punkten oder null, wenn das Icon nicht gefunden wurde
+
+
textFieldMap - Variable in class bitchanger.gui.controller.ControllerBase
+
+
Map, die alle Textfelder des gekapselten Controllables enthält
+
+
TF_ANY_KEY - Static variable in class bitchanger.gui.views.ConverterView
+
+
Schlüsselwort, mit das Textfeld für die Darstellung zu einer wählbaren Basis in der Map tfMap gespeichert wird
+
+
TF_BIN_KEY - Static variable in class bitchanger.gui.views.ConverterView
+
+
Schlüsselwort, mit das Textfeld für die binäre Darstellung in der Map tfMap gespeichert wird
+
+
TF_DEC_KEY - Static variable in class bitchanger.gui.views.ConverterView
+
+
Schlüsselwort, mit das Textfeld für die dezimale Darstellung in der Map tfMap gespeichert wird
+
+
TF_DEC_KEY - Static variable in class bitchanger.gui.views.IEEEView
+
+
Schlüsselwort, mit das Textfeld für die dezimale Darstellung in der Map tfMap gespeichert wird
+
+
TF_HEX_KEY - Static variable in class bitchanger.gui.views.ConverterView
+
+
Schlüsselwort, mit das Textfeld für die hexadezimale Darstellung in der Map tfMap gespeichert wird
+
+
TF_IEEE_KEY - Static variable in class bitchanger.gui.views.IEEEView
+
+
Schlüsselwort, mit das Textfeld für die IEEE Darstellung in der Map tfMap gespeichert wird
+
+
TF_KEYS - Static variable in class bitchanger.gui.views.ConverterView
+
+
Array, das die Schlüsselwörter definiert, mit denen die Textfelder in der Map tfMap gespeichert werden
+
+
TF_OCT_KEY - Static variable in class bitchanger.gui.views.ConverterView
+
+
Schlüsselwort, mit das Textfeld für die oktale Darstellung in der Map tfMap gespeichert wird
+
+
tfAny - Variable in class bitchanger.gui.controller.ConverterController
+
+
Textfeld für die Darstellung zu einer wählbaren Basis
+
+
tfAnyKey - Variable in class bitchanger.gui.views.ConverterView
+
+
Schlüsselwort, mit das Textfeld für die Darstellung zu einer wählbaren Basis in der Map tfMap gespeichert wird
+
+
tfBin - Variable in class bitchanger.gui.controller.ConverterController
+
+
Textfeld für die binäre Darstellung
+
+
tfBinKey - Variable in class bitchanger.gui.views.ConverterView
+
+
Schlüsselwort, mit das Textfeld für die binäre Darstellung in der Map tfMap gespeichert wird
+
+
tfColumn - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
Konstante, die die Spalte der GridPane definiert, in der die Textfelder positioniert werden
+
+
tfDec - Variable in class bitchanger.gui.controller.ConverterController
+
+
Textfeld für die dezimale Darstellung
+
+
tfDecKey - Variable in class bitchanger.gui.views.ConverterView
+
+
Schlüsselwort, mit das Textfeld für die dezimale Darstellung in der Map tfMap gespeichert wird
+
+
tfDecKey - Variable in class bitchanger.gui.views.IEEEView
+
+
Schlüsselwort, mit das Textfeld für die dezimale Darstellung in der Map tfMap gespeichert wird
+
+
tfHex - Variable in class bitchanger.gui.controller.ConverterController
+
+
Textfeld für die hexadezimale Darstellung
+
+
tfHexKey - Variable in class bitchanger.gui.views.ConverterView
+
+
Schlüsselwort, mit das Textfeld für die hexadezimale Darstellung in der Map tfMap gespeichert wird
+
+
tfIEEEKey - Variable in class bitchanger.gui.views.IEEEView
+
+
Schlüsselwort, mit das Textfeld für die IEEE Darstellung in der Map tfMap gespeichert wird
+
+
tfKeys - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
Array, das die Schlüsselwörter definiert, mit denen die Textfelder in der Map tfMap gespeichert werden
+
+
tfMap - Variable in class bitchanger.gui.views.ViewBase
+
+
Map, in die alle vom Controller benötigten Textfelder der View + mit einem eindeutigen Schlüssel abgelegt werden
+
+
tfMaxHeightProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
Property für die maximale Höhe der Textfelder in dieser View
+
+
tfMinHeightProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
Property für die minimale Höhe der Textfelder in dieser View
+
+
tfOct - Variable in class bitchanger.gui.controller.ConverterController
+
+
Textfeld für die oktale Darstellung
+
+
tfOctKey - Variable in class bitchanger.gui.views.ConverterView
+
+
Schlüsselwort, mit das Textfeld für die oktale Darstellung in der Map tfMap gespeichert wird
+
+
toBaseString(int) - Method in interface bitchanger.calculations.ChangeableNumber
+
+
Gibt die String-Darstellung dieser ChangeableNumber zu einer beliebigen Basis zurück.
+
+
toBaseString(int) - Method in class bitchanger.calculations.SimpleChangeableNumber
+
+
Gibt die String-Darstellung dieser ChangeableNumber zu einer beliebigen Basis zurück.
+
+
toBinString() - Method in interface bitchanger.calculations.ChangeableNumber
+
+
Gibt die String-Darstellung dieser ChangeableNumber als binären String zurück.
+
+
toBinString() - Method in class bitchanger.calculations.SimpleChangeableNumber
+
+
Gibt die String-Darstellung dieser ChangeableNumber als binären String zurück.
+
+
toDecString() - Method in interface bitchanger.calculations.ChangeableNumber
+
+
Gibt die String-Darstellung dieser ChangeableNumber als dezimalen String zurück.
+
+
toDecString() - Method in class bitchanger.calculations.SimpleChangeableNumber
+
+
Gibt die String-Darstellung dieser ChangeableNumber als dezimalen String zurück.
+
+
toHexString() - Method in interface bitchanger.calculations.ChangeableNumber
+
+
Gibt die String-Darstellung dieser ChangeableNumber als hexadezimalen String zurück.
+
+
toHexString() - Method in class bitchanger.calculations.SimpleChangeableNumber
+
+
Gibt die String-Darstellung dieser ChangeableNumber als hexadezimalen String zurück.
+
+
toOctString() - Method in interface bitchanger.calculations.ChangeableNumber
+
+
Gibt die String-Darstellung dieser ChangeableNumber als oktalen String zurück.
+
+
toOctString() - Method in class bitchanger.calculations.SimpleChangeableNumber
+
+
Gibt die String-Darstellung dieser ChangeableNumber als oktalen String zurück.
+
+
toString() - Method in class bitchanger.calculations.SimpleChangeableNumber
+
+
Gibt einen String zurück, der die hexadezimale, dezimale, oktale und + binäre Darstellung des eingeschlossenen Wertes enthält.
+
+
TRASH_FILLED_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines gefüllten Mülleimers oder null, wenn das Icon nicht gefunden wurde
+
+
TRASH_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines Mülleimers oder null, wenn das Icon nicht gefunden wurde
+
+
TRASH_THIN_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines Mülleimers in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
+
+
TRASH_X_FILLED_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines gefüllten Mülleimers mit 'X'-Symbol oder null, wenn das Icon nicht gefunden wurde
+
+
TRASH_X_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines Mülleimers mit 'X'-Symbol oder null, wenn das Icon nicht gefunden wurde
+
+
TriConsumer<T,​U,​V> - Interface in bitchanger.util
+
+
Repräsentiert eine Operation, die drei Übergabeparameter akzeptiert und keine Rückgabe hat.
+
+
trimToNumberString(String) - Static method in class bitchanger.calculations.ConvertingNumbers
+
+
Schneidet den übergebenen String so zu, dass dieser nicht mehr den Indikator für abgeschnittene Nachkommastellen + und keine Leerzeichen enthält und wandelt alle Buchstaben in Großbuchstaben um.
+
+
+A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages
+
+ + + diff --git a/doc/0.1.4/de_private/index-files/index-2.html b/doc/0.1.4/de_private/index-files/index-2.html new file mode 100644 index 0000000..e9e16d3 --- /dev/null +++ b/doc/0.1.4/de_private/index-files/index-2.html @@ -0,0 +1,326 @@ + + + + + +B-Index + + + + + + + + + + + + + + + +
+ +
+
+
A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages + + +

B

+
+
backspaceBtnKey - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
Schlüsselwort, mit dem der Backspace-Button in der Map btnMap gespeichert wird
+
+
backspcBtn - Variable in class bitchanger.gui.controller.ConverterController
+
+
Button that simulate the backspace key
+
+
baseProperty - Variable in class bitchanger.gui.controller.ConverterController
+
+
Property zum Einstellen der Basis des aktuell fokussierten Textfelds
+
+
baseProperty - Variable in class bitchanger.gui.controls.ValueButton
+
+
Property, über das die Basis des aktuellen Zahlensystems eingestellt wird
+
+
baseProperty - Variable in class bitchanger.gui.controls.ValueField
+
+
Property für die Basis des Zahlensystems
+
+
BaseSpinner - Class in bitchanger.gui.controls
+
+
Spinner, mit dem die Basis für ein Zahlensystem ausgewählt werden kann.
+
+
BaseSpinner() - Constructor for class bitchanger.gui.controls.BaseSpinner
+
+
Erzeugt einen BaseSpinner, bei dem die minimale und maximale einstellbare Basis durch die Konstanten + ConvertingNumbers.MIN_BASE und ConvertingNumbers.MAX_BASE gegeben sind.
+
+
baseSpinnerKey - Variable in class bitchanger.gui.views.ConverterView
+
+
Schlüsselwort, mit dem der Spinner für die beliebige Basis in der Map nodeMap gespeichert wird
+
+
baseToDec(int, String) - Static method in class bitchanger.calculations.ConvertingNumbers
+
+
Wandelt die übergebene Zahl value zur beliebigen Basis base in eine Zahl zur Basis 10 als double um.
+
+
baseToDecFractionalPart(int, String) - Static method in class bitchanger.calculations.ConvertingNumbers
+
+
Wandelt den übergebenen Nachkommateil einer Zahl zu einer beliebigen Basis ins Zehnersystem um.
+
+
baseToDecIntPart(int, String) - Static method in class bitchanger.calculations.ConvertingNumbers
+
+
Wandelt die übergebene ganze Zahl integerPart zur beliebigen Basis base ins Zehnersystem um.
+
+
baseToDecString(int, String) - Static method in class bitchanger.calculations.ConvertingNumbers
+
+
Wandelt die übergebene Zahl value zur beliebigen Basis base in eine Zahl zur Basis 10 in der String-Darstellung um.
+
+
baseToDecString(int, String, char) - Static method in class bitchanger.calculations.ConvertingNumbers
+
+
Wandelt die übergebene Zahl value zur beliebigen Basis base in eine Zahl zur Basis 10 in der String-Darstellung um.
+
+
BasicMenuBar - Class in bitchanger.gui.controls
+
+
Basis Menüleiste, die die allgemein benötigten Menüpunkte enthält.
+
+
BasicMenuBar() - Constructor for class bitchanger.gui.controls.BasicMenuBar
+
+
Erzeugt eine neue BasicMenuBar mit allen MenuItems.
+
+
BasicMenuBar(ControllableApplication) - Constructor for class bitchanger.gui.controls.BasicMenuBar
+
+
Erzeugt eine neue BasicMenuBar mit allen MenuItems, die bereits mit den Basisfunktionen belegt sind.
+
+
BasicMenuController - Class in bitchanger.gui.controller
+
 
+
BasicMenuController(BasicMenuBar, ControllableApplication) - Constructor for class bitchanger.gui.controller.BasicMenuController
+
 
+
bindProperties() - Method in class bitchanger.gui.views.AlphaNumGridView
+
+
Bindet die Properties dieser AlphaNumGridView bidirektional an korrespondierende Properties der enthaltenen + Objekte.
+
+
bindScaleProperty(ObservableValue<? extends Number>, Number, Number) - Method in class bitchanger.gui.controls.UnfocusedButton
+
 
+
binValue - Variable in class bitchanger.calculations.SimpleChangeableNumber
+
+
eingeschlossener Wert in der binären String-Darstellung
+
+
bitchanger.calculations - package bitchanger.calculations
+
+
Bietet alle Klassen, die zur Berechnung der Daten benötigt werden.
+
+
bitchanger.gui.controller - package bitchanger.gui.controller
+
+
Stellt Controller bereit, die den Views eine Funktion geben.
+
+
bitchanger.gui.controls - package bitchanger.gui.controls
+
+
Stellt angepasste Bedienelemente und Funktionen für die Benutzeroberfläche zur Verfügung
+
+
bitchanger.gui.views - package bitchanger.gui.views
+
+
Bietet verschiedene Views, die auf einer graphischen Oberfläche präsentiert werden können
+
+
bitchanger.main - package bitchanger.main
+
+
Beinhaltet den Launcher mit der Main-Methode und die JavaFX Applikation zum starten der grafischen Oberfläche.
+
+
bitchanger.preferences - package bitchanger.preferences
+
+
Mit den Klassen aus diesem Package können alle Komponenten auf globale Einstellungen zugreifen und diese verändern.
+
+
bitchanger.util - package bitchanger.util
+
+
Enthält Klassen mit allgemeinen und klassenübergreifend benötigten Methoden.
+
+
BitchangerLauncher - Class in bitchanger.main
+
+
Diese Klasse enthält die Main-Methode, die der Einstiegspunkt für die Applikation ist.
+
+
BitchangerLauncher() - Constructor for class bitchanger.main.BitchangerLauncher
+
 
+
btnMap - Variable in class bitchanger.gui.views.ViewBase
+
+
Map, in die alle vom Controller benötigten Buttons der View mit + einem eindeutigen Schlüssel abgelegt werden
+
+
btnMaxHeigthProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
Property für die maximale Höhe der Buttons in dieser View
+
+
btnMaxWidthProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
Property für die maximale Breite der Buttons in dieser View
+
+
btnMinHeigthProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
Property für die minimale Höhe der Buttons in dieser View
+
+
btnMinWidthProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
Property für die minimale Breite der Buttons in dieser View
+
+
btnSpacingProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
Property für den Abstand der Buttons in der GridPane
+
+
btnTexts - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
Map, in der die angezeigten Texte oder Icons für die Buttons definiert werden.
+
+
buildScenegraph() - Method in class bitchanger.gui.views.ViewBase
+
+
Konstruiert den Scenegraphen mit der Methode ViewBase.createScenegraph() und gibt den Bedienelementen mit einem + Controller eine Funktion, falls ein passender Controller mit Controller.register(Class, Class) registriert + wurde.
+
+
BUTTON_COLUMN - bitchanger.gui.views.AlphaNumGridView.ConstraintType
+
+
Konstante für eine Spalte, die Buttons enthält
+
+
BUTTON_ROW - bitchanger.gui.views.AlphaNumGridView.ConstraintType
+
+
Konstante für eine Zeile, die Buttons enthält
+
+
buttonList - Variable in class bitchanger.gui.controller.AlphaNumKeysController
+
+
Liste, die alle Buttons der Tastatur-Matrix enthält
+
+
buttonList - Variable in class bitchanger.gui.controls.AlphaNumKeys
+
+
Liste, die alle Buttons der Tastatur-Matrix enthält
+
+
buttonMap - Variable in class bitchanger.gui.controller.ControllerBase
+
+
Map, die alle Buttons des gekapselten Controllables enthält
+
+
buttonMap - Variable in class bitchanger.gui.controls.AlphaNumKeys
+
+
Map, in die alle vom Controller benötigten Buttons mit + einem eindeutigen Schlüssel abgelegt werden
+
+
+A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages
+
+ + + diff --git a/doc/0.1.4/de_private/index-files/index-20.html b/doc/0.1.4/de_private/index-files/index-20.html new file mode 100644 index 0000000..3aba15a --- /dev/null +++ b/doc/0.1.4/de_private/index-files/index-20.html @@ -0,0 +1,183 @@ + + + + + +U-Index + + + + + + + + + + + + + + + +
+ +
+
+
A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages + + +

U

+
+
UnfocusedButton - Class in bitchanger.gui.controls
+
+
Button, der beim Klick nicht den Fokus erhält und als Grundform ein Rechteck ohne abgerundete Ecken besitzt.
+
+
UnfocusedButton() - Constructor for class bitchanger.gui.controls.UnfocusedButton
+
+
Erstellt einen UnfocusedButton mit einem leeren String als Beschriftung
+
+
UnfocusedButton(String) - Constructor for class bitchanger.gui.controls.UnfocusedButton
+
+
Erstellt einen UnfocusedButton mit einem spezifischen String als Beschriftung
+
+
UnfocusedButton(String, Node) - Constructor for class bitchanger.gui.controls.UnfocusedButton
+
+
Erstellt einen UnfocusedButton mit einem spezifischen String und einem Icon als Beschriftung
+
+
UnfocusedButton(Node) - Constructor for class bitchanger.gui.controls.UnfocusedButton
+
 
+
UNKNOWN - bitchanger.preferences.Style
+
+
Konstante für ein unbekanntes Layout
+
+
updatePadding(ObservableValue<? extends Number>, Number, Number) - Method in class bitchanger.gui.views.AlphaNumGridView
+
+
Methode, die als Referenz für einen ChangeListener eingesetzt werden kann, um die Paddings der GridPane zu aktualisieren.
+
+
useClearAndBackBtn - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
true, wenn die Buttons AlphaNumGridView.clearBtnKey und AlphaNumGridView.backspaceBtnKey in der Zeile + AlphaNumGridView.firstKeyBtnRow über der Tastaturmatrix in der GridPane positioniert werden sollen.
+
+
+A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages
+
+ + + diff --git a/doc/0.1.4/de_private/index-files/index-21.html b/doc/0.1.4/de_private/index-files/index-21.html new file mode 100644 index 0000000..3e04fcb --- /dev/null +++ b/doc/0.1.4/de_private/index-files/index-21.html @@ -0,0 +1,285 @@ + + + + + +V-Index + + + + + + + + + + + + + + + +
+ +
+
+
A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages + + +

V

+
+
value - Variable in class bitchanger.gui.controller.ConverterController
+
+
Zahl, die in die verschiedenen Zahlensysteme umgewandelt wird
+
+
ValueButton - Class in bitchanger.gui.controls
+
+
UnfocusedButton mit einer zusätzlichen Property für die Einstellung einer Basis.
+
+
ValueButton() - Constructor for class bitchanger.gui.controls.ValueButton
+
+
Erstellt einen ValueButton mit einem leeren String als Beschriftung
+
+
ValueButton(String) - Constructor for class bitchanger.gui.controls.ValueButton
+
+
Erstellt einen ValueButton mit einem spezifischen String als Beschriftung
+
+
ValueButton(String, Node) - Constructor for class bitchanger.gui.controls.ValueButton
+
+
Erstellt einen ValueButton mit einem spezifischen String und einem Icon als Beschriftung
+
+
ValueField - Class in bitchanger.gui.controls
+
+
TextFeld, in dem eine Zahl zu einem bestimmten Zahlensystem eingegeben werden kann.
+
+
ValueField() - Constructor for class bitchanger.gui.controls.ValueField
+
+
Erzeugt ein neues ValueField mit leerem Text und der Basis 10
+
+
ValueField(int) - Constructor for class bitchanger.gui.controls.ValueField
+
+
Erzeugt ein neues ValueField mit leerem Text und der übergebenen Basis
+
+
ValueField(String) - Constructor for class bitchanger.gui.controls.ValueField
+
+
Erzeugt ein neues ValueField mit dem übergebenen Text als Inhalt und der Basis 10
+
+
ValueField(String, int) - Constructor for class bitchanger.gui.controls.ValueField
+
+
Erzeugt ein neues ValueField mit dem übergebenen Text als Inhalt und der übergebenen Basis
+
+
valueOf(String) - Static method in enum bitchanger.gui.controls.InformationDialog.InformationType
+
+
Returns the enum constant of this type with the specified name.
+
+
valueOf(String) - Static method in enum bitchanger.gui.views.AlphaNumGridView.ConstraintType
+
+
Returns the enum constant of this type with the specified name.
+
+
valueOf(String) - Static method in enum bitchanger.preferences.Comma
+
+
Returns the enum constant of this type with the specified name.
+
+
valueOf(String) - Static method in enum bitchanger.preferences.Style
+
+
Returns the enum constant of this type with the specified name.
+
+
valueOfDigit(char) - Static method in class bitchanger.calculations.ConvertingNumbers
+
+
Berechnet die Stellenwertigkeit, die von einem Zeichen repräsentiert wird.
+
+
values() - Static method in enum bitchanger.gui.controls.InformationDialog.InformationType
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
values() - Static method in enum bitchanger.gui.views.AlphaNumGridView.ConstraintType
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
values() - Static method in enum bitchanger.preferences.Comma
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
values() - Static method in enum bitchanger.preferences.Style
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
version - Variable in class bitchanger.gui.controller.BasicMenuController
+
 
+
VERSION - bitchanger.gui.controls.InformationDialog.InformationType
+
 
+
VERSION - Static variable in class bitchanger.main.PrimaryFXApp
+
+
Aktuelle Version des Bitchangers
+
+
vgapProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
Property für den vertikalen Abstand der GridPane im Center
+
+
VIEW_MENU_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
+
+
Schlüsselwort, mit dem das Menu "Fenster" in der Map BasicMenuBar.menuItemMap abgelegt ist
+
+
VIEW_MOVE_TO_SCREEN_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
+
+
Schlüsselwort, mit dem das MenuItem "Auf Monitor bewegen" in der Map BasicMenuBar.menuItemMap abgelegt ist
+
+
VIEW_SHOW_FULLSCREEN_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
+
+
Schlüsselwort, mit dem das CheckMenuItem "Vollbild" in der Map BasicMenuBar.menuItemMap abgelegt ist
+
+
VIEW_STYLE_DARK_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
+
+
Schlüsselwort, mit dem das MenuItem "Dunkel" in der Map BasicMenuBar.menuItemMap abgelegt ist
+
+
VIEW_STYLE_LIGHT_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
+
+
Schlüsselwort, mit dem das MenuItem "Hell" in der Map BasicMenuBar.menuItemMap abgelegt ist
+
+
VIEW_STYLE_MENU_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
+
+
Schlüsselwort, mit dem das Menu "Stil" in der Map BasicMenuBar.menuItemMap abgelegt ist
+
+
Viewable - Interface in bitchanger.gui.views
+
+
Die Schnittstelle Viewable definiert die Basis für eine View.
+
+
ViewBase<T extends javafx.scene.Parent> - Class in bitchanger.gui.views
+
+
Basis-Klasse für alle View-Klassen, die das Interface Viewable implementieren und mit einem + Controller eine Funktion erhalten.
+
+
ViewBase(T) - Constructor for class bitchanger.gui.views.ViewBase
+
+
Erzeugt eine neue View, die eine neue Scene mit dem übergebenen Wurzelknoten root kapselt.
+
+
ViewBase(T, boolean) - Constructor for class bitchanger.gui.views.ViewBase
+
+
Erzeugt eine neue View, die eine neue Scene mit dem übergebenen Wurzelknoten root kapselt.
+
+
+A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages
+
+ + + diff --git a/doc/0.1.4/de_private/index-files/index-22.html b/doc/0.1.4/de_private/index-files/index-22.html new file mode 100644 index 0000000..926bbc8 --- /dev/null +++ b/doc/0.1.4/de_private/index-files/index-22.html @@ -0,0 +1,172 @@ + + + + + +W-Index + + + + + + + + + + + + + + + +
+ +
+
+
A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages + + +

W

+
+
WHITESPACE_ROW - bitchanger.gui.views.AlphaNumGridView.ConstraintType
+
+
Konstante für eine Zeile, die Weißraum enthält
+
+
whiteSpaceHeigthProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
Property für die Höhe der Zeilen zwischen den Textfeldern und Buttons
+
+
WINDOW_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines Programmfensters oder null, wenn das Icon nicht gefunden wurde
+
+
WINDOW_THIN_2_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons mit zwei Programmfenstern im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
+
+
WINDOW_THIN_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines Programmfensters in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
+
+
+A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages
+
+ + + diff --git a/doc/0.1.4/de_private/index-files/index-23.html b/doc/0.1.4/de_private/index-files/index-23.html new file mode 100644 index 0000000..a1fd326 --- /dev/null +++ b/doc/0.1.4/de_private/index-files/index-23.html @@ -0,0 +1,200 @@ + + + + + +X-Index + + + + + + + + + + + + + + + +
+ +
+
+
A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages + + +

X

+
+
X_MARK_1_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines 'X'-Symbols oder null, wenn das Icon nicht gefunden wurde
+
+
X_MARK_2_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines 'X'-Symbols in einem gefüllten Quadrat oder null, wenn das Icon nicht gefunden wurde
+
+
X_MARK_ARROW_LEFT_FILLED_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines gefüllten Löschen-Symbols mit 'X' oder null, wenn das Icon nicht gefunden wurde
+
+
X_MARK_ARROW_LEFT_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines Löschen-Symbols mit 'X' oder null, wenn das Icon nicht gefunden wurde
+
+
X_MARK_CIRCLE_1_FILLED_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines 'X'-Symbols in einem gefüllten Kreis oder null, wenn das Icon nicht gefunden wurde
+
+
X_MARK_CIRCLE_1_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines 'X'-Symbols in einem Kreis oder null, wenn das Icon nicht gefunden wurde
+
+
X_MARK_CIRCLE_2_FILLED_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines 'X'-Symbols in einem gefüllten Kreis oder null, wenn das Icon nicht gefunden wurde
+
+
X_MARK_CIRCLE_2_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines 'X'-Symbols in einem Kreis oder null, wenn das Icon nicht gefunden wurde
+
+
X_MARK_CIRCLE_THIN_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines 'X'-Symbols in einem Kreis in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
+
+
X_MARK_SQUARE_FILLED_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines 'X'-Symbols in einem gefüllten Quadrat oder null, wenn das Icon nicht gefunden wurde
+
+
X_MARK_SQUARE_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines 'X'-Symbols in einem Quadrat oder null, wenn das Icon nicht gefunden wurde
+
+
X_MARK_THIN_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines 'X'-Symbols in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
+
+
+A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages
+
+ + + diff --git a/doc/0.1.4/de_private/index-files/index-24.html b/doc/0.1.4/de_private/index-files/index-24.html new file mode 100644 index 0000000..50601e1 --- /dev/null +++ b/doc/0.1.4/de_private/index-files/index-24.html @@ -0,0 +1,180 @@ + + + + + +Z-Index + + + + + + + + + + + + + + + +
+ +
+
+
A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages + + +

Z

+
+
ZERO_BTN_KEY - Static variable in class bitchanger.gui.controls.AlphaNumKeys
+
+
Schlüsselwort für den Button, der die Null repräsentiert
+
+
zeroBtn - Variable in class bitchanger.gui.controller.AlphaNumKeysController
+
+
Button, mit dem die Zahl 0 eingegeben wird
+
+
zeroBtnKey - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
Schlüsselwort für den Button, der die Null repräsentiert
+
+
ZOOM_IN_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons einer Lupe mit '+' oder null, wenn das Icon nicht gefunden wurde
+
+
ZOOM_IN_THIN_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons einer Lupe mit '+' in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
+
+
ZOOM_OUT_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons einer Lupe mit '-' oder null, wenn das Icon nicht gefunden wurde
+
+
ZOOM_OUT_THIN_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons einer Lupe mit '-' in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
+
+
+A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages
+
+ + + diff --git a/doc/0.1.4/de_private/index-files/index-3.html b/doc/0.1.4/de_private/index-files/index-3.html new file mode 100644 index 0000000..ca443ff --- /dev/null +++ b/doc/0.1.4/de_private/index-files/index-3.html @@ -0,0 +1,443 @@ + + + + + +C-Index + + + + + + + + + + + + + + + +
+ +
+
+
A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages + + +

C

+
+
Calculable - Interface in bitchanger.calculations
+
 
+
CALCULATOR_FILLED_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines Taschenrechners, gefüllt oder null, wenn das Icon nicht gefunden wurde
+
+
CALCULATOR_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines Taschenrechners oder null, wenn das Icon nicht gefunden wurde
+
+
CALCULATOR_SYMBOLS_FILLED_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons mit Rechensymbolen, gefüllt oder null, wenn das Icon nicht gefunden wurde
+
+
CALCULATOR_SYMBOLS_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons mit Rechensymbolen oder null, wenn das Icon nicht gefunden wurde
+
+
CALCULATOR_VIEW_KEY - Static variable in class bitchanger.main.PrimaryFXApp
+
+
Schlüsselwort, mit dem über PrimaryFXApp.getViewable(String) auf die CalculatorView zugegriffen werden kann
+
+
calculatorView - Variable in class bitchanger.main.PrimaryFXApp
+
+
View für das Rechnen mit Zahlensystemen
+
+
CalculatorView - Class in bitchanger.gui.views
+
 
+
CalculatorView() - Constructor for class bitchanger.gui.views.CalculatorView
+
 
+
center - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
Tabelle im Center von root, in der alle Controls positioniert werden
+
+
ChangeableNumber - Interface in bitchanger.calculations
+
+
Schnittstelle, die Methoden definiert, um eine Zahl aus einem beliebigen Zahlensystem + in beliebige andere Zahlensysteme umzuwandeln
+
+
changeStyleAction() - Method in class bitchanger.gui.controller.BasicMenuController
+
 
+
changeToKeyboard() - Method in class bitchanger.gui.controller.AlphaNumKeysController
+
+
Wechselt das Tastaturlayout in die Alphabet-Ansicht
+
+
changeToNums() - Method in class bitchanger.gui.controller.AlphaNumKeysController
+
+
Wechselt das Tastaturlayout in die Kombination aus sechs Buchstaben-Buttons und Nummernfeld
+
+
changeToViewAction(MenuItem, Viewable) - Method in class bitchanger.gui.controller.BasicMenuController
+
 
+
changeView(Viewable) - Method in interface bitchanger.gui.controller.ControllableApplication
+
+
Wechselt die Scene der primaryStage zu Scene des übergebenen Viewable
+
+
checkText(ObservableValue<? extends String>, String, String) - Method in class bitchanger.gui.controls.ValueField
+
+
Prüft, ob der eingegebene Text zur Basis passt und setzt die Eingabe zurück, wenn ein verbotenes + Zeichen eingegeben wurde.
+
+
checkValue(int, String) - Static method in class bitchanger.calculations.ConvertingNumbers
+
+
Überprüft, ob der übergebene String value eine Zahl zur Basis base ist + und wirft eine Exception, wenn dies nicht der Fall ist.
+
+
clearBtn - Variable in class bitchanger.gui.controller.ConverterController
+
+
Button zum Löschen und Zurücksetzen von ConverterController.value
+
+
clearBtnKey - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
Schlüsselwort, mit dem der Löschen-Button (AC) in der Map btnMap gespeichert wird
+
+
COLUMN_COUNT - Static variable in class bitchanger.gui.controls.AlphaNumKeys
+
+
Konstante, die die Anzahl der Spalten dieser Tastaturmatrix enthält
+
+
comma - Variable in enum bitchanger.preferences.Comma
+
+
Eingeschlossenes Kommazeichen
+
+
Comma - Enum in bitchanger.preferences
+
+
Aufzählung der Wrapper-Klasse Comma, die das Zeichen für ein Komma repräsentiert.
+
+
Comma(char) - Constructor for enum bitchanger.preferences.Comma
+
+
Kommazeichen im Konstruktor initialisieren
+
+
COMMA_BTN_KEY - Static variable in class bitchanger.gui.controls.AlphaNumKeys
+
+
Schlüsselwort für den Komma-Button
+
+
COMMA_DE - bitchanger.preferences.Comma
+
+
Konstante, die das deutsche Komma (',') repräsentiert
+
+
COMMA_EN - bitchanger.preferences.Comma
+
+
Konstante, die das englische Komma ('.') repräsentiert
+
+
commaBtn - Variable in class bitchanger.gui.controller.AlphaNumKeysController
+
+
Button, mit dem ein Komma eingegeben werden kann
+
+
commaBtn - Variable in class bitchanger.gui.controls.AlphaNumKeys
+
+
Button, mit dem ein Komma eingegeben werden kann
+
+
commaBtnKey - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
Schlüsselwort für den Komma-Button
+
+
commaProperty - Variable in class bitchanger.preferences.Preferences
+
+
Property für das Kommazeichen
+
+
ConstraintType() - Constructor for enum bitchanger.gui.views.AlphaNumGridView.ConstraintType
+
 
+
controllable - Variable in class bitchanger.gui.controller.ControllerBase
+
+
gekapseltes Controllable, dem durch diesen Controller eine Funktion gegeben wird
+
+
Controllable - Interface in bitchanger.gui.controller
+
+
Schnittstelle, die Methoden definiert, um eine View mit einem Controller zu verbinden.
+
+
ControllableApplication - Interface in bitchanger.gui.controller
+
+
Schnittstelle, die Methoden definiert, um eine Application mit einem Controller zu verbinden.
+
+
controller - Variable in class bitchanger.gui.controls.AlphaNumKeys
+
+
Controller, der die Funktion zu den Bedienelementen hinzufügt.
+
+
controller - Variable in class bitchanger.gui.views.ViewBase
+
+
Controller, der die Funktion zu den Bedienelementen hinzufügt.
+
+
Controller - Interface in bitchanger.gui.controller
+
+
Schnittstelle, die einen Controller beschreibt.
+
+
ControllerBase<T extends Controllable> - Class in bitchanger.gui.controller
+
+
Basis für einen Controller, der einer Instanz von Controllable (z.B. eine View) eine Funktion gibt.
+
+
ControllerBase(T) - Constructor for class bitchanger.gui.controller.ControllerBase
+
+
Kapselt das übergebene Controllable und initialisiert die Maps mit den Bedienelementen mit Referenzen + auf die zugehörigen Maps des Controllables.
+
+
convertDecFractionalToBaseString(int, double, int, char) - Static method in class bitchanger.calculations.ConvertingNumbers
+
+
Wandelt einen Nachkommateil vom Zehnersystem in einen Wert zu einer beliebigen Basis in der String-Darstellung um.
+
+
convertDecIntegerToBaseString(int, long) - Static method in class bitchanger.calculations.ConvertingNumbers
+
+
Wandelt einen ganzzahligen Wert vom Zehnersystem in einen Wert zu einer beliebigen Basis in der String-Darstellung um.
+
+
CONVERTER_VIEW_KEY - Static variable in class bitchanger.main.PrimaryFXApp
+
+
Schlüsselwort, mit dem über PrimaryFXApp.getViewable(String) auf die ConverterView zugegriffen werden kann
+
+
ConverterController - Class in bitchanger.gui.controller
+
+
Controller, der die Funktion für eine ConverterView bereitstellt.
+
+
ConverterController(ConverterView) - Constructor for class bitchanger.gui.controller.ConverterController
+
+
Konstruiert einen neuen Controller für eine ConverterView und verknüpft die benötigten Attribute mit + Referenzen auf die Bedienelemente aus der ConverterView.
+
+
ConverterMenuBar - Class in bitchanger.gui.controls
+
 
+
ConverterMenuBar() - Constructor for class bitchanger.gui.controls.ConverterMenuBar
+
 
+
ConverterMenuBar(ControllableApplication) - Constructor for class bitchanger.gui.controls.ConverterMenuBar
+
 
+
ConverterMenuController - Class in bitchanger.gui.controller
+
 
+
ConverterMenuController(BasicMenuBar, ControllableApplication) - Constructor for class bitchanger.gui.controller.ConverterMenuController
+
 
+
converterView - Variable in class bitchanger.main.PrimaryFXApp
+
+
View für die Umwandlung von Zahlensystemen
+
+
ConverterView - Class in bitchanger.gui.views
+
+
View, die die Scene für die Umwandlung von Zahlensystemen enthält.
+
+
ConverterView() - Constructor for class bitchanger.gui.views.ConverterView
+
+
Erzeugt eine neue ConverterView mit vollständigem Scenegraphen und initialisiert die Funktionen + der Bedienelemente mit einem ConverterController.
+
+
ConvertingNumbers - Class in bitchanger.calculations
+
+
Die Klasse ConvertingNumbers enthält Methoden zum Umwandeln von Zahlen mit verschiedenen Zahlensystemen.
+
+
ConvertingNumbers() - Constructor for class bitchanger.calculations.ConvertingNumbers
+
+
Diese Klasse ist nicht instanziierbar
+
+
COPYRIGHT_FILLED_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons mit dem Copyright-Symbol, gefüllt oder null, wenn das Icon nicht gefunden wurde
+
+
COPYRIGHT_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons mit dem Copyright-Symbol oder null, wenn das Icon nicht gefunden wurde
+
+
createAboutDialog() - Method in class bitchanger.gui.controls.InformationDialog
+
 
+
createAnyBase() - Method in class bitchanger.gui.views.ConverterView
+
+
Fügt einen BaseSpinner zur Auswahl einer beliebigen (gültigen) Basis zur GridPane + AlphaNumGridView.center hinzu und speichert diesen in der Map nodeMap.
+
+
createButtonMatrix() - Method in class bitchanger.gui.views.AlphaNumGridView
+
+
Erstellt alle benötigten Buttons und positioniert diese in der GridPane.
+
+
createButtons() - Method in class bitchanger.gui.controls.AlphaNumKeys
+
+
Erstellt alle Buttons des Tastaturlayouts und setzt alle Constraints zur Positionierung in einer GridPane.
+
+
createButtons() - Method in class bitchanger.gui.views.AlphaNumGridView
+
+
Erzeugt die Buttons AlphaNumGridView.clearBtnKey und AlphaNumGridView.backspaceBtnKey und gibt diese in einer ArrayList zurück.
+
+
createControlButtons() - Method in class bitchanger.gui.controls.AlphaNumKeys
+
+
Erstellt die Steuer-Buttons in der untersten Zeile des Tastaturlayouts, fügt diese der Map AlphaNumKeys.buttonMap + hinzu und setzt die Constraint zur Positionierung in einer GridPane.
+
+
createLabels() - Method in class bitchanger.gui.views.AlphaNumGridView
+
+
Erstellt alle Labels aus den Strings im Array AlphaNumGridView.labelTexts und positioniert diese in der GridPane.
+
+
createMainMatrix() - Method in class bitchanger.gui.controls.AlphaNumKeys
+
+
Erstellt die Matrix mit den sechs Buchstaben- und neun Zahlen-Buttons.
+
+
createMenuHelp() - Method in class bitchanger.gui.controls.BasicMenuBar
+
+
Erstellt das Menu "Hilfe" mit den Elementen "Ãœber" und "Version"
+
+
createMenuModus() - Method in class bitchanger.gui.controls.BasicMenuBar
+
+
Erstellt das Menu "Modus" mit den Elementen "Umrechner", "IEEE" und "Berechnungen"
+
+
createMenuOptions() - Method in class bitchanger.gui.controls.BasicMenuBar
+
+
Erstellt das Menu "Optionen" mit den Elementen "Komma wählen" und den Unterelementen + "deutsch" und "englisch"
+
+
createMenuView() - Method in class bitchanger.gui.controls.BasicMenuBar
+
+
Erstellt das Menu "Ansicht" mit den Elementen "Stil", "Auf Monitor bewegen" und "Vollbild"
+
+
createScenegraph() - Method in class bitchanger.gui.views.AlphaNumGridView
+
+
Erstellt den Scenegraphen und fügt diesen dem Wurzelknoten hinzu.
+
+
createScenegraph() - Method in class bitchanger.gui.views.ConverterView
+
+
Erstellt den Scenegraphen und fügt diesen dem Wurzelknoten hinzu.
+
+
createScenegraph() - Method in class bitchanger.gui.views.ViewBase
+
+
Methode, die den Scenegraphen konstruiert.
+
+
createTextFields() - Method in class bitchanger.gui.views.AlphaNumGridView
+
+
Erstellt alle Textfelder, für die es einen Schlüssel im Array AlphaNumGridView.tfKeys gibt.
+
+
createVersionDialog() - Method in class bitchanger.gui.controls.InformationDialog
+
 
+
createXMLTree(Document, Element) - Method in class bitchanger.preferences.Preferences
+
+
Fügt alle Einstellungen dieser Preferences zu dem XML-Baum des Element xmlRoot hinzu
+
+
currentViewProperty - Variable in class bitchanger.main.PrimaryFXApp
+
+
Property für die aktuell im Fenster dargestellte View
+
+
CUSTOM_PREFERENCES - Static variable in class bitchanger.util.Resources
+
+
Speicherort der Benutzereinstellungen beim letzten Schließen des Programms oder null, wenn die Datei nicht gefunden wurde
+
+
+A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages
+
+ + + diff --git a/doc/0.1.4/de_private/index-files/index-4.html b/doc/0.1.4/de_private/index-files/index-4.html new file mode 100644 index 0000000..dbb6d5e --- /dev/null +++ b/doc/0.1.4/de_private/index-files/index-4.html @@ -0,0 +1,191 @@ + + + + + +D-Index + + + + + + + + + + + + + + + +
+ +
+
+
A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages + + +

D

+
+
DARK - bitchanger.preferences.Style
+
+
Konstante für ein dunkles Layout
+
+
DARK_CSS - Static variable in class bitchanger.util.Resources
+
+
Pfad zum Stylesheet für die dunkle Darstellung oder null, wenn das CSS nicht gefunden wurde
+
+
decToBase(int, String) - Static method in class bitchanger.calculations.ConvertingNumbers
+
+
Wandelt die übergebene Zahl decValue zur Basis 10 in eine Zahl zur beliebigen Basis newBase in der String-Darstellung um.
+
+
decToBase(int, String, char) - Static method in class bitchanger.calculations.ConvertingNumbers
+
+
Wandelt die übergebene Zahl decValue zur Basis 10 in eine Zahl zur beliebigen Basis newBase in der String-Darstellung um.
+
+
decToBase(int, String, char, int) - Static method in class bitchanger.calculations.ConvertingNumbers
+
+
Wandelt die übergebene Zahl decValue zur Basis 10 in eine Zahl zur beliebigen Basis newBase in der String-Darstellung um.
+
+
decToBaseBlocks(int, String, char, int) - Static method in class bitchanger.calculations.ConvertingNumbers
+
+
Wandelt die übergebene Zahl decValue zur Basis 10 in eine Zahl zur beliebigen Basis newBase in der String-Darstellung um + und unterteilt die Zahl in Blöcke der gewünschten Länge.
+
+
decValue - Variable in class bitchanger.calculations.SimpleChangeableNumber
+
+
eingeschlossener Wert in der dezimalen String-Darstellung
+
+
DEFAULT_GRAPHIC_SCALE_FACTOR - Static variable in class bitchanger.gui.controls.UnfocusedButton
+
 
+
DEFAULT_PREFERENCES - Static variable in class bitchanger.util.Resources
+
+
Speicherort der Standardeinstellungen des Programms oder null, wenn die Datei nicht gefunden wurde
+
+
digitOfValue(int) - Static method in class bitchanger.calculations.ConvertingNumbers
+
+
Berechnet das Zeichen für eine Stellenwertigkeit.
+
+
+A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages
+
+ + + diff --git a/doc/0.1.4/de_private/index-files/index-5.html b/doc/0.1.4/de_private/index-files/index-5.html new file mode 100644 index 0000000..0de82ff --- /dev/null +++ b/doc/0.1.4/de_private/index-files/index-5.html @@ -0,0 +1,183 @@ + + + + + +E-Index + + + + + + + + + + + + + + + +
+ +
+
+
A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages + + +

E

+
+
EMPTY_BUTTON_MAP - Static variable in interface bitchanger.gui.controller.Controllable
+
+
Leere und unveränderliche Map, die als Platzhalter verwendet werden kann, wenn ein Controllable keine + Buttons an seinen Controller übergeben muss
+
+
EMPTY_NODE_MAP - Static variable in interface bitchanger.gui.controller.Controllable
+
+
Leere und unveränderliche Map, die als Platzhalter verwendet werden kann, wenn ein Controllable keine + Nodes an seinen Controller übergeben muss
+
+
EMPTY_TEXTFIELD_MAP - Static variable in interface bitchanger.gui.controller.Controllable
+
+
Leere und unveränderliche Map, die als Platzhalter verwendet werden kann, wenn ein Controllable keine + Textfelder an seinen Controller übergeben muss
+
+
ENTER_FULLSCREEN_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons zum Aktivieren des Vollbilds oder null, wenn das Icon nicht gefunden wurde
+
+
ERASER_FILLED_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines gefüllten Radiergummis oder null, wenn das Icon nicht gefunden wurde
+
+
ERASER_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons eines Radiergummis oder null, wenn das Icon nicht gefunden wurde
+
+
EXIT_FULLSCREEN_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons zum Deaktivieren des Vollbilds oder null, wenn das Icon nicht gefunden wurde
+
+
+A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages
+
+ + + diff --git a/doc/0.1.4/de_private/index-files/index-6.html b/doc/0.1.4/de_private/index-files/index-6.html new file mode 100644 index 0000000..0645f66 --- /dev/null +++ b/doc/0.1.4/de_private/index-files/index-6.html @@ -0,0 +1,215 @@ + + + + + +F-Index + + + + + + + + + + + + + + + +
+ +
+
+
A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages + + +

F

+
+
FIRST_COLUMN - bitchanger.gui.views.AlphaNumGridView.ConstraintType
+
+
Konstante für die erste Spalte in einer GridPane
+
+
firstColumn - Variable in class bitchanger.gui.controls.AlphaNumKeys
+
+
Erste Spalte, in der die Buttons in einer GridPane positioniert werden
+
+
firstColumnWidthProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
Property für die Breite der ersten Spalte mit den Labels enthält.
+
+
firstKeyBtnColumn - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
Konstante, die die erste Spalte der GridPane definiert, in der die Tastatur-Buttons positioniert werden
+
+
firstKeyBtnRow - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
Konstante, die die erste Zeile der GridPane definiert, in der die Tastatur-Buttons positioniert werden
+
+
firstLabelRow - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
Konstante, die die erste Zeile der GridPane definiert, in der die Labels positioniert werden
+
+
firstRow - Variable in class bitchanger.gui.controls.AlphaNumKeys
+
+
Erste Zeile, in der die Buttons in einer GridPane positioniert werden
+
+
firstTFRow - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
Konstante, die die erste Zeile der GridPane definiert, in der die Textfelder positioniert werden
+
+
focuse(ObservableValue<? extends Boolean>, Boolean, Boolean) - Method in class bitchanger.gui.controls.ValueField
+
+
Entfernt den Indikator für abgeschnittene Nachkommastellen und setzt die CaretPosition auf den + letzten bekannten Wert zurück.
+
+
focusedTF - Variable in class bitchanger.gui.controller.ConverterController
+
+
Hilfsvariable mit Referenz auf das aktuell oder zuletzt fokussierte Textfeld
+
+
focusTF(Event) - Method in class bitchanger.gui.controller.ConverterController
+
+
Fokussiert das Textfeld ConverterController.focusedTF.
+
+
formatButtons() - Method in class bitchanger.gui.views.AlphaNumGridView
+
 
+
FRACTIONAL_PRECISION_INDICATOR - Static variable in class bitchanger.calculations.ConvertingNumbers
+
+
Indikator für Abgeschnittene Nachkommastellen bei der Umwandlung vom Zehnersystem in ein anderes, beliebiges Zahlensystem
+
+
FULLSCREEN_THIN_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Icons zum Wechseln des Vollbilds in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
+
+
FXUtils - Class in bitchanger.util
+
+
Utility-Klasse zur allgemeinen Verarbeitung von Objekten, die zur Oberfläche gehören.
+
+
FXUtils() - Constructor for class bitchanger.util.FXUtils
+
+
Diese Klasse ist nicht instanziierbar
+
+
+A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages
+
+ + + diff --git a/doc/0.1.4/de_private/index-files/index-7.html b/doc/0.1.4/de_private/index-files/index-7.html new file mode 100644 index 0000000..8a94439 --- /dev/null +++ b/doc/0.1.4/de_private/index-files/index-7.html @@ -0,0 +1,320 @@ + + + + + +G-Index + + + + + + + + + + + + + + + +
+ +
+
+
A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages + + +

G

+
+
generateMenuBar() - Method in class bitchanger.gui.views.ConverterView
+
generateMenuBar() - Method in interface bitchanger.gui.views.Viewable
+
 
+
generateMenuBar(ControllableApplication) - Method in class bitchanger.gui.views.ConverterView
+
generateMenuBar(ControllableApplication) - Method in interface bitchanger.gui.views.Viewable
+
 
+
get() - Method in enum bitchanger.preferences.Comma
+
+
Gibt das repräsentierte Kommazeichen zurück
+
+
getArrowButtons() - Method in class bitchanger.gui.controls.AlphaNumKeys
+
+
Gibt die HBox mit den Buttons, mit denen durch die Tastatur gescrollt werden kann, zurück
+
+
getBase() - Method in class bitchanger.gui.controls.ValueField
+
+
Gibt den Wert der ValueField.baseProperty zurück
+
+
getBaseProperty() - Method in class bitchanger.gui.controls.ValueButton
+
+
Gibt den Wert der ValueButton.baseProperty zurück
+
+
getBaseProperty() - Method in class bitchanger.gui.controls.ValueField
+
+
Gibt die ValueField.baseProperty dieses ValueFields zurück
+
+
getButtonMap() - Method in interface bitchanger.gui.controller.Controllable
+
+
Gibt eine Map mit allen Buttons der View zurück.
+
+
getButtonMap() - Method in class bitchanger.gui.controls.AlphaNumKeys
+
+
Gibt eine Map mit allen Buttons der View zurück.
+
+
getButtonMap() - Method in class bitchanger.gui.controls.BasicMenuBar
+
+
Gibt eine Map mit allen Buttons der View zurück.
+
+
getButtonMap() - Method in class bitchanger.gui.views.ViewBase
+
+
Gibt eine Map mit allen Buttons der View zurück.
+
+
getButtonMatrix() - Method in class bitchanger.gui.controls.AlphaNumKeys
+
+
Gibt die Liste mit allen Nodes der Tastatur-Matrix zurück.
+
+
getComma() - Method in class bitchanger.preferences.Preferences
+
+
Gibt das eingestellte Kommazeichen zurück
+
+
getConstructorForArgs(Class<? extends Controller>, Class<?>[], Object[]) - Static method in interface bitchanger.gui.controller.Controller
+
 
+
getCurrentViewProperty() - Method in interface bitchanger.gui.controller.ControllableApplication
+
+
Gibt die CurrentViewProperty zurück
+
+
getCurrentViewProperty() - Method in class bitchanger.main.PrimaryFXApp
+
+
Gibt die CurrentViewProperty zurück
+
+
getFirstComma(String) - Static method in class bitchanger.calculations.ConvertingNumbers
+
+
überprüft, ob bei dem übergebenen String zuerst ein deutsches Komma (,) oder ein englisches Komma (.) auftaucht.
+
+
getMaxHeigth() - Method in class bitchanger.gui.views.AlphaNumGridView
+
+
Gibt die maximale Höhe der View an
+
+
getMaxHeigth() - Method in interface bitchanger.gui.views.Viewable
+
+
Gibt die maximale Höhe der View an
+
+
getMaxWidth() - Method in class bitchanger.gui.views.AlphaNumGridView
+
+
Gibt die maximale Breite der View an
+
+
getMaxWidth() - Method in interface bitchanger.gui.views.Viewable
+
+
Gibt die maximale Breite der View an
+
+
getMinHeigth() - Method in class bitchanger.gui.views.AlphaNumGridView
+
+
Gibt die minimale Höhe der View an
+
+
getMinHeigth() - Method in interface bitchanger.gui.views.Viewable
+
+
Gibt die minimale Höhe der View an
+
+
getMinWidth() - Method in class bitchanger.gui.views.AlphaNumGridView
+
+
Gibt die minimale Breite der View an
+
+
getMinWidth() - Method in interface bitchanger.gui.views.Viewable
+
+
Gibt die minimale Breite der View an
+
+
getNodeMap() - Method in interface bitchanger.gui.controller.Controllable
+
+
Gibt eine Map mit allen Elemente (Nodes) der View zurück, die keine Buttons oder Textfelder sind und im Controller benötigt werden.
+
+
getNodeMap() - Method in class bitchanger.gui.controls.AlphaNumKeys
+
+
Gibt eine Map mit allen Elemente (Nodes) der View zurück, die keine Buttons oder Textfelder sind und im Controller benötigt werden.
+
+
getNodeMap() - Method in class bitchanger.gui.controls.BasicMenuBar
+
+
Gibt eine Map mit allen Elemente (Nodes) der View zurück, die keine Buttons oder Textfelder sind und im Controller benötigt werden.
+
+
getNodeMap() - Method in class bitchanger.gui.views.ViewBase
+
+
Gibt eine Map mit allen Elemente (Nodes) der View zurück, die keine Buttons oder Textfelder sind und im Controller benötigt werden.
+
+
getPrefs() - Static method in class bitchanger.preferences.Preferences
+
+
Gibt die aktuellen Einstellungen zurück
+
+
getPrimaryStage() - Method in interface bitchanger.gui.controller.ControllableApplication
+
+
Returns the main application window
+
+
getPrimaryStage() - Method in class bitchanger.main.PrimaryFXApp
+
+
Returns the main application window
+
+
getResourceAsExternalForm(String) - Static method in class bitchanger.util.Resources
+
+
Sucht die Ressource mit gegebenem Namen und gibt die URL als String zurück.
+
+
getResourceAsFile(String) - Static method in class bitchanger.util.Resources
+
+
Sucht die Ressource mit gegebenem Namen und gibt diese als File zurück.
+
+
getScene() - Method in interface bitchanger.gui.views.Viewable
+
+
Gibt die repräsentierte Scene zurück
+
+
getScene() - Method in class bitchanger.gui.views.ViewBase
+
+
Gibt die repräsentierte Scene zurück
+
+
getTextFieldMap() - Method in interface bitchanger.gui.controller.Controllable
+
+
Gibt eine Map mit allen Textfelder der View zurück.
+
+
getTextFieldMap() - Method in class bitchanger.gui.controls.AlphaNumKeys
+
+
Gibt eine Map mit allen Textfelder der View zurück.
+
+
getTextFieldMap() - Method in class bitchanger.gui.controls.BasicMenuBar
+
+
Gibt eine Map mit allen Textfelder der View zurück.
+
+
getTextFieldMap() - Method in class bitchanger.gui.views.ViewBase
+
+
Gibt eine Map mit allen Textfelder der View zurück.
+
+
getViewable(String) - Method in interface bitchanger.gui.controller.ControllableApplication
+
+
Gibt die mit dem String key verknüpfte View zurück
+
+
getViewable(String) - Method in class bitchanger.main.PrimaryFXApp
+
+
Gibt die mit dem String key verknüpfte View zurück
+
+
graphicScaleFactorProperty - Variable in class bitchanger.gui.controls.UnfocusedButton
+
 
+
graphicScaleProperty - Variable in class bitchanger.gui.controls.UnfocusedButton
+
 
+
+A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages
+
+ + + diff --git a/doc/0.1.4/de_private/index-files/index-8.html b/doc/0.1.4/de_private/index-files/index-8.html new file mode 100644 index 0000000..0ecb9d7 --- /dev/null +++ b/doc/0.1.4/de_private/index-files/index-8.html @@ -0,0 +1,189 @@ + + + + + +H-Index + + + + + + + + + + + + + + + +
+ +
+
+
A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages + + +

H

+
+
hasPath - Variable in class bitchanger.gui.controls.SVGIcon
+
 
+
hasPath() - Method in class bitchanger.gui.controls.SVGIcon
+
 
+
hasSelection() - Method in class bitchanger.gui.controls.ValueField
+
+
Überprüft, ob es eine Textauswahl in diesem ValueField gibt
+
+
hasValidValue() - Method in class bitchanger.gui.controls.BaseSpinner
+
+
Prüft, ob der Text im Editor ein gültiger Wert ist und mit Methode Spinner.commitValue() + aktualisiert werden kann.
+
+
HELP_ABOUT_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
+
+
Schlüsselwort, mit dem das MenuItem "Über" in der Map BasicMenuBar.menuItemMap abgelegt ist
+
+
HELP_MENU_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
+
+
Schlüsselwort, mit dem das Menu "Hilfe" in der Map BasicMenuBar.menuItemMap abgelegt ist
+
+
HELP_RESET_PREFS_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
+
+
Schlüsselwort, mit dem das MenuItem "Einstellungen zurücksetzen" in der Map BasicMenuBar.menuItemMap abgelegt ist
+
+
HELP_VERSION_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
+
+
Schlüsselwort, mit dem das MenuItem "Version" in der Map BasicMenuBar.menuItemMap abgelegt ist
+
+
hexValue - Variable in class bitchanger.calculations.SimpleChangeableNumber
+
+
eingeschlossener Wert in der hexadezimalen String-Darstellung
+
+
hgapProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
+
+
Property für den horizontalen Abstand der GridPane im Center
+
+
+A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages
+
+ + + diff --git a/doc/0.1.4/de_private/index-files/index-9.html b/doc/0.1.4/de_private/index-files/index-9.html new file mode 100644 index 0000000..81142bd --- /dev/null +++ b/doc/0.1.4/de_private/index-files/index-9.html @@ -0,0 +1,318 @@ + + + + + +I-Index + + + + + + + + + + + + + + + +
+ +
+
+
A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages + + +

I

+
+
ICON_LIST - Static variable in class bitchanger.util.Resources
+
+
Liste, die Speicherorte aller in dieser Klasse definierten Icons enthält
+
+
IconFactory - Class in bitchanger.util
+
+
Factory Klasse für das Erstellen von SVGIcons
+
+
IconFactory() - Constructor for class bitchanger.util.IconFactory
+
+
Diese Klasse ist nicht instanziierbar
+
+
IDEA_FILLED_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des gefüllten Idee Icons ("Glühbirne") oder null, wenn das Icon nicht gefunden wurde
+
+
IDEA_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Idee Icons ("Glühbirne") oder null, wenn das Icon nicht gefunden wurde
+
+
IDEA_SPEECH_BUBBLE_FILLED_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Idee Icons in einer gefüllten Sprechblase oder null, wenn das Icon nicht gefunden wurde
+
+
IDEA_SPEECH_BUBBLE_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Idee Icons in einer Sprechblase oder null, wenn das Icon nicht gefunden wurde
+
+
IEEE_VIEW_KEY - Static variable in class bitchanger.main.PrimaryFXApp
+
+
Schlüsselwort, mit dem über PrimaryFXApp.getViewable(String) auf die IEEEView zugegriffen werden kann
+
+
IEEEController - Class in bitchanger.gui.controller
+
 
+
IEEEController(IEEEView) - Constructor for class bitchanger.gui.controller.IEEEController
+
 
+
IEEEMenuController - Class in bitchanger.gui.controller
+
 
+
IEEEMenuController(BasicMenuBar, ControllableApplication, IEEEView) - Constructor for class bitchanger.gui.controller.IEEEMenuController
+
 
+
ieeeView - Variable in class bitchanger.main.PrimaryFXApp
+
+
View für die Umwandlung mit der IEEE-Norm
+
+
IEEEView - Class in bitchanger.gui.views
+
+
View, die die Scene für die Umwandlung zwischen dezimal Zahlen und der IEEE-Norm enthält.
+
+
IEEEView() - Constructor for class bitchanger.gui.views.IEEEView
+
+
Erzeugt eine neue IEEEView mit vollständigem Scenegraphen und initialisiert die Funktionen + der Bedienelemente mit einem IEEEController.
+
+
indicateFractionalInaccuracy - Variable in class bitchanger.gui.controller.ConverterMenuController
+
 
+
indicateFractionalPrecision() - Method in class bitchanger.preferences.Preferences
+
+
Gibt den Wert der indicateFractionalPrecisionProperty zurück
+
+
indicateFractionalPrecisionProperty - Variable in class bitchanger.preferences.Preferences
+
+
Property für die Anzeige von abgebrochenen Nachkommastellen
+
+
INFO_CIRCLE_FILLED_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des gefüllten Info Icons oder null, wenn das Icon nicht gefunden wurde
+
+
INFO_CIRCLE_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Info Icons oder null, wenn das Icon nicht gefunden wurde
+
+
INFO_CIRCLE_SIMPLE_FILLED_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des einfachen gefüllten Info Icons mit schlichtem 'i' oder null, wenn das Icon nicht gefunden wurde
+
+
INFO_CIRCLE_SIMPLE_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Info Icons mit schlichtem 'i' oder null, wenn das Icon nicht gefunden wurde
+
+
INFO_CIRCLE_THIN_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Info Icons mit schlichtem 'i' in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
+
+
INFO_SPEECH_BOX_FILLED_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Info Icons in einer gefüllten "Sprechbox" oder null, wenn das Icon nicht gefunden wurde
+
+
INFO_SPEECH_BOX_ICON - Static variable in class bitchanger.util.Resources
+
+
Speicherort des Info Icons in einer "Sprechbox" oder null, wenn das Icon nicht gefunden wurde
+
+
InformationDialog - Class in bitchanger.gui.controls
+
 
+
InformationDialog() - Constructor for class bitchanger.gui.controls.InformationDialog
+
 
+
InformationDialog(InformationDialog.InformationType) - Constructor for class bitchanger.gui.controls.InformationDialog
+
 
+
InformationDialog.InformationType - Enum in bitchanger.gui.controls
+
 
+
InformationType() - Constructor for enum bitchanger.gui.controls.InformationDialog.InformationType
+
 
+
init() - Method in class bitchanger.gui.controls.ValueButton
+
+
Setzt Listener zum Aktivieren und Deaktivieren dieses Buttons + durch die eingestellte Basis
+
+
init() - Method in class bitchanger.gui.views.ViewBase
+
+
Initialisierungsmethode.
+
+
initButtons() - Method in class bitchanger.gui.controller.ConverterController
+
+
Sucht die benötigten Referenzen zu den Buttons aus der buttonMap und speichert diese in den Attributen
+
+
initControls() - Method in class bitchanger.gui.controller.AlphaNumKeysController
+
+
Initialisiert alle benötigten Bedienelemente mit Referenzen aus den zur Verfügung stehenden Maps.
+
+
initControls() - Method in class bitchanger.gui.controller.BasicMenuController
+
+
Initialisiert alle benötigten Bedienelemente mit Referenzen aus den zur Verfügung stehenden Maps.
+
+
initControls() - Method in class bitchanger.gui.controller.ControllerBase
+
+
Initialisiert alle benötigten Bedienelemente mit Referenzen aus den zur Verfügung stehenden Maps.
+
+
initControls() - Method in class bitchanger.gui.controller.ConverterController
+
+
Initialisiert alle benötigten Bedienelemente mit Referenzen aus den zur Verfügung stehenden Maps.
+
+
initControls() - Method in class bitchanger.gui.controller.ConverterMenuController
+
+
Initialisiert alle benötigten Bedienelemente mit Referenzen aus den zur Verfügung stehenden Maps.
+
+
initControls() - Method in class bitchanger.gui.controller.IEEEController
+
+
Initialisiert alle benötigten Bedienelemente mit Referenzen aus den zur Verfügung stehenden Maps.
+
+
initDecimal(String) - Method in class bitchanger.calculations.SimpleChangeableNumber
+
+
Setzt den eingeschlossenen Wert dieser SimpleChangeableNumber auf den übergebenen dezimal-Wert.
+
+
initShape() - Method in class bitchanger.gui.controls.UnfocusedButton
+
+
Schaltet den Fokus für diesen Button aus und setzt als Grundform dieses Buttons ein Rechteck ohne abgerundete Ecken ein.
+
+
initTextFields() - Method in class bitchanger.gui.controller.ConverterController
+
+
Sucht die benötigten Referenzen zu den Textfeldern aus der textFieldMap, speichert diese in den Attributen und setzt die Basis der einzelnen Textfelder.
+
+
insertSpace(StringBuffer, int) - Static method in class bitchanger.calculations.ConvertingNumbers
+
+
Unterteilt den übergebenen StringBuffer in Blöcke mit bestimmter Länge
+
+
isArrowButton(Node) - Method in class bitchanger.gui.controller.ConverterController
+
+
Prüft, ob die übergebene Node einer der Pfeil-Buttons zum Scrollen in einem Spinner ist.
+
+
isShowingKeyboard - Variable in class bitchanger.gui.controller.AlphaNumKeysController
+
+
Merker für den derzeitigen Tastaturmodus
+
+
isValueToBase(int, String) - Static method in class bitchanger.calculations.ConvertingNumbers
+
+
Prüft, ob value eine Zahl zur geforderten Basis base repräsentiert.
+
+
+A B C D E F G H I K L M N O P Q R S T U V W X Z 
All Classes All Packages
+
+ + + diff --git a/doc/0.1.4/de_private/index.html b/doc/0.1.4/de_private/index.html new file mode 100644 index 0000000..61a91ee --- /dev/null +++ b/doc/0.1.4/de_private/index.html @@ -0,0 +1,198 @@ + + + + + +Overview + + + + + + + + + + + + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Packages 
PackageDescription
bitchanger.calculations +
Bietet alle Klassen, die zur Berechnung der Daten benötigt werden.
+
bitchanger.gui.controller +
Stellt Controller bereit, die den Views eine Funktion geben.
+
bitchanger.gui.controls +
Stellt angepasste Bedienelemente und Funktionen für die Benutzeroberfläche zur Verfügung
+
bitchanger.gui.views +
Bietet verschiedene Views, die auf einer graphischen Oberfläche präsentiert werden können
+
bitchanger.main +
Beinhaltet den Launcher mit der Main-Methode und die JavaFX Applikation zum starten der grafischen Oberfläche.
+
bitchanger.preferences +
Mit den Klassen aus diesem Package können alle Komponenten auf globale Einstellungen zugreifen und diese verändern.
+
bitchanger.util +
Enthält Klassen mit allgemeinen und klassenübergreifend benötigten Methoden.
+
+
+
+ + + diff --git a/doc/0.1.4/de_private/jquery/external/jquery/jquery.js b/doc/0.1.4/de_private/jquery/external/jquery/jquery.js new file mode 100644 index 0000000..9b5206b --- /dev/null +++ b/doc/0.1.4/de_private/jquery/external/jquery/jquery.js @@ -0,0 +1,10364 @@ +/*! + * jQuery JavaScript Library v3.3.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2018-01-20T17:24Z + */ +( function( global, factory ) { + + "use strict"; + + 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 ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var document = window.document; + +var getProto = Object.getPrototypeOf; + +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 fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + return typeof obj === "function" && typeof obj.nodeType !== "number"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + + + + var preservedScriptAttributes = { + type: true, + src: true, + noModule: true + }; + + function DOMEval( code, doc, node ) { + doc = doc || document; + + var i, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + if ( node[ i ] ) { + script[ i ] = node[ i ]; + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.3.1", + + // 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.0 only + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // 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 all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : 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; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + 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(); + }, + + // 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" && !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 = Array.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && Array.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() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + + /* eslint-disable no-unused-vars */ + // See https://github.com/eslint/eslint/issues/6125 + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + DOMEval( code ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android <=4.0 only + 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 ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + 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 length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + 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, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.3 + * https://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-08-08 + */ +(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; + }, + + // 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 + // https://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 + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // 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( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "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 = /[+~]/, + + // 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 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + disabledAncestor = addCombinator( + function( elem ) { + return elem.disabled === true && ("form" in elem || "label" in elem); + }, + { dir: "parentNode", next: "legend" } + ); + +// 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 m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[i] = "#" + nid + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + 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 element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement("fieldset"); + + try { + return !!fn( el ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + // release memory in IE + el = 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 = arr.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 && + a.sourceIndex - b.sourceIndex; + + // 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 :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + disabledAncestor( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * 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, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9-11, Edge + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + if ( preferredDoc !== document && + (subWindow = document.defaultView) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( el ) { + el.className = "i"; + return !el.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( el ) { + el.appendChild( document.createComment("") ); + return !el.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + }); + + // ID filter and find + if ( support.getById ) { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + 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; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( (elem = elems[i++]) ) { + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // 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 ( typeof context.getElementsByClassName !== "undefined" && 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 https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( el ) { + // 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 + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // 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 + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.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 ( !el.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement("input"); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.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 ( el.querySelectorAll(":enabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll(":disabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( el ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[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 self-exclusive + // 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 === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === document || 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 === document ? -1 : + b === document ? 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 document; +}; + +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 && + !compilerCache[ expr + " " ] && + ( !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.escape = function( sel ) { + return (sel + "").replace( rcssescape, fcssescape ); +}; + +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, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + 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 + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && 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 ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + // Use previously-cached element index if available + if ( useCache ) { + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + // 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 ) { + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + uniqueCache[ 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": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( 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, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "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 ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator 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 ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( (oldCache = uniqueCache[ key ]) && + 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 + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + return false; + }; +} + +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 || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + if ( !context && elem.ownerDocument !== document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context || document, 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 ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + 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 only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + 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, + !context || 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( el ) { + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( el ) { + el.innerHTML = ""; + return el.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( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.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( el ) { + return el.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; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var 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; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + 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; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : 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 to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // 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 ( 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 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).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[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + 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.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 = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.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.uniqueSort( 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.uniqueSort( + 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 dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( nodeName( elem, "iframe" ) ) { + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return 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.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], 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" ? + 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, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + 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.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + 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; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).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 = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + 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( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + 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, + + // 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 ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !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 ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // 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 ) ) { + + return this.get( owner, 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, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = 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 getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +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, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.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 = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // 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 + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.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 dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.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 = dataPriv.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 rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + jQuery.contains( elem.ownerDocument, elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + +var 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; +}; + + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + 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 ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // Support: IE <=9 only + option: [ 1, "" ], + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +// Support: IE <=9 only +wrapMap.optgroup = wrapMap.option; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + 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 ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // 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 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // 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++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + 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; +} + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // 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: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; +} )(); +var documentElement = document.documentElement; + + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 only +// See #13393 for more info +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, 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 ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + 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 elem; + } + + 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 elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * 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 = dataPriv.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; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, 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 !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + 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 ); + } + } + } + + 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 = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + 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 data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + // Make a writable jQuery.Event from the native event object + var event = jQuery.event.fix( nativeEvent ); + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + handlers = ( dataPriv.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; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + 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.rnamespace || event.rnamespace.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, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + 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 && nodeName( this, "input" ) ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return 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; + } + } + } + } +}; + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, 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: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // 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 || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +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 mouseenter/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; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, 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 ); + } ); + } +} ); + + +var + + /* eslint-disable max-len */ + + // See https://github.com/eslint/eslint/issues/3229 + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, + + /* eslint-enable */ + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return 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 ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +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 ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.access( src ); + pdataCur = dataPriv.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 ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// 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; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + 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: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ 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 || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), doc, node ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1>" ); + }, + + 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: https://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; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + 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 ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + 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 domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, 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 domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + 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 = jQuery.htmlPrefilter( value ); + + 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 ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +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: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + div.style.position = "absolute"; + scrollboxSizeVal = div.offsetWidth === 36 || "absolute"; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // 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"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.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 <=9 - 11 only + // 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 ); + } + }; +} + + +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]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }, + + cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style; + +// Return a css property mapped to a potentially vendor prefixed property +function vendorPropName( name ) { + + // Shortcut for names that are not vendor prefixed + if ( name in emptyStyle ) { + return name; + } + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a property mapped along what jQuery.cssProps suggests or to +// a vendor prefixed property. +function finalPropName( name ) { + var ret = jQuery.cssProps[ name ]; + if ( !ret ) { + ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name; + } + return ret; +} + +function setPositiveNumber( elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + ) ); + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + val = curCSS( elem, dimension, styles ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox; + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + // Check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = valueIsBorderBox && + ( support.boxSizingReliable() || val === elem.style[ dimension ] ); + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + if ( val === "auto" || + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) { + + val = elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ]; + + // offsetWidth/offsetHeight provide border-box values + valueIsBorderBox = true; + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "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: { + "animationIterationCount": true, + "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: {}, + + // 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 = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( 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 = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // 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 was passed in, add the unit (except for certain CSS properties) + if ( type === "number" ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // 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 ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + 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 = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( 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 || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( i, dimension ) { + jQuery.cssHooks[ dimension ] = { + 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" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra && boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ); + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && support.scrollboxSize() === styles.position ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// 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 ( prefix !== "margin" ) { + 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 ( Array.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 ); + } +} ); + + +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 || jQuery.easing._default; + 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; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && 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.nodeType === 1 && + ( 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 only +// 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; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.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 = ( Animation.tweeners[ prop ] || [] ).concat( Animation.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 ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + 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(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + 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 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.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 = Animation.prefilters.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 only + // 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 there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, 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.notifyWith( elem, [ animation, 1, 0 ] ); + 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 = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + 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 ( 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( isHiddenWithinTree ).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 || dataPriv.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 = dataPriv.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 = dataPriv.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 = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + 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 ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/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 = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // 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 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 ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// 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, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/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 ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/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" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + 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 ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", 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. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + 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; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + 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 ( Array.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: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-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 + !option.disabled && + ( !option.parentNode.disabled || + !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 ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // 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 ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = 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( "." ) > -1 ) { + + // 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.rnamespace = 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 && !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() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && 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 ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !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; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + 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 ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + 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 ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = Date.now(); + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + 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 ( Array.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" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( 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, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.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( "&" ); +}; + +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(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* 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( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// 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( rnothtmlwhite ) || []; + + if ( 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: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + 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: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + 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": JSON.parse, + + // 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, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // 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 = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + 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 completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + 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 ); + + // 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 || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // 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 ( completed ) { + 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 + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // 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 || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // 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 ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.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 ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + + +jQuery._evalUrl = function( url ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + "throws": true + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( 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 ( 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 htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + 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 ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = 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(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + 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( "\r\n"; + +// inject VBScript +document.write(IEBinaryToArray_ByteStr_Script); + +global.JSZipUtils._getBinaryFromXHR = function (xhr) { + var binary = xhr.responseBody; + var byteMapping = {}; + for ( var i = 0; i < 256; i++ ) { + for ( var j = 0; j < 256; j++ ) { + byteMapping[ String.fromCharCode( i + (j << 8) ) ] = + String.fromCharCode(i) + String.fromCharCode(j); + } + } + var rawBytes = IEBinaryToArray_ByteStr(binary); + var lastChr = IEBinaryToArray_ByteStr_Last(binary); + return rawBytes.replace(/[\s\S]/g, function( match ) { + return byteMapping[match]; + }) + lastChr; +}; + +// enforcing Stuk's coding style +// vim: set shiftwidth=4 softtabstop=4: + +},{}]},{},[1]) +; diff --git a/doc/0.1.4/de_private/jquery/jszip-utils/dist/jszip-utils-ie.min.js b/doc/0.1.4/de_private/jquery/jszip-utils/dist/jszip-utils-ie.min.js new file mode 100644 index 0000000..93d8bc8 --- /dev/null +++ b/doc/0.1.4/de_private/jquery/jszip-utils/dist/jszip-utils-ie.min.js @@ -0,0 +1,10 @@ +/*! + +JSZipUtils - A collection of cross-browser utilities to go along with JSZip. + + +(c) 2014 Stuart Knightley, David Duponchel +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip-utils/master/LICENSE.markdown. + +*/ +!function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g\r\n";document.write(b),a.JSZipUtils._getBinaryFromXHR=function(a){for(var b=a.responseBody,c={},d=0;256>d;d++)for(var e=0;256>e;e++)c[String.fromCharCode(d+(e<<8))]=String.fromCharCode(d)+String.fromCharCode(e);var f=IEBinaryToArray_ByteStr(b),g=IEBinaryToArray_ByteStr_Last(b);return f.replace(/[\s\S]/g,function(a){return c[a]})+g}},{}]},{},[1]); diff --git a/doc/0.1.4/de_private/jquery/jszip-utils/dist/jszip-utils.js b/doc/0.1.4/de_private/jquery/jszip-utils/dist/jszip-utils.js new file mode 100644 index 0000000..775895e --- /dev/null +++ b/doc/0.1.4/de_private/jquery/jszip-utils/dist/jszip-utils.js @@ -0,0 +1,118 @@ +/*! + +JSZipUtils - A collection of cross-browser utilities to go along with JSZip. + + +(c) 2014 Stuart Knightley, David Duponchel +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip-utils/master/LICENSE.markdown. + +*/ +!function(e){"object"==typeof exports?module.exports=e():"function"==typeof define&&define.amd?define(e):"undefined"!=typeof window?window.JSZipUtils=e():"undefined"!=typeof global?global.JSZipUtils=e():"undefined"!=typeof self&&(self.JSZipUtils=e())}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o + +(c) 2014 Stuart Knightley, David Duponchel +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip-utils/master/LICENSE.markdown. + +*/ +!function(a){"object"==typeof exports?module.exports=a():"function"==typeof define&&define.amd?define(a):"undefined"!=typeof window?window.JSZipUtils=a():"undefined"!=typeof global?global.JSZipUtils=a():"undefined"!=typeof self&&(self.JSZipUtils=a())}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g + +(c) 2009-2016 Stuart Knightley +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/master/LICENSE.markdown. + +JSZip uses the library pako released under the MIT license : +https://github.com/nodeca/pako/blob/master/LICENSE +*/ + +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.JSZip = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o> 2; + enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); + enc3 = remainingBytes > 1 ? (((chr2 & 15) << 2) | (chr3 >> 6)) : 64; + enc4 = remainingBytes > 2 ? (chr3 & 63) : 64; + + output.push(_keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4)); + + } + + return output.join(""); +}; + +// public method for decoding +exports.decode = function(input) { + var chr1, chr2, chr3; + var enc1, enc2, enc3, enc4; + var i = 0, resultIndex = 0; + + var dataUrlPrefix = "data:"; + + if (input.substr(0, dataUrlPrefix.length) === dataUrlPrefix) { + // This is a common error: people give a data url + // (data:image/png;base64,iVBOR...) with a {base64: true} and + // wonders why things don't work. + // We can detect that the string input looks like a data url but we + // *can't* be sure it is one: removing everything up to the comma would + // be too dangerous. + throw new Error("Invalid base64 input, it looks like a data url."); + } + + input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + + var totalLength = input.length * 3 / 4; + if(input.charAt(input.length - 1) === _keyStr.charAt(64)) { + totalLength--; + } + if(input.charAt(input.length - 2) === _keyStr.charAt(64)) { + totalLength--; + } + if (totalLength % 1 !== 0) { + // totalLength is not an integer, the length does not match a valid + // base64 content. That can happen if: + // - the input is not a base64 content + // - the input is *almost* a base64 content, with a extra chars at the + // beginning or at the end + // - the input uses a base64 variant (base64url for example) + throw new Error("Invalid base64 input, bad content length."); + } + var output; + if (support.uint8array) { + output = new Uint8Array(totalLength|0); + } else { + output = new Array(totalLength|0); + } + + while (i < input.length) { + + enc1 = _keyStr.indexOf(input.charAt(i++)); + enc2 = _keyStr.indexOf(input.charAt(i++)); + enc3 = _keyStr.indexOf(input.charAt(i++)); + enc4 = _keyStr.indexOf(input.charAt(i++)); + + chr1 = (enc1 << 2) | (enc2 >> 4); + chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); + chr3 = ((enc3 & 3) << 6) | enc4; + + output[resultIndex++] = chr1; + + if (enc3 !== 64) { + output[resultIndex++] = chr2; + } + if (enc4 !== 64) { + output[resultIndex++] = chr3; + } + + } + + return output; +}; + +},{"./support":30,"./utils":32}],2:[function(require,module,exports){ +'use strict'; + +var external = require("./external"); +var DataWorker = require('./stream/DataWorker'); +var DataLengthProbe = require('./stream/DataLengthProbe'); +var Crc32Probe = require('./stream/Crc32Probe'); +var DataLengthProbe = require('./stream/DataLengthProbe'); + +/** + * Represent a compressed object, with everything needed to decompress it. + * @constructor + * @param {number} compressedSize the size of the data compressed. + * @param {number} uncompressedSize the size of the data after decompression. + * @param {number} crc32 the crc32 of the decompressed file. + * @param {object} compression the type of compression, see lib/compressions.js. + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the compressed data. + */ +function CompressedObject(compressedSize, uncompressedSize, crc32, compression, data) { + this.compressedSize = compressedSize; + this.uncompressedSize = uncompressedSize; + this.crc32 = crc32; + this.compression = compression; + this.compressedContent = data; +} + +CompressedObject.prototype = { + /** + * Create a worker to get the uncompressed content. + * @return {GenericWorker} the worker. + */ + getContentWorker : function () { + var worker = new DataWorker(external.Promise.resolve(this.compressedContent)) + .pipe(this.compression.uncompressWorker()) + .pipe(new DataLengthProbe("data_length")); + + var that = this; + worker.on("end", function () { + if(this.streamInfo['data_length'] !== that.uncompressedSize) { + throw new Error("Bug : uncompressed data size mismatch"); + } + }); + return worker; + }, + /** + * Create a worker to get the compressed content. + * @return {GenericWorker} the worker. + */ + getCompressedWorker : function () { + return new DataWorker(external.Promise.resolve(this.compressedContent)) + .withStreamInfo("compressedSize", this.compressedSize) + .withStreamInfo("uncompressedSize", this.uncompressedSize) + .withStreamInfo("crc32", this.crc32) + .withStreamInfo("compression", this.compression) + ; + } +}; + +/** + * Chain the given worker with other workers to compress the content with the + * given compresion. + * @param {GenericWorker} uncompressedWorker the worker to pipe. + * @param {Object} compression the compression object. + * @param {Object} compressionOptions the options to use when compressing. + * @return {GenericWorker} the new worker compressing the content. + */ +CompressedObject.createWorkerFrom = function (uncompressedWorker, compression, compressionOptions) { + return uncompressedWorker + .pipe(new Crc32Probe()) + .pipe(new DataLengthProbe("uncompressedSize")) + .pipe(compression.compressWorker(compressionOptions)) + .pipe(new DataLengthProbe("compressedSize")) + .withStreamInfo("compression", compression); +}; + +module.exports = CompressedObject; + +},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(require,module,exports){ +'use strict'; + +var GenericWorker = require("./stream/GenericWorker"); + +exports.STORE = { + magic: "\x00\x00", + compressWorker : function (compressionOptions) { + return new GenericWorker("STORE compression"); + }, + uncompressWorker : function () { + return new GenericWorker("STORE decompression"); + } +}; +exports.DEFLATE = require('./flate'); + +},{"./flate":7,"./stream/GenericWorker":28}],4:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); + +/** + * The following functions come from pako, from pako/lib/zlib/crc32.js + * released under the MIT license, see pako https://github.com/nodeca/pako/ + */ + +// Use ordinary array, since untyped makes no boost here +function makeTable() { + var c, table = []; + + for(var n =0; n < 256; n++){ + c = n; + for(var k =0; k < 8; k++){ + c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); + } + table[n] = c; + } + + return table; +} + +// Create table on load. Just 255 signed longs. Not a problem. +var crcTable = makeTable(); + + +function crc32(crc, buf, len, pos) { + var t = crcTable, end = pos + len; + + crc = crc ^ (-1); + + for (var i = pos; i < end; i++ ) { + crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF]; + } + + return (crc ^ (-1)); // >>> 0; +} + +// That's all for the pako functions. + +/** + * Compute the crc32 of a string. + * This is almost the same as the function crc32, but for strings. Using the + * same function for the two use cases leads to horrible performances. + * @param {Number} crc the starting value of the crc. + * @param {String} str the string to use. + * @param {Number} len the length of the string. + * @param {Number} pos the starting position for the crc32 computation. + * @return {Number} the computed crc32. + */ +function crc32str(crc, str, len, pos) { + var t = crcTable, end = pos + len; + + crc = crc ^ (-1); + + for (var i = pos; i < end; i++ ) { + crc = (crc >>> 8) ^ t[(crc ^ str.charCodeAt(i)) & 0xFF]; + } + + return (crc ^ (-1)); // >>> 0; +} + +module.exports = function crc32wrapper(input, crc) { + if (typeof input === "undefined" || !input.length) { + return 0; + } + + var isArray = utils.getTypeOf(input) !== "string"; + + if(isArray) { + return crc32(crc|0, input, input.length, 0); + } else { + return crc32str(crc|0, input, input.length, 0); + } +}; + +},{"./utils":32}],5:[function(require,module,exports){ +'use strict'; +exports.base64 = false; +exports.binary = false; +exports.dir = false; +exports.createFolders = true; +exports.date = null; +exports.compression = null; +exports.compressionOptions = null; +exports.comment = null; +exports.unixPermissions = null; +exports.dosPermissions = null; + +},{}],6:[function(require,module,exports){ +/* global Promise */ +'use strict'; + +// load the global object first: +// - it should be better integrated in the system (unhandledRejection in node) +// - the environment may have a custom Promise implementation (see zone.js) +var ES6Promise = null; +if (typeof Promise !== "undefined") { + ES6Promise = Promise; +} else { + ES6Promise = require("lie"); +} + +/** + * Let the user use/change some implementations. + */ +module.exports = { + Promise: ES6Promise +}; + +},{"lie":58}],7:[function(require,module,exports){ +'use strict'; +var USE_TYPEDARRAY = (typeof Uint8Array !== 'undefined') && (typeof Uint16Array !== 'undefined') && (typeof Uint32Array !== 'undefined'); + +var pako = require("pako"); +var utils = require("./utils"); +var GenericWorker = require("./stream/GenericWorker"); + +var ARRAY_TYPE = USE_TYPEDARRAY ? "uint8array" : "array"; + +exports.magic = "\x08\x00"; + +/** + * Create a worker that uses pako to inflate/deflate. + * @constructor + * @param {String} action the name of the pako function to call : either "Deflate" or "Inflate". + * @param {Object} options the options to use when (de)compressing. + */ +function FlateWorker(action, options) { + GenericWorker.call(this, "FlateWorker/" + action); + + this._pako = null; + this._pakoAction = action; + this._pakoOptions = options; + // the `meta` object from the last chunk received + // this allow this worker to pass around metadata + this.meta = {}; +} + +utils.inherits(FlateWorker, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +FlateWorker.prototype.processChunk = function (chunk) { + this.meta = chunk.meta; + if (this._pako === null) { + this._createPako(); + } + this._pako.push(utils.transformTo(ARRAY_TYPE, chunk.data), false); +}; + +/** + * @see GenericWorker.flush + */ +FlateWorker.prototype.flush = function () { + GenericWorker.prototype.flush.call(this); + if (this._pako === null) { + this._createPako(); + } + this._pako.push([], true); +}; +/** + * @see GenericWorker.cleanUp + */ +FlateWorker.prototype.cleanUp = function () { + GenericWorker.prototype.cleanUp.call(this); + this._pako = null; +}; + +/** + * Create the _pako object. + * TODO: lazy-loading this object isn't the best solution but it's the + * quickest. The best solution is to lazy-load the worker list. See also the + * issue #446. + */ +FlateWorker.prototype._createPako = function () { + this._pako = new pako[this._pakoAction]({ + raw: true, + level: this._pakoOptions.level || -1 // default compression + }); + var self = this; + this._pako.onData = function(data) { + self.push({ + data : data, + meta : self.meta + }); + }; +}; + +exports.compressWorker = function (compressionOptions) { + return new FlateWorker("Deflate", compressionOptions); +}; +exports.uncompressWorker = function () { + return new FlateWorker("Inflate", {}); +}; + +},{"./stream/GenericWorker":28,"./utils":32,"pako":59}],8:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var GenericWorker = require('../stream/GenericWorker'); +var utf8 = require('../utf8'); +var crc32 = require('../crc32'); +var signature = require('../signature'); + +/** + * Transform an integer into a string in hexadecimal. + * @private + * @param {number} dec the number to convert. + * @param {number} bytes the number of bytes to generate. + * @returns {string} the result. + */ +var decToHex = function(dec, bytes) { + var hex = "", i; + for (i = 0; i < bytes; i++) { + hex += String.fromCharCode(dec & 0xff); + dec = dec >>> 8; + } + return hex; +}; + +/** + * Generate the UNIX part of the external file attributes. + * @param {Object} unixPermissions the unix permissions or null. + * @param {Boolean} isDir true if the entry is a directory, false otherwise. + * @return {Number} a 32 bit integer. + * + * adapted from http://unix.stackexchange.com/questions/14705/the-zip-formats-external-file-attribute : + * + * TTTTsstrwxrwxrwx0000000000ADVSHR + * ^^^^____________________________ file type, see zipinfo.c (UNX_*) + * ^^^_________________________ setuid, setgid, sticky + * ^^^^^^^^^________________ permissions + * ^^^^^^^^^^______ not used ? + * ^^^^^^ DOS attribute bits : Archive, Directory, Volume label, System file, Hidden, Read only + */ +var generateUnixExternalFileAttr = function (unixPermissions, isDir) { + + var result = unixPermissions; + if (!unixPermissions) { + // I can't use octal values in strict mode, hence the hexa. + // 040775 => 0x41fd + // 0100664 => 0x81b4 + result = isDir ? 0x41fd : 0x81b4; + } + return (result & 0xFFFF) << 16; +}; + +/** + * Generate the DOS part of the external file attributes. + * @param {Object} dosPermissions the dos permissions or null. + * @param {Boolean} isDir true if the entry is a directory, false otherwise. + * @return {Number} a 32 bit integer. + * + * Bit 0 Read-Only + * Bit 1 Hidden + * Bit 2 System + * Bit 3 Volume Label + * Bit 4 Directory + * Bit 5 Archive + */ +var generateDosExternalFileAttr = function (dosPermissions, isDir) { + + // the dir flag is already set for compatibility + return (dosPermissions || 0) & 0x3F; +}; + +/** + * Generate the various parts used in the construction of the final zip file. + * @param {Object} streamInfo the hash with informations about the compressed file. + * @param {Boolean} streamedContent is the content streamed ? + * @param {Boolean} streamingEnded is the stream finished ? + * @param {number} offset the current offset from the start of the zip file. + * @param {String} platform let's pretend we are this platform (change platform dependents fields) + * @param {Function} encodeFileName the function to encode the file name / comment. + * @return {Object} the zip parts. + */ +var generateZipParts = function(streamInfo, streamedContent, streamingEnded, offset, platform, encodeFileName) { + var file = streamInfo['file'], + compression = streamInfo['compression'], + useCustomEncoding = encodeFileName !== utf8.utf8encode, + encodedFileName = utils.transformTo("string", encodeFileName(file.name)), + utfEncodedFileName = utils.transformTo("string", utf8.utf8encode(file.name)), + comment = file.comment, + encodedComment = utils.transformTo("string", encodeFileName(comment)), + utfEncodedComment = utils.transformTo("string", utf8.utf8encode(comment)), + useUTF8ForFileName = utfEncodedFileName.length !== file.name.length, + useUTF8ForComment = utfEncodedComment.length !== comment.length, + dosTime, + dosDate, + extraFields = "", + unicodePathExtraField = "", + unicodeCommentExtraField = "", + dir = file.dir, + date = file.date; + + + var dataInfo = { + crc32 : 0, + compressedSize : 0, + uncompressedSize : 0 + }; + + // if the content is streamed, the sizes/crc32 are only available AFTER + // the end of the stream. + if (!streamedContent || streamingEnded) { + dataInfo.crc32 = streamInfo['crc32']; + dataInfo.compressedSize = streamInfo['compressedSize']; + dataInfo.uncompressedSize = streamInfo['uncompressedSize']; + } + + var bitflag = 0; + if (streamedContent) { + // Bit 3: the sizes/crc32 are set to zero in the local header. + // The correct values are put in the data descriptor immediately + // following the compressed data. + bitflag |= 0x0008; + } + if (!useCustomEncoding && (useUTF8ForFileName || useUTF8ForComment)) { + // Bit 11: Language encoding flag (EFS). + bitflag |= 0x0800; + } + + + var extFileAttr = 0; + var versionMadeBy = 0; + if (dir) { + // dos or unix, we set the dos dir flag + extFileAttr |= 0x00010; + } + if(platform === "UNIX") { + versionMadeBy = 0x031E; // UNIX, version 3.0 + extFileAttr |= generateUnixExternalFileAttr(file.unixPermissions, dir); + } else { // DOS or other, fallback to DOS + versionMadeBy = 0x0014; // DOS, version 2.0 + extFileAttr |= generateDosExternalFileAttr(file.dosPermissions, dir); + } + + // date + // @see http://www.delorie.com/djgpp/doc/rbinter/it/52/13.html + // @see http://www.delorie.com/djgpp/doc/rbinter/it/65/16.html + // @see http://www.delorie.com/djgpp/doc/rbinter/it/66/16.html + + dosTime = date.getUTCHours(); + dosTime = dosTime << 6; + dosTime = dosTime | date.getUTCMinutes(); + dosTime = dosTime << 5; + dosTime = dosTime | date.getUTCSeconds() / 2; + + dosDate = date.getUTCFullYear() - 1980; + dosDate = dosDate << 4; + dosDate = dosDate | (date.getUTCMonth() + 1); + dosDate = dosDate << 5; + dosDate = dosDate | date.getUTCDate(); + + if (useUTF8ForFileName) { + // set the unicode path extra field. unzip needs at least one extra + // field to correctly handle unicode path, so using the path is as good + // as any other information. This could improve the situation with + // other archive managers too. + // This field is usually used without the utf8 flag, with a non + // unicode path in the header (winrar, winzip). This helps (a bit) + // with the messy Windows' default compressed folders feature but + // breaks on p7zip which doesn't seek the unicode path extra field. + // So for now, UTF-8 everywhere ! + unicodePathExtraField = + // Version + decToHex(1, 1) + + // NameCRC32 + decToHex(crc32(encodedFileName), 4) + + // UnicodeName + utfEncodedFileName; + + extraFields += + // Info-ZIP Unicode Path Extra Field + "\x75\x70" + + // size + decToHex(unicodePathExtraField.length, 2) + + // content + unicodePathExtraField; + } + + if(useUTF8ForComment) { + + unicodeCommentExtraField = + // Version + decToHex(1, 1) + + // CommentCRC32 + decToHex(crc32(encodedComment), 4) + + // UnicodeName + utfEncodedComment; + + extraFields += + // Info-ZIP Unicode Path Extra Field + "\x75\x63" + + // size + decToHex(unicodeCommentExtraField.length, 2) + + // content + unicodeCommentExtraField; + } + + var header = ""; + + // version needed to extract + header += "\x0A\x00"; + // general purpose bit flag + header += decToHex(bitflag, 2); + // compression method + header += compression.magic; + // last mod file time + header += decToHex(dosTime, 2); + // last mod file date + header += decToHex(dosDate, 2); + // crc-32 + header += decToHex(dataInfo.crc32, 4); + // compressed size + header += decToHex(dataInfo.compressedSize, 4); + // uncompressed size + header += decToHex(dataInfo.uncompressedSize, 4); + // file name length + header += decToHex(encodedFileName.length, 2); + // extra field length + header += decToHex(extraFields.length, 2); + + + var fileRecord = signature.LOCAL_FILE_HEADER + header + encodedFileName + extraFields; + + var dirRecord = signature.CENTRAL_FILE_HEADER + + // version made by (00: DOS) + decToHex(versionMadeBy, 2) + + // file header (common to file and central directory) + header + + // file comment length + decToHex(encodedComment.length, 2) + + // disk number start + "\x00\x00" + + // internal file attributes TODO + "\x00\x00" + + // external file attributes + decToHex(extFileAttr, 4) + + // relative offset of local header + decToHex(offset, 4) + + // file name + encodedFileName + + // extra field + extraFields + + // file comment + encodedComment; + + return { + fileRecord: fileRecord, + dirRecord: dirRecord + }; +}; + +/** + * Generate the EOCD record. + * @param {Number} entriesCount the number of entries in the zip file. + * @param {Number} centralDirLength the length (in bytes) of the central dir. + * @param {Number} localDirLength the length (in bytes) of the local dir. + * @param {String} comment the zip file comment as a binary string. + * @param {Function} encodeFileName the function to encode the comment. + * @return {String} the EOCD record. + */ +var generateCentralDirectoryEnd = function (entriesCount, centralDirLength, localDirLength, comment, encodeFileName) { + var dirEnd = ""; + var encodedComment = utils.transformTo("string", encodeFileName(comment)); + + // end of central dir signature + dirEnd = signature.CENTRAL_DIRECTORY_END + + // number of this disk + "\x00\x00" + + // number of the disk with the start of the central directory + "\x00\x00" + + // total number of entries in the central directory on this disk + decToHex(entriesCount, 2) + + // total number of entries in the central directory + decToHex(entriesCount, 2) + + // size of the central directory 4 bytes + decToHex(centralDirLength, 4) + + // offset of start of central directory with respect to the starting disk number + decToHex(localDirLength, 4) + + // .ZIP file comment length + decToHex(encodedComment.length, 2) + + // .ZIP file comment + encodedComment; + + return dirEnd; +}; + +/** + * Generate data descriptors for a file entry. + * @param {Object} streamInfo the hash generated by a worker, containing informations + * on the file entry. + * @return {String} the data descriptors. + */ +var generateDataDescriptors = function (streamInfo) { + var descriptor = ""; + descriptor = signature.DATA_DESCRIPTOR + + // crc-32 4 bytes + decToHex(streamInfo['crc32'], 4) + + // compressed size 4 bytes + decToHex(streamInfo['compressedSize'], 4) + + // uncompressed size 4 bytes + decToHex(streamInfo['uncompressedSize'], 4); + + return descriptor; +}; + + +/** + * A worker to concatenate other workers to create a zip file. + * @param {Boolean} streamFiles `true` to stream the content of the files, + * `false` to accumulate it. + * @param {String} comment the comment to use. + * @param {String} platform the platform to use, "UNIX" or "DOS". + * @param {Function} encodeFileName the function to encode file names and comments. + */ +function ZipFileWorker(streamFiles, comment, platform, encodeFileName) { + GenericWorker.call(this, "ZipFileWorker"); + // The number of bytes written so far. This doesn't count accumulated chunks. + this.bytesWritten = 0; + // The comment of the zip file + this.zipComment = comment; + // The platform "generating" the zip file. + this.zipPlatform = platform; + // the function to encode file names and comments. + this.encodeFileName = encodeFileName; + // Should we stream the content of the files ? + this.streamFiles = streamFiles; + // If `streamFiles` is false, we will need to accumulate the content of the + // files to calculate sizes / crc32 (and write them *before* the content). + // This boolean indicates if we are accumulating chunks (it will change a lot + // during the lifetime of this worker). + this.accumulate = false; + // The buffer receiving chunks when accumulating content. + this.contentBuffer = []; + // The list of generated directory records. + this.dirRecords = []; + // The offset (in bytes) from the beginning of the zip file for the current source. + this.currentSourceOffset = 0; + // The total number of entries in this zip file. + this.entriesCount = 0; + // the name of the file currently being added, null when handling the end of the zip file. + // Used for the emited metadata. + this.currentFile = null; + + + + this._sources = []; +} +utils.inherits(ZipFileWorker, GenericWorker); + +/** + * @see GenericWorker.push + */ +ZipFileWorker.prototype.push = function (chunk) { + + var currentFilePercent = chunk.meta.percent || 0; + var entriesCount = this.entriesCount; + var remainingFiles = this._sources.length; + + if(this.accumulate) { + this.contentBuffer.push(chunk); + } else { + this.bytesWritten += chunk.data.length; + + GenericWorker.prototype.push.call(this, { + data : chunk.data, + meta : { + currentFile : this.currentFile, + percent : entriesCount ? (currentFilePercent + 100 * (entriesCount - remainingFiles - 1)) / entriesCount : 100 + } + }); + } +}; + +/** + * The worker started a new source (an other worker). + * @param {Object} streamInfo the streamInfo object from the new source. + */ +ZipFileWorker.prototype.openedSource = function (streamInfo) { + this.currentSourceOffset = this.bytesWritten; + this.currentFile = streamInfo['file'].name; + + var streamedContent = this.streamFiles && !streamInfo['file'].dir; + + // don't stream folders (because they don't have any content) + if(streamedContent) { + var record = generateZipParts(streamInfo, streamedContent, false, this.currentSourceOffset, this.zipPlatform, this.encodeFileName); + this.push({ + data : record.fileRecord, + meta : {percent:0} + }); + } else { + // we need to wait for the whole file before pushing anything + this.accumulate = true; + } +}; + +/** + * The worker finished a source (an other worker). + * @param {Object} streamInfo the streamInfo object from the finished source. + */ +ZipFileWorker.prototype.closedSource = function (streamInfo) { + this.accumulate = false; + var streamedContent = this.streamFiles && !streamInfo['file'].dir; + var record = generateZipParts(streamInfo, streamedContent, true, this.currentSourceOffset, this.zipPlatform, this.encodeFileName); + + this.dirRecords.push(record.dirRecord); + if(streamedContent) { + // after the streamed file, we put data descriptors + this.push({ + data : generateDataDescriptors(streamInfo), + meta : {percent:100} + }); + } else { + // the content wasn't streamed, we need to push everything now + // first the file record, then the content + this.push({ + data : record.fileRecord, + meta : {percent:0} + }); + while(this.contentBuffer.length) { + this.push(this.contentBuffer.shift()); + } + } + this.currentFile = null; +}; + +/** + * @see GenericWorker.flush + */ +ZipFileWorker.prototype.flush = function () { + + var localDirLength = this.bytesWritten; + for(var i = 0; i < this.dirRecords.length; i++) { + this.push({ + data : this.dirRecords[i], + meta : {percent:100} + }); + } + var centralDirLength = this.bytesWritten - localDirLength; + + var dirEnd = generateCentralDirectoryEnd(this.dirRecords.length, centralDirLength, localDirLength, this.zipComment, this.encodeFileName); + + this.push({ + data : dirEnd, + meta : {percent:100} + }); +}; + +/** + * Prepare the next source to be read. + */ +ZipFileWorker.prototype.prepareNextSource = function () { + this.previous = this._sources.shift(); + this.openedSource(this.previous.streamInfo); + if (this.isPaused) { + this.previous.pause(); + } else { + this.previous.resume(); + } +}; + +/** + * @see GenericWorker.registerPrevious + */ +ZipFileWorker.prototype.registerPrevious = function (previous) { + this._sources.push(previous); + var self = this; + + previous.on('data', function (chunk) { + self.processChunk(chunk); + }); + previous.on('end', function () { + self.closedSource(self.previous.streamInfo); + if(self._sources.length) { + self.prepareNextSource(); + } else { + self.end(); + } + }); + previous.on('error', function (e) { + self.error(e); + }); + return this; +}; + +/** + * @see GenericWorker.resume + */ +ZipFileWorker.prototype.resume = function () { + if(!GenericWorker.prototype.resume.call(this)) { + return false; + } + + if (!this.previous && this._sources.length) { + this.prepareNextSource(); + return true; + } + if (!this.previous && !this._sources.length && !this.generatedError) { + this.end(); + return true; + } +}; + +/** + * @see GenericWorker.error + */ +ZipFileWorker.prototype.error = function (e) { + var sources = this._sources; + if(!GenericWorker.prototype.error.call(this, e)) { + return false; + } + for(var i = 0; i < sources.length; i++) { + try { + sources[i].error(e); + } catch(e) { + // the `error` exploded, nothing to do + } + } + return true; +}; + +/** + * @see GenericWorker.lock + */ +ZipFileWorker.prototype.lock = function () { + GenericWorker.prototype.lock.call(this); + var sources = this._sources; + for(var i = 0; i < sources.length; i++) { + sources[i].lock(); + } +}; + +module.exports = ZipFileWorker; + +},{"../crc32":4,"../signature":23,"../stream/GenericWorker":28,"../utf8":31,"../utils":32}],9:[function(require,module,exports){ +'use strict'; + +var compressions = require('../compressions'); +var ZipFileWorker = require('./ZipFileWorker'); + +/** + * Find the compression to use. + * @param {String} fileCompression the compression defined at the file level, if any. + * @param {String} zipCompression the compression defined at the load() level. + * @return {Object} the compression object to use. + */ +var getCompression = function (fileCompression, zipCompression) { + + var compressionName = fileCompression || zipCompression; + var compression = compressions[compressionName]; + if (!compression) { + throw new Error(compressionName + " is not a valid compression method !"); + } + return compression; +}; + +/** + * Create a worker to generate a zip file. + * @param {JSZip} zip the JSZip instance at the right root level. + * @param {Object} options to generate the zip file. + * @param {String} comment the comment to use. + */ +exports.generateWorker = function (zip, options, comment) { + + var zipFileWorker = new ZipFileWorker(options.streamFiles, comment, options.platform, options.encodeFileName); + var entriesCount = 0; + try { + + zip.forEach(function (relativePath, file) { + entriesCount++; + var compression = getCompression(file.options.compression, options.compression); + var compressionOptions = file.options.compressionOptions || options.compressionOptions || {}; + var dir = file.dir, date = file.date; + + file._compressWorker(compression, compressionOptions) + .withStreamInfo("file", { + name : relativePath, + dir : dir, + date : date, + comment : file.comment || "", + unixPermissions : file.unixPermissions, + dosPermissions : file.dosPermissions + }) + .pipe(zipFileWorker); + }); + zipFileWorker.entriesCount = entriesCount; + } catch (e) { + zipFileWorker.error(e); + } + + return zipFileWorker; +}; + +},{"../compressions":3,"./ZipFileWorker":8}],10:[function(require,module,exports){ +'use strict'; + +/** + * Representation a of zip file in js + * @constructor + */ +function JSZip() { + // if this constructor is used without `new`, it adds `new` before itself: + if(!(this instanceof JSZip)) { + return new JSZip(); + } + + if(arguments.length) { + throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide."); + } + + // object containing the files : + // { + // "folder/" : {...}, + // "folder/data.txt" : {...} + // } + this.files = {}; + + this.comment = null; + + // Where we are in the hierarchy + this.root = ""; + this.clone = function() { + var newObj = new JSZip(); + for (var i in this) { + if (typeof this[i] !== "function") { + newObj[i] = this[i]; + } + } + return newObj; + }; +} +JSZip.prototype = require('./object'); +JSZip.prototype.loadAsync = require('./load'); +JSZip.support = require('./support'); +JSZip.defaults = require('./defaults'); + +// TODO find a better way to handle this version, +// a require('package.json').version doesn't work with webpack, see #327 +JSZip.version = "3.1.5"; + +JSZip.loadAsync = function (content, options) { + return new JSZip().loadAsync(content, options); +}; + +JSZip.external = require("./external"); +module.exports = JSZip; + +},{"./defaults":5,"./external":6,"./load":11,"./object":15,"./support":30}],11:[function(require,module,exports){ +'use strict'; +var utils = require('./utils'); +var external = require("./external"); +var utf8 = require('./utf8'); +var utils = require('./utils'); +var ZipEntries = require('./zipEntries'); +var Crc32Probe = require('./stream/Crc32Probe'); +var nodejsUtils = require("./nodejsUtils"); + +/** + * Check the CRC32 of an entry. + * @param {ZipEntry} zipEntry the zip entry to check. + * @return {Promise} the result. + */ +function checkEntryCRC32(zipEntry) { + return new external.Promise(function (resolve, reject) { + var worker = zipEntry.decompressed.getContentWorker().pipe(new Crc32Probe()); + worker.on("error", function (e) { + reject(e); + }) + .on("end", function () { + if (worker.streamInfo.crc32 !== zipEntry.decompressed.crc32) { + reject(new Error("Corrupted zip : CRC32 mismatch")); + } else { + resolve(); + } + }) + .resume(); + }); +} + +module.exports = function(data, options) { + var zip = this; + options = utils.extend(options || {}, { + base64: false, + checkCRC32: false, + optimizedBinaryString: false, + createFolders: false, + decodeFileName: utf8.utf8decode + }); + + if (nodejsUtils.isNode && nodejsUtils.isStream(data)) { + return external.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")); + } + + return utils.prepareContent("the loaded zip file", data, true, options.optimizedBinaryString, options.base64) + .then(function(data) { + var zipEntries = new ZipEntries(options); + zipEntries.load(data); + return zipEntries; + }).then(function checkCRC32(zipEntries) { + var promises = [external.Promise.resolve(zipEntries)]; + var files = zipEntries.files; + if (options.checkCRC32) { + for (var i = 0; i < files.length; i++) { + promises.push(checkEntryCRC32(files[i])); + } + } + return external.Promise.all(promises); + }).then(function addFiles(results) { + var zipEntries = results.shift(); + var files = zipEntries.files; + for (var i = 0; i < files.length; i++) { + var input = files[i]; + zip.file(input.fileNameStr, input.decompressed, { + binary: true, + optimizedBinaryString: true, + date: input.date, + dir: input.dir, + comment : input.fileCommentStr.length ? input.fileCommentStr : null, + unixPermissions : input.unixPermissions, + dosPermissions : input.dosPermissions, + createFolders: options.createFolders + }); + } + if (zipEntries.zipComment.length) { + zip.comment = zipEntries.zipComment; + } + + return zip; + }); +}; + +},{"./external":6,"./nodejsUtils":14,"./stream/Crc32Probe":25,"./utf8":31,"./utils":32,"./zipEntries":33}],12:[function(require,module,exports){ +"use strict"; + +var utils = require('../utils'); +var GenericWorker = require('../stream/GenericWorker'); + +/** + * A worker that use a nodejs stream as source. + * @constructor + * @param {String} filename the name of the file entry for this stream. + * @param {Readable} stream the nodejs stream. + */ +function NodejsStreamInputAdapter(filename, stream) { + GenericWorker.call(this, "Nodejs stream input adapter for " + filename); + this._upstreamEnded = false; + this._bindStream(stream); +} + +utils.inherits(NodejsStreamInputAdapter, GenericWorker); + +/** + * Prepare the stream and bind the callbacks on it. + * Do this ASAP on node 0.10 ! A lazy binding doesn't always work. + * @param {Stream} stream the nodejs stream to use. + */ +NodejsStreamInputAdapter.prototype._bindStream = function (stream) { + var self = this; + this._stream = stream; + stream.pause(); + stream + .on("data", function (chunk) { + self.push({ + data: chunk, + meta : { + percent : 0 + } + }); + }) + .on("error", function (e) { + if(self.isPaused) { + this.generatedError = e; + } else { + self.error(e); + } + }) + .on("end", function () { + if(self.isPaused) { + self._upstreamEnded = true; + } else { + self.end(); + } + }); +}; +NodejsStreamInputAdapter.prototype.pause = function () { + if(!GenericWorker.prototype.pause.call(this)) { + return false; + } + this._stream.pause(); + return true; +}; +NodejsStreamInputAdapter.prototype.resume = function () { + if(!GenericWorker.prototype.resume.call(this)) { + return false; + } + + if(this._upstreamEnded) { + this.end(); + } else { + this._stream.resume(); + } + + return true; +}; + +module.exports = NodejsStreamInputAdapter; + +},{"../stream/GenericWorker":28,"../utils":32}],13:[function(require,module,exports){ +'use strict'; + +var Readable = require('readable-stream').Readable; + +var utils = require('../utils'); +utils.inherits(NodejsStreamOutputAdapter, Readable); + +/** +* A nodejs stream using a worker as source. +* @see the SourceWrapper in http://nodejs.org/api/stream.html +* @constructor +* @param {StreamHelper} helper the helper wrapping the worker +* @param {Object} options the nodejs stream options +* @param {Function} updateCb the update callback. +*/ +function NodejsStreamOutputAdapter(helper, options, updateCb) { + Readable.call(this, options); + this._helper = helper; + + var self = this; + helper.on("data", function (data, meta) { + if (!self.push(data)) { + self._helper.pause(); + } + if(updateCb) { + updateCb(meta); + } + }) + .on("error", function(e) { + self.emit('error', e); + }) + .on("end", function () { + self.push(null); + }); +} + + +NodejsStreamOutputAdapter.prototype._read = function() { + this._helper.resume(); +}; + +module.exports = NodejsStreamOutputAdapter; + +},{"../utils":32,"readable-stream":16}],14:[function(require,module,exports){ +'use strict'; + +module.exports = { + /** + * True if this is running in Nodejs, will be undefined in a browser. + * In a browser, browserify won't include this file and the whole module + * will be resolved an empty object. + */ + isNode : typeof Buffer !== "undefined", + /** + * Create a new nodejs Buffer from an existing content. + * @param {Object} data the data to pass to the constructor. + * @param {String} encoding the encoding to use. + * @return {Buffer} a new Buffer. + */ + newBufferFrom: function(data, encoding) { + // XXX We can't use `Buffer.from` which comes from `Uint8Array.from` + // in nodejs v4 (< v.4.5). It's not the expected implementation (and + // has a different signature). + // see https://github.com/nodejs/node/issues/8053 + // A condition on nodejs' version won't solve the issue as we don't + // control the Buffer polyfills that may or may not be used. + return new Buffer(data, encoding); + }, + /** + * Create a new nodejs Buffer with the specified size. + * @param {Integer} size the size of the buffer. + * @return {Buffer} a new Buffer. + */ + allocBuffer: function (size) { + if (Buffer.alloc) { + return Buffer.alloc(size); + } else { + return new Buffer(size); + } + }, + /** + * Find out if an object is a Buffer. + * @param {Object} b the object to test. + * @return {Boolean} true if the object is a Buffer, false otherwise. + */ + isBuffer : function(b){ + return Buffer.isBuffer(b); + }, + + isStream : function (obj) { + return obj && + typeof obj.on === "function" && + typeof obj.pause === "function" && + typeof obj.resume === "function"; + } +}; + +},{}],15:[function(require,module,exports){ +'use strict'; +var utf8 = require('./utf8'); +var utils = require('./utils'); +var GenericWorker = require('./stream/GenericWorker'); +var StreamHelper = require('./stream/StreamHelper'); +var defaults = require('./defaults'); +var CompressedObject = require('./compressedObject'); +var ZipObject = require('./zipObject'); +var generate = require("./generate"); +var nodejsUtils = require("./nodejsUtils"); +var NodejsStreamInputAdapter = require("./nodejs/NodejsStreamInputAdapter"); + + +/** + * Add a file in the current folder. + * @private + * @param {string} name the name of the file + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data of the file + * @param {Object} originalOptions the options of the file + * @return {Object} the new file. + */ +var fileAdd = function(name, data, originalOptions) { + // be sure sub folders exist + var dataType = utils.getTypeOf(data), + parent; + + + /* + * Correct options. + */ + + var o = utils.extend(originalOptions || {}, defaults); + o.date = o.date || new Date(); + if (o.compression !== null) { + o.compression = o.compression.toUpperCase(); + } + + if (typeof o.unixPermissions === "string") { + o.unixPermissions = parseInt(o.unixPermissions, 8); + } + + // UNX_IFDIR 0040000 see zipinfo.c + if (o.unixPermissions && (o.unixPermissions & 0x4000)) { + o.dir = true; + } + // Bit 4 Directory + if (o.dosPermissions && (o.dosPermissions & 0x0010)) { + o.dir = true; + } + + if (o.dir) { + name = forceTrailingSlash(name); + } + if (o.createFolders && (parent = parentFolder(name))) { + folderAdd.call(this, parent, true); + } + + var isUnicodeString = dataType === "string" && o.binary === false && o.base64 === false; + if (!originalOptions || typeof originalOptions.binary === "undefined") { + o.binary = !isUnicodeString; + } + + + var isCompressedEmpty = (data instanceof CompressedObject) && data.uncompressedSize === 0; + + if (isCompressedEmpty || o.dir || !data || data.length === 0) { + o.base64 = false; + o.binary = true; + data = ""; + o.compression = "STORE"; + dataType = "string"; + } + + /* + * Convert content to fit. + */ + + var zipObjectContent = null; + if (data instanceof CompressedObject || data instanceof GenericWorker) { + zipObjectContent = data; + } else if (nodejsUtils.isNode && nodejsUtils.isStream(data)) { + zipObjectContent = new NodejsStreamInputAdapter(name, data); + } else { + zipObjectContent = utils.prepareContent(name, data, o.binary, o.optimizedBinaryString, o.base64); + } + + var object = new ZipObject(name, zipObjectContent, o); + this.files[name] = object; + /* + TODO: we can't throw an exception because we have async promises + (we can have a promise of a Date() for example) but returning a + promise is useless because file(name, data) returns the JSZip + object for chaining. Should we break that to allow the user + to catch the error ? + + return external.Promise.resolve(zipObjectContent) + .then(function () { + return object; + }); + */ +}; + +/** + * Find the parent folder of the path. + * @private + * @param {string} path the path to use + * @return {string} the parent folder, or "" + */ +var parentFolder = function (path) { + if (path.slice(-1) === '/') { + path = path.substring(0, path.length - 1); + } + var lastSlash = path.lastIndexOf('/'); + return (lastSlash > 0) ? path.substring(0, lastSlash) : ""; +}; + +/** + * Returns the path with a slash at the end. + * @private + * @param {String} path the path to check. + * @return {String} the path with a trailing slash. + */ +var forceTrailingSlash = function(path) { + // Check the name ends with a / + if (path.slice(-1) !== "/") { + path += "/"; // IE doesn't like substr(-1) + } + return path; +}; + +/** + * Add a (sub) folder in the current folder. + * @private + * @param {string} name the folder's name + * @param {boolean=} [createFolders] If true, automatically create sub + * folders. Defaults to false. + * @return {Object} the new folder. + */ +var folderAdd = function(name, createFolders) { + createFolders = (typeof createFolders !== 'undefined') ? createFolders : defaults.createFolders; + + name = forceTrailingSlash(name); + + // Does this folder already exist? + if (!this.files[name]) { + fileAdd.call(this, name, null, { + dir: true, + createFolders: createFolders + }); + } + return this.files[name]; +}; + +/** +* Cross-window, cross-Node-context regular expression detection +* @param {Object} object Anything +* @return {Boolean} true if the object is a regular expression, +* false otherwise +*/ +function isRegExp(object) { + return Object.prototype.toString.call(object) === "[object RegExp]"; +} + +// return the actual prototype of JSZip +var out = { + /** + * @see loadAsync + */ + load: function() { + throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide."); + }, + + + /** + * Call a callback function for each entry at this folder level. + * @param {Function} cb the callback function: + * function (relativePath, file) {...} + * It takes 2 arguments : the relative path and the file. + */ + forEach: function(cb) { + var filename, relativePath, file; + for (filename in this.files) { + if (!this.files.hasOwnProperty(filename)) { + continue; + } + file = this.files[filename]; + relativePath = filename.slice(this.root.length, filename.length); + if (relativePath && filename.slice(0, this.root.length) === this.root) { // the file is in the current root + cb(relativePath, file); // TODO reverse the parameters ? need to be clean AND consistent with the filter search fn... + } + } + }, + + /** + * Filter nested files/folders with the specified function. + * @param {Function} search the predicate to use : + * function (relativePath, file) {...} + * It takes 2 arguments : the relative path and the file. + * @return {Array} An array of matching elements. + */ + filter: function(search) { + var result = []; + this.forEach(function (relativePath, entry) { + if (search(relativePath, entry)) { // the file matches the function + result.push(entry); + } + + }); + return result; + }, + + /** + * Add a file to the zip file, or search a file. + * @param {string|RegExp} name The name of the file to add (if data is defined), + * the name of the file to find (if no data) or a regex to match files. + * @param {String|ArrayBuffer|Uint8Array|Buffer} data The file data, either raw or base64 encoded + * @param {Object} o File options + * @return {JSZip|Object|Array} this JSZip object (when adding a file), + * a file (when searching by string) or an array of files (when searching by regex). + */ + file: function(name, data, o) { + if (arguments.length === 1) { + if (isRegExp(name)) { + var regexp = name; + return this.filter(function(relativePath, file) { + return !file.dir && regexp.test(relativePath); + }); + } + else { // text + var obj = this.files[this.root + name]; + if (obj && !obj.dir) { + return obj; + } else { + return null; + } + } + } + else { // more than one argument : we have data ! + name = this.root + name; + fileAdd.call(this, name, data, o); + } + return this; + }, + + /** + * Add a directory to the zip file, or search. + * @param {String|RegExp} arg The name of the directory to add, or a regex to search folders. + * @return {JSZip} an object with the new directory as the root, or an array containing matching folders. + */ + folder: function(arg) { + if (!arg) { + return this; + } + + if (isRegExp(arg)) { + return this.filter(function(relativePath, file) { + return file.dir && arg.test(relativePath); + }); + } + + // else, name is a new folder + var name = this.root + arg; + var newFolder = folderAdd.call(this, name); + + // Allow chaining by returning a new object with this folder as the root + var ret = this.clone(); + ret.root = newFolder.name; + return ret; + }, + + /** + * Delete a file, or a directory and all sub-files, from the zip + * @param {string} name the name of the file to delete + * @return {JSZip} this JSZip object + */ + remove: function(name) { + name = this.root + name; + var file = this.files[name]; + if (!file) { + // Look for any folders + if (name.slice(-1) !== "/") { + name += "/"; + } + file = this.files[name]; + } + + if (file && !file.dir) { + // file + delete this.files[name]; + } else { + // maybe a folder, delete recursively + var kids = this.filter(function(relativePath, file) { + return file.name.slice(0, name.length) === name; + }); + for (var i = 0; i < kids.length; i++) { + delete this.files[kids[i].name]; + } + } + + return this; + }, + + /** + * Generate the complete zip file + * @param {Object} options the options to generate the zip file : + * - compression, "STORE" by default. + * - type, "base64" by default. Values are : string, base64, uint8array, arraybuffer, blob. + * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the zip file + */ + generate: function(options) { + throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide."); + }, + + /** + * Generate the complete zip file as an internal stream. + * @param {Object} options the options to generate the zip file : + * - compression, "STORE" by default. + * - type, "base64" by default. Values are : string, base64, uint8array, arraybuffer, blob. + * @return {StreamHelper} the streamed zip file. + */ + generateInternalStream: function(options) { + var worker, opts = {}; + try { + opts = utils.extend(options || {}, { + streamFiles: false, + compression: "STORE", + compressionOptions : null, + type: "", + platform: "DOS", + comment: null, + mimeType: 'application/zip', + encodeFileName: utf8.utf8encode + }); + + opts.type = opts.type.toLowerCase(); + opts.compression = opts.compression.toUpperCase(); + + // "binarystring" is prefered but the internals use "string". + if(opts.type === "binarystring") { + opts.type = "string"; + } + + if (!opts.type) { + throw new Error("No output type specified."); + } + + utils.checkSupport(opts.type); + + // accept nodejs `process.platform` + if( + opts.platform === 'darwin' || + opts.platform === 'freebsd' || + opts.platform === 'linux' || + opts.platform === 'sunos' + ) { + opts.platform = "UNIX"; + } + if (opts.platform === 'win32') { + opts.platform = "DOS"; + } + + var comment = opts.comment || this.comment || ""; + worker = generate.generateWorker(this, opts, comment); + } catch (e) { + worker = new GenericWorker("error"); + worker.error(e); + } + return new StreamHelper(worker, opts.type || "string", opts.mimeType); + }, + /** + * Generate the complete zip file asynchronously. + * @see generateInternalStream + */ + generateAsync: function(options, onUpdate) { + return this.generateInternalStream(options).accumulate(onUpdate); + }, + /** + * Generate the complete zip file asynchronously. + * @see generateInternalStream + */ + generateNodeStream: function(options, onUpdate) { + options = options || {}; + if (!options.type) { + options.type = "nodebuffer"; + } + return this.generateInternalStream(options).toNodejsStream(onUpdate); + } +}; +module.exports = out; + +},{"./compressedObject":2,"./defaults":5,"./generate":9,"./nodejs/NodejsStreamInputAdapter":12,"./nodejsUtils":14,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31,"./utils":32,"./zipObject":35}],16:[function(require,module,exports){ +/* + * This file is used by module bundlers (browserify/webpack/etc) when + * including a stream implementation. We use "readable-stream" to get a + * consistent behavior between nodejs versions but bundlers often have a shim + * for "stream". Using this shim greatly improve the compatibility and greatly + * reduce the final size of the bundle (only one stream implementation, not + * two). + */ +module.exports = require("stream"); + +},{"stream":undefined}],17:[function(require,module,exports){ +'use strict'; +var DataReader = require('./DataReader'); +var utils = require('../utils'); + +function ArrayReader(data) { + DataReader.call(this, data); + for(var i = 0; i < this.data.length; i++) { + data[i] = data[i] & 0xFF; + } +} +utils.inherits(ArrayReader, DataReader); +/** + * @see DataReader.byteAt + */ +ArrayReader.prototype.byteAt = function(i) { + return this.data[this.zero + i]; +}; +/** + * @see DataReader.lastIndexOfSignature + */ +ArrayReader.prototype.lastIndexOfSignature = function(sig) { + var sig0 = sig.charCodeAt(0), + sig1 = sig.charCodeAt(1), + sig2 = sig.charCodeAt(2), + sig3 = sig.charCodeAt(3); + for (var i = this.length - 4; i >= 0; --i) { + if (this.data[i] === sig0 && this.data[i + 1] === sig1 && this.data[i + 2] === sig2 && this.data[i + 3] === sig3) { + return i - this.zero; + } + } + + return -1; +}; +/** + * @see DataReader.readAndCheckSignature + */ +ArrayReader.prototype.readAndCheckSignature = function (sig) { + var sig0 = sig.charCodeAt(0), + sig1 = sig.charCodeAt(1), + sig2 = sig.charCodeAt(2), + sig3 = sig.charCodeAt(3), + data = this.readData(4); + return sig0 === data[0] && sig1 === data[1] && sig2 === data[2] && sig3 === data[3]; +}; +/** + * @see DataReader.readData + */ +ArrayReader.prototype.readData = function(size) { + this.checkOffset(size); + if(size === 0) { + return []; + } + var result = this.data.slice(this.zero + this.index, this.zero + this.index + size); + this.index += size; + return result; +}; +module.exports = ArrayReader; + +},{"../utils":32,"./DataReader":18}],18:[function(require,module,exports){ +'use strict'; +var utils = require('../utils'); + +function DataReader(data) { + this.data = data; // type : see implementation + this.length = data.length; + this.index = 0; + this.zero = 0; +} +DataReader.prototype = { + /** + * Check that the offset will not go too far. + * @param {string} offset the additional offset to check. + * @throws {Error} an Error if the offset is out of bounds. + */ + checkOffset: function(offset) { + this.checkIndex(this.index + offset); + }, + /** + * Check that the specified index will not be too far. + * @param {string} newIndex the index to check. + * @throws {Error} an Error if the index is out of bounds. + */ + checkIndex: function(newIndex) { + if (this.length < this.zero + newIndex || newIndex < 0) { + throw new Error("End of data reached (data length = " + this.length + ", asked index = " + (newIndex) + "). Corrupted zip ?"); + } + }, + /** + * Change the index. + * @param {number} newIndex The new index. + * @throws {Error} if the new index is out of the data. + */ + setIndex: function(newIndex) { + this.checkIndex(newIndex); + this.index = newIndex; + }, + /** + * Skip the next n bytes. + * @param {number} n the number of bytes to skip. + * @throws {Error} if the new index is out of the data. + */ + skip: function(n) { + this.setIndex(this.index + n); + }, + /** + * Get the byte at the specified index. + * @param {number} i the index to use. + * @return {number} a byte. + */ + byteAt: function(i) { + // see implementations + }, + /** + * Get the next number with a given byte size. + * @param {number} size the number of bytes to read. + * @return {number} the corresponding number. + */ + readInt: function(size) { + var result = 0, + i; + this.checkOffset(size); + for (i = this.index + size - 1; i >= this.index; i--) { + result = (result << 8) + this.byteAt(i); + } + this.index += size; + return result; + }, + /** + * Get the next string with a given byte size. + * @param {number} size the number of bytes to read. + * @return {string} the corresponding string. + */ + readString: function(size) { + return utils.transformTo("string", this.readData(size)); + }, + /** + * Get raw data without conversion, bytes. + * @param {number} size the number of bytes to read. + * @return {Object} the raw data, implementation specific. + */ + readData: function(size) { + // see implementations + }, + /** + * Find the last occurence of a zip signature (4 bytes). + * @param {string} sig the signature to find. + * @return {number} the index of the last occurence, -1 if not found. + */ + lastIndexOfSignature: function(sig) { + // see implementations + }, + /** + * Read the signature (4 bytes) at the current position and compare it with sig. + * @param {string} sig the expected signature + * @return {boolean} true if the signature matches, false otherwise. + */ + readAndCheckSignature: function(sig) { + // see implementations + }, + /** + * Get the next date. + * @return {Date} the date. + */ + readDate: function() { + var dostime = this.readInt(4); + return new Date(Date.UTC( + ((dostime >> 25) & 0x7f) + 1980, // year + ((dostime >> 21) & 0x0f) - 1, // month + (dostime >> 16) & 0x1f, // day + (dostime >> 11) & 0x1f, // hour + (dostime >> 5) & 0x3f, // minute + (dostime & 0x1f) << 1)); // second + } +}; +module.exports = DataReader; + +},{"../utils":32}],19:[function(require,module,exports){ +'use strict'; +var Uint8ArrayReader = require('./Uint8ArrayReader'); +var utils = require('../utils'); + +function NodeBufferReader(data) { + Uint8ArrayReader.call(this, data); +} +utils.inherits(NodeBufferReader, Uint8ArrayReader); + +/** + * @see DataReader.readData + */ +NodeBufferReader.prototype.readData = function(size) { + this.checkOffset(size); + var result = this.data.slice(this.zero + this.index, this.zero + this.index + size); + this.index += size; + return result; +}; +module.exports = NodeBufferReader; + +},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(require,module,exports){ +'use strict'; +var DataReader = require('./DataReader'); +var utils = require('../utils'); + +function StringReader(data) { + DataReader.call(this, data); +} +utils.inherits(StringReader, DataReader); +/** + * @see DataReader.byteAt + */ +StringReader.prototype.byteAt = function(i) { + return this.data.charCodeAt(this.zero + i); +}; +/** + * @see DataReader.lastIndexOfSignature + */ +StringReader.prototype.lastIndexOfSignature = function(sig) { + return this.data.lastIndexOf(sig) - this.zero; +}; +/** + * @see DataReader.readAndCheckSignature + */ +StringReader.prototype.readAndCheckSignature = function (sig) { + var data = this.readData(4); + return sig === data; +}; +/** + * @see DataReader.readData + */ +StringReader.prototype.readData = function(size) { + this.checkOffset(size); + // this will work because the constructor applied the "& 0xff" mask. + var result = this.data.slice(this.zero + this.index, this.zero + this.index + size); + this.index += size; + return result; +}; +module.exports = StringReader; + +},{"../utils":32,"./DataReader":18}],21:[function(require,module,exports){ +'use strict'; +var ArrayReader = require('./ArrayReader'); +var utils = require('../utils'); + +function Uint8ArrayReader(data) { + ArrayReader.call(this, data); +} +utils.inherits(Uint8ArrayReader, ArrayReader); +/** + * @see DataReader.readData + */ +Uint8ArrayReader.prototype.readData = function(size) { + this.checkOffset(size); + if(size === 0) { + // in IE10, when using subarray(idx, idx), we get the array [0x00] instead of []. + return new Uint8Array(0); + } + var result = this.data.subarray(this.zero + this.index, this.zero + this.index + size); + this.index += size; + return result; +}; +module.exports = Uint8ArrayReader; + +},{"../utils":32,"./ArrayReader":17}],22:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var support = require('../support'); +var ArrayReader = require('./ArrayReader'); +var StringReader = require('./StringReader'); +var NodeBufferReader = require('./NodeBufferReader'); +var Uint8ArrayReader = require('./Uint8ArrayReader'); + +/** + * Create a reader adapted to the data. + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data to read. + * @return {DataReader} the data reader. + */ +module.exports = function (data) { + var type = utils.getTypeOf(data); + utils.checkSupport(type); + if (type === "string" && !support.uint8array) { + return new StringReader(data); + } + if (type === "nodebuffer") { + return new NodeBufferReader(data); + } + if (support.uint8array) { + return new Uint8ArrayReader(utils.transformTo("uint8array", data)); + } + return new ArrayReader(utils.transformTo("array", data)); +}; + +},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(require,module,exports){ +'use strict'; +exports.LOCAL_FILE_HEADER = "PK\x03\x04"; +exports.CENTRAL_FILE_HEADER = "PK\x01\x02"; +exports.CENTRAL_DIRECTORY_END = "PK\x05\x06"; +exports.ZIP64_CENTRAL_DIRECTORY_LOCATOR = "PK\x06\x07"; +exports.ZIP64_CENTRAL_DIRECTORY_END = "PK\x06\x06"; +exports.DATA_DESCRIPTOR = "PK\x07\x08"; + +},{}],24:[function(require,module,exports){ +'use strict'; + +var GenericWorker = require('./GenericWorker'); +var utils = require('../utils'); + +/** + * A worker which convert chunks to a specified type. + * @constructor + * @param {String} destType the destination type. + */ +function ConvertWorker(destType) { + GenericWorker.call(this, "ConvertWorker to " + destType); + this.destType = destType; +} +utils.inherits(ConvertWorker, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +ConvertWorker.prototype.processChunk = function (chunk) { + this.push({ + data : utils.transformTo(this.destType, chunk.data), + meta : chunk.meta + }); +}; +module.exports = ConvertWorker; + +},{"../utils":32,"./GenericWorker":28}],25:[function(require,module,exports){ +'use strict'; + +var GenericWorker = require('./GenericWorker'); +var crc32 = require('../crc32'); +var utils = require('../utils'); + +/** + * A worker which calculate the crc32 of the data flowing through. + * @constructor + */ +function Crc32Probe() { + GenericWorker.call(this, "Crc32Probe"); + this.withStreamInfo("crc32", 0); +} +utils.inherits(Crc32Probe, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +Crc32Probe.prototype.processChunk = function (chunk) { + this.streamInfo.crc32 = crc32(chunk.data, this.streamInfo.crc32 || 0); + this.push(chunk); +}; +module.exports = Crc32Probe; + +},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var GenericWorker = require('./GenericWorker'); + +/** + * A worker which calculate the total length of the data flowing through. + * @constructor + * @param {String} propName the name used to expose the length + */ +function DataLengthProbe(propName) { + GenericWorker.call(this, "DataLengthProbe for " + propName); + this.propName = propName; + this.withStreamInfo(propName, 0); +} +utils.inherits(DataLengthProbe, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +DataLengthProbe.prototype.processChunk = function (chunk) { + if(chunk) { + var length = this.streamInfo[this.propName] || 0; + this.streamInfo[this.propName] = length + chunk.data.length; + } + GenericWorker.prototype.processChunk.call(this, chunk); +}; +module.exports = DataLengthProbe; + + +},{"../utils":32,"./GenericWorker":28}],27:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var GenericWorker = require('./GenericWorker'); + +// the size of the generated chunks +// TODO expose this as a public variable +var DEFAULT_BLOCK_SIZE = 16 * 1024; + +/** + * A worker that reads a content and emits chunks. + * @constructor + * @param {Promise} dataP the promise of the data to split + */ +function DataWorker(dataP) { + GenericWorker.call(this, "DataWorker"); + var self = this; + this.dataIsReady = false; + this.index = 0; + this.max = 0; + this.data = null; + this.type = ""; + + this._tickScheduled = false; + + dataP.then(function (data) { + self.dataIsReady = true; + self.data = data; + self.max = data && data.length || 0; + self.type = utils.getTypeOf(data); + if(!self.isPaused) { + self._tickAndRepeat(); + } + }, function (e) { + self.error(e); + }); +} + +utils.inherits(DataWorker, GenericWorker); + +/** + * @see GenericWorker.cleanUp + */ +DataWorker.prototype.cleanUp = function () { + GenericWorker.prototype.cleanUp.call(this); + this.data = null; +}; + +/** + * @see GenericWorker.resume + */ +DataWorker.prototype.resume = function () { + if(!GenericWorker.prototype.resume.call(this)) { + return false; + } + + if (!this._tickScheduled && this.dataIsReady) { + this._tickScheduled = true; + utils.delay(this._tickAndRepeat, [], this); + } + return true; +}; + +/** + * Trigger a tick a schedule an other call to this function. + */ +DataWorker.prototype._tickAndRepeat = function() { + this._tickScheduled = false; + if(this.isPaused || this.isFinished) { + return; + } + this._tick(); + if(!this.isFinished) { + utils.delay(this._tickAndRepeat, [], this); + this._tickScheduled = true; + } +}; + +/** + * Read and push a chunk. + */ +DataWorker.prototype._tick = function() { + + if(this.isPaused || this.isFinished) { + return false; + } + + var size = DEFAULT_BLOCK_SIZE; + var data = null, nextIndex = Math.min(this.max, this.index + size); + if (this.index >= this.max) { + // EOF + return this.end(); + } else { + switch(this.type) { + case "string": + data = this.data.substring(this.index, nextIndex); + break; + case "uint8array": + data = this.data.subarray(this.index, nextIndex); + break; + case "array": + case "nodebuffer": + data = this.data.slice(this.index, nextIndex); + break; + } + this.index = nextIndex; + return this.push({ + data : data, + meta : { + percent : this.max ? this.index / this.max * 100 : 0 + } + }); + } +}; + +module.exports = DataWorker; + +},{"../utils":32,"./GenericWorker":28}],28:[function(require,module,exports){ +'use strict'; + +/** + * A worker that does nothing but passing chunks to the next one. This is like + * a nodejs stream but with some differences. On the good side : + * - it works on IE 6-9 without any issue / polyfill + * - it weights less than the full dependencies bundled with browserify + * - it forwards errors (no need to declare an error handler EVERYWHERE) + * + * A chunk is an object with 2 attributes : `meta` and `data`. The former is an + * object containing anything (`percent` for example), see each worker for more + * details. The latter is the real data (String, Uint8Array, etc). + * + * @constructor + * @param {String} name the name of the stream (mainly used for debugging purposes) + */ +function GenericWorker(name) { + // the name of the worker + this.name = name || "default"; + // an object containing metadata about the workers chain + this.streamInfo = {}; + // an error which happened when the worker was paused + this.generatedError = null; + // an object containing metadata to be merged by this worker into the general metadata + this.extraStreamInfo = {}; + // true if the stream is paused (and should not do anything), false otherwise + this.isPaused = true; + // true if the stream is finished (and should not do anything), false otherwise + this.isFinished = false; + // true if the stream is locked to prevent further structure updates (pipe), false otherwise + this.isLocked = false; + // the event listeners + this._listeners = { + 'data':[], + 'end':[], + 'error':[] + }; + // the previous worker, if any + this.previous = null; +} + +GenericWorker.prototype = { + /** + * Push a chunk to the next workers. + * @param {Object} chunk the chunk to push + */ + push : function (chunk) { + this.emit("data", chunk); + }, + /** + * End the stream. + * @return {Boolean} true if this call ended the worker, false otherwise. + */ + end : function () { + if (this.isFinished) { + return false; + } + + this.flush(); + try { + this.emit("end"); + this.cleanUp(); + this.isFinished = true; + } catch (e) { + this.emit("error", e); + } + return true; + }, + /** + * End the stream with an error. + * @param {Error} e the error which caused the premature end. + * @return {Boolean} true if this call ended the worker with an error, false otherwise. + */ + error : function (e) { + if (this.isFinished) { + return false; + } + + if(this.isPaused) { + this.generatedError = e; + } else { + this.isFinished = true; + + this.emit("error", e); + + // in the workers chain exploded in the middle of the chain, + // the error event will go downward but we also need to notify + // workers upward that there has been an error. + if(this.previous) { + this.previous.error(e); + } + + this.cleanUp(); + } + return true; + }, + /** + * Add a callback on an event. + * @param {String} name the name of the event (data, end, error) + * @param {Function} listener the function to call when the event is triggered + * @return {GenericWorker} the current object for chainability + */ + on : function (name, listener) { + this._listeners[name].push(listener); + return this; + }, + /** + * Clean any references when a worker is ending. + */ + cleanUp : function () { + this.streamInfo = this.generatedError = this.extraStreamInfo = null; + this._listeners = []; + }, + /** + * Trigger an event. This will call registered callback with the provided arg. + * @param {String} name the name of the event (data, end, error) + * @param {Object} arg the argument to call the callback with. + */ + emit : function (name, arg) { + if (this._listeners[name]) { + for(var i = 0; i < this._listeners[name].length; i++) { + this._listeners[name][i].call(this, arg); + } + } + }, + /** + * Chain a worker with an other. + * @param {Worker} next the worker receiving events from the current one. + * @return {worker} the next worker for chainability + */ + pipe : function (next) { + return next.registerPrevious(this); + }, + /** + * Same as `pipe` in the other direction. + * Using an API with `pipe(next)` is very easy. + * Implementing the API with the point of view of the next one registering + * a source is easier, see the ZipFileWorker. + * @param {Worker} previous the previous worker, sending events to this one + * @return {Worker} the current worker for chainability + */ + registerPrevious : function (previous) { + if (this.isLocked) { + throw new Error("The stream '" + this + "' has already been used."); + } + + // sharing the streamInfo... + this.streamInfo = previous.streamInfo; + // ... and adding our own bits + this.mergeStreamInfo(); + this.previous = previous; + var self = this; + previous.on('data', function (chunk) { + self.processChunk(chunk); + }); + previous.on('end', function () { + self.end(); + }); + previous.on('error', function (e) { + self.error(e); + }); + return this; + }, + /** + * Pause the stream so it doesn't send events anymore. + * @return {Boolean} true if this call paused the worker, false otherwise. + */ + pause : function () { + if(this.isPaused || this.isFinished) { + return false; + } + this.isPaused = true; + + if(this.previous) { + this.previous.pause(); + } + return true; + }, + /** + * Resume a paused stream. + * @return {Boolean} true if this call resumed the worker, false otherwise. + */ + resume : function () { + if(!this.isPaused || this.isFinished) { + return false; + } + this.isPaused = false; + + // if true, the worker tried to resume but failed + var withError = false; + if(this.generatedError) { + this.error(this.generatedError); + withError = true; + } + if(this.previous) { + this.previous.resume(); + } + + return !withError; + }, + /** + * Flush any remaining bytes as the stream is ending. + */ + flush : function () {}, + /** + * Process a chunk. This is usually the method overridden. + * @param {Object} chunk the chunk to process. + */ + processChunk : function(chunk) { + this.push(chunk); + }, + /** + * Add a key/value to be added in the workers chain streamInfo once activated. + * @param {String} key the key to use + * @param {Object} value the associated value + * @return {Worker} the current worker for chainability + */ + withStreamInfo : function (key, value) { + this.extraStreamInfo[key] = value; + this.mergeStreamInfo(); + return this; + }, + /** + * Merge this worker's streamInfo into the chain's streamInfo. + */ + mergeStreamInfo : function () { + for(var key in this.extraStreamInfo) { + if (!this.extraStreamInfo.hasOwnProperty(key)) { + continue; + } + this.streamInfo[key] = this.extraStreamInfo[key]; + } + }, + + /** + * Lock the stream to prevent further updates on the workers chain. + * After calling this method, all calls to pipe will fail. + */ + lock: function () { + if (this.isLocked) { + throw new Error("The stream '" + this + "' has already been used."); + } + this.isLocked = true; + if (this.previous) { + this.previous.lock(); + } + }, + + /** + * + * Pretty print the workers chain. + */ + toString : function () { + var me = "Worker " + this.name; + if (this.previous) { + return this.previous + " -> " + me; + } else { + return me; + } + } +}; + +module.exports = GenericWorker; + +},{}],29:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var ConvertWorker = require('./ConvertWorker'); +var GenericWorker = require('./GenericWorker'); +var base64 = require('../base64'); +var support = require("../support"); +var external = require("../external"); + +var NodejsStreamOutputAdapter = null; +if (support.nodestream) { + try { + NodejsStreamOutputAdapter = require('../nodejs/NodejsStreamOutputAdapter'); + } catch(e) {} +} + +/** + * Apply the final transformation of the data. If the user wants a Blob for + * example, it's easier to work with an U8intArray and finally do the + * ArrayBuffer/Blob conversion. + * @param {String} type the name of the final type + * @param {String|Uint8Array|Buffer} content the content to transform + * @param {String} mimeType the mime type of the content, if applicable. + * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the content in the right format. + */ +function transformZipOutput(type, content, mimeType) { + switch(type) { + case "blob" : + return utils.newBlob(utils.transformTo("arraybuffer", content), mimeType); + case "base64" : + return base64.encode(content); + default : + return utils.transformTo(type, content); + } +} + +/** + * Concatenate an array of data of the given type. + * @param {String} type the type of the data in the given array. + * @param {Array} dataArray the array containing the data chunks to concatenate + * @return {String|Uint8Array|Buffer} the concatenated data + * @throws Error if the asked type is unsupported + */ +function concat (type, dataArray) { + var i, index = 0, res = null, totalLength = 0; + for(i = 0; i < dataArray.length; i++) { + totalLength += dataArray[i].length; + } + switch(type) { + case "string": + return dataArray.join(""); + case "array": + return Array.prototype.concat.apply([], dataArray); + case "uint8array": + res = new Uint8Array(totalLength); + for(i = 0; i < dataArray.length; i++) { + res.set(dataArray[i], index); + index += dataArray[i].length; + } + return res; + case "nodebuffer": + return Buffer.concat(dataArray); + default: + throw new Error("concat : unsupported type '" + type + "'"); + } +} + +/** + * Listen a StreamHelper, accumulate its content and concatenate it into a + * complete block. + * @param {StreamHelper} helper the helper to use. + * @param {Function} updateCallback a callback called on each update. Called + * with one arg : + * - the metadata linked to the update received. + * @return Promise the promise for the accumulation. + */ +function accumulate(helper, updateCallback) { + return new external.Promise(function (resolve, reject){ + var dataArray = []; + var chunkType = helper._internalType, + resultType = helper._outputType, + mimeType = helper._mimeType; + helper + .on('data', function (data, meta) { + dataArray.push(data); + if(updateCallback) { + updateCallback(meta); + } + }) + .on('error', function(err) { + dataArray = []; + reject(err); + }) + .on('end', function (){ + try { + var result = transformZipOutput(resultType, concat(chunkType, dataArray), mimeType); + resolve(result); + } catch (e) { + reject(e); + } + dataArray = []; + }) + .resume(); + }); +} + +/** + * An helper to easily use workers outside of JSZip. + * @constructor + * @param {Worker} worker the worker to wrap + * @param {String} outputType the type of data expected by the use + * @param {String} mimeType the mime type of the content, if applicable. + */ +function StreamHelper(worker, outputType, mimeType) { + var internalType = outputType; + switch(outputType) { + case "blob": + case "arraybuffer": + internalType = "uint8array"; + break; + case "base64": + internalType = "string"; + break; + } + + try { + // the type used internally + this._internalType = internalType; + // the type used to output results + this._outputType = outputType; + // the mime type + this._mimeType = mimeType; + utils.checkSupport(internalType); + this._worker = worker.pipe(new ConvertWorker(internalType)); + // the last workers can be rewired without issues but we need to + // prevent any updates on previous workers. + worker.lock(); + } catch(e) { + this._worker = new GenericWorker("error"); + this._worker.error(e); + } +} + +StreamHelper.prototype = { + /** + * Listen a StreamHelper, accumulate its content and concatenate it into a + * complete block. + * @param {Function} updateCb the update callback. + * @return Promise the promise for the accumulation. + */ + accumulate : function (updateCb) { + return accumulate(this, updateCb); + }, + /** + * Add a listener on an event triggered on a stream. + * @param {String} evt the name of the event + * @param {Function} fn the listener + * @return {StreamHelper} the current helper. + */ + on : function (evt, fn) { + var self = this; + + if(evt === "data") { + this._worker.on(evt, function (chunk) { + fn.call(self, chunk.data, chunk.meta); + }); + } else { + this._worker.on(evt, function () { + utils.delay(fn, arguments, self); + }); + } + return this; + }, + /** + * Resume the flow of chunks. + * @return {StreamHelper} the current helper. + */ + resume : function () { + utils.delay(this._worker.resume, [], this._worker); + return this; + }, + /** + * Pause the flow of chunks. + * @return {StreamHelper} the current helper. + */ + pause : function () { + this._worker.pause(); + return this; + }, + /** + * Return a nodejs stream for this helper. + * @param {Function} updateCb the update callback. + * @return {NodejsStreamOutputAdapter} the nodejs stream. + */ + toNodejsStream : function (updateCb) { + utils.checkSupport("nodestream"); + if (this._outputType !== "nodebuffer") { + // an object stream containing blob/arraybuffer/uint8array/string + // is strange and I don't know if it would be useful. + // I you find this comment and have a good usecase, please open a + // bug report ! + throw new Error(this._outputType + " is not supported by this method"); + } + + return new NodejsStreamOutputAdapter(this, { + objectMode : this._outputType !== "nodebuffer" + }, updateCb); + } +}; + + +module.exports = StreamHelper; + +},{"../base64":1,"../external":6,"../nodejs/NodejsStreamOutputAdapter":13,"../support":30,"../utils":32,"./ConvertWorker":24,"./GenericWorker":28}],30:[function(require,module,exports){ +'use strict'; + +exports.base64 = true; +exports.array = true; +exports.string = true; +exports.arraybuffer = typeof ArrayBuffer !== "undefined" && typeof Uint8Array !== "undefined"; +exports.nodebuffer = typeof Buffer !== "undefined"; +// contains true if JSZip can read/generate Uint8Array, false otherwise. +exports.uint8array = typeof Uint8Array !== "undefined"; + +if (typeof ArrayBuffer === "undefined") { + exports.blob = false; +} +else { + var buffer = new ArrayBuffer(0); + try { + exports.blob = new Blob([buffer], { + type: "application/zip" + }).size === 0; + } + catch (e) { + try { + var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder; + var builder = new Builder(); + builder.append(buffer); + exports.blob = builder.getBlob('application/zip').size === 0; + } + catch (e) { + exports.blob = false; + } + } +} + +try { + exports.nodestream = !!require('readable-stream').Readable; +} catch(e) { + exports.nodestream = false; +} + +},{"readable-stream":16}],31:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); +var support = require('./support'); +var nodejsUtils = require('./nodejsUtils'); +var GenericWorker = require('./stream/GenericWorker'); + +/** + * The following functions come from pako, from pako/lib/utils/strings + * released under the MIT license, see pako https://github.com/nodeca/pako/ + */ + +// Table with utf8 lengths (calculated by first byte of sequence) +// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS, +// because max possible codepoint is 0x10ffff +var _utf8len = new Array(256); +for (var i=0; i<256; i++) { + _utf8len[i] = (i >= 252 ? 6 : i >= 248 ? 5 : i >= 240 ? 4 : i >= 224 ? 3 : i >= 192 ? 2 : 1); +} +_utf8len[254]=_utf8len[254]=1; // Invalid sequence start + +// convert string to array (typed, when possible) +var string2buf = function (str) { + var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0; + + // count binary size + for (m_pos = 0; m_pos < str_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) { + c2 = str.charCodeAt(m_pos+1); + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); + m_pos++; + } + } + buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4; + } + + // allocate buffer + if (support.uint8array) { + buf = new Uint8Array(buf_len); + } else { + buf = new Array(buf_len); + } + + // convert + for (i=0, m_pos = 0; i < buf_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) { + c2 = str.charCodeAt(m_pos+1); + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); + m_pos++; + } + } + if (c < 0x80) { + /* one byte */ + buf[i++] = c; + } else if (c < 0x800) { + /* two bytes */ + buf[i++] = 0xC0 | (c >>> 6); + buf[i++] = 0x80 | (c & 0x3f); + } else if (c < 0x10000) { + /* three bytes */ + buf[i++] = 0xE0 | (c >>> 12); + buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | (c & 0x3f); + } else { + /* four bytes */ + buf[i++] = 0xf0 | (c >>> 18); + buf[i++] = 0x80 | (c >>> 12 & 0x3f); + buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | (c & 0x3f); + } + } + + return buf; +}; + +// Calculate max possible position in utf8 buffer, +// that will not break sequence. If that's not possible +// - (very small limits) return max size as is. +// +// buf[] - utf8 bytes array +// max - length limit (mandatory); +var utf8border = function(buf, max) { + var pos; + + max = max || buf.length; + if (max > buf.length) { max = buf.length; } + + // go back from last position, until start of sequence found + pos = max-1; + while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; } + + // Fuckup - very small and broken sequence, + // return max, because we should return something anyway. + if (pos < 0) { return max; } + + // If we came to start of buffer - that means vuffer is too small, + // return max too. + if (pos === 0) { return max; } + + return (pos + _utf8len[buf[pos]] > max) ? pos : max; +}; + +// convert array to string +var buf2string = function (buf) { + var str, i, out, c, c_len; + var len = buf.length; + + // Reserve max possible length (2 words per char) + // NB: by unknown reasons, Array is significantly faster for + // String.fromCharCode.apply than Uint16Array. + var utf16buf = new Array(len*2); + + for (out=0, i=0; i 4) { utf16buf[out++] = 0xfffd; i += c_len-1; continue; } + + // apply mask on first byte + c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07; + // join the rest + while (c_len > 1 && i < len) { + c = (c << 6) | (buf[i++] & 0x3f); + c_len--; + } + + // terminated by end of string? + if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; } + + if (c < 0x10000) { + utf16buf[out++] = c; + } else { + c -= 0x10000; + utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff); + utf16buf[out++] = 0xdc00 | (c & 0x3ff); + } + } + + // shrinkBuf(utf16buf, out) + if (utf16buf.length !== out) { + if(utf16buf.subarray) { + utf16buf = utf16buf.subarray(0, out); + } else { + utf16buf.length = out; + } + } + + // return String.fromCharCode.apply(null, utf16buf); + return utils.applyFromCharCode(utf16buf); +}; + + +// That's all for the pako functions. + + +/** + * Transform a javascript string into an array (typed if possible) of bytes, + * UTF-8 encoded. + * @param {String} str the string to encode + * @return {Array|Uint8Array|Buffer} the UTF-8 encoded string. + */ +exports.utf8encode = function utf8encode(str) { + if (support.nodebuffer) { + return nodejsUtils.newBufferFrom(str, "utf-8"); + } + + return string2buf(str); +}; + + +/** + * Transform a bytes array (or a representation) representing an UTF-8 encoded + * string into a javascript string. + * @param {Array|Uint8Array|Buffer} buf the data de decode + * @return {String} the decoded string. + */ +exports.utf8decode = function utf8decode(buf) { + if (support.nodebuffer) { + return utils.transformTo("nodebuffer", buf).toString("utf-8"); + } + + buf = utils.transformTo(support.uint8array ? "uint8array" : "array", buf); + + return buf2string(buf); +}; + +/** + * A worker to decode utf8 encoded binary chunks into string chunks. + * @constructor + */ +function Utf8DecodeWorker() { + GenericWorker.call(this, "utf-8 decode"); + // the last bytes if a chunk didn't end with a complete codepoint. + this.leftOver = null; +} +utils.inherits(Utf8DecodeWorker, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +Utf8DecodeWorker.prototype.processChunk = function (chunk) { + + var data = utils.transformTo(support.uint8array ? "uint8array" : "array", chunk.data); + + // 1st step, re-use what's left of the previous chunk + if (this.leftOver && this.leftOver.length) { + if(support.uint8array) { + var previousData = data; + data = new Uint8Array(previousData.length + this.leftOver.length); + data.set(this.leftOver, 0); + data.set(previousData, this.leftOver.length); + } else { + data = this.leftOver.concat(data); + } + this.leftOver = null; + } + + var nextBoundary = utf8border(data); + var usableData = data; + if (nextBoundary !== data.length) { + if (support.uint8array) { + usableData = data.subarray(0, nextBoundary); + this.leftOver = data.subarray(nextBoundary, data.length); + } else { + usableData = data.slice(0, nextBoundary); + this.leftOver = data.slice(nextBoundary, data.length); + } + } + + this.push({ + data : exports.utf8decode(usableData), + meta : chunk.meta + }); +}; + +/** + * @see GenericWorker.flush + */ +Utf8DecodeWorker.prototype.flush = function () { + if(this.leftOver && this.leftOver.length) { + this.push({ + data : exports.utf8decode(this.leftOver), + meta : {} + }); + this.leftOver = null; + } +}; +exports.Utf8DecodeWorker = Utf8DecodeWorker; + +/** + * A worker to endcode string chunks into utf8 encoded binary chunks. + * @constructor + */ +function Utf8EncodeWorker() { + GenericWorker.call(this, "utf-8 encode"); +} +utils.inherits(Utf8EncodeWorker, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +Utf8EncodeWorker.prototype.processChunk = function (chunk) { + this.push({ + data : exports.utf8encode(chunk.data), + meta : chunk.meta + }); +}; +exports.Utf8EncodeWorker = Utf8EncodeWorker; + +},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(require,module,exports){ +'use strict'; + +var support = require('./support'); +var base64 = require('./base64'); +var nodejsUtils = require('./nodejsUtils'); +var setImmediate = require('core-js/library/fn/set-immediate'); +var external = require("./external"); + + +/** + * Convert a string that pass as a "binary string": it should represent a byte + * array but may have > 255 char codes. Be sure to take only the first byte + * and returns the byte array. + * @param {String} str the string to transform. + * @return {Array|Uint8Array} the string in a binary format. + */ +function string2binary(str) { + var result = null; + if (support.uint8array) { + result = new Uint8Array(str.length); + } else { + result = new Array(str.length); + } + return stringToArrayLike(str, result); +} + +/** + * Create a new blob with the given content and the given type. + * @param {String|ArrayBuffer} part the content to put in the blob. DO NOT use + * an Uint8Array because the stock browser of android 4 won't accept it (it + * will be silently converted to a string, "[object Uint8Array]"). + * + * Use only ONE part to build the blob to avoid a memory leak in IE11 / Edge: + * when a large amount of Array is used to create the Blob, the amount of + * memory consumed is nearly 100 times the original data amount. + * + * @param {String} type the mime type of the blob. + * @return {Blob} the created blob. + */ +exports.newBlob = function(part, type) { + exports.checkSupport("blob"); + + try { + // Blob constructor + return new Blob([part], { + type: type + }); + } + catch (e) { + + try { + // deprecated, browser only, old way + var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder; + var builder = new Builder(); + builder.append(part); + return builder.getBlob(type); + } + catch (e) { + + // well, fuck ?! + throw new Error("Bug : can't construct the Blob."); + } + } + + +}; +/** + * The identity function. + * @param {Object} input the input. + * @return {Object} the same input. + */ +function identity(input) { + return input; +} + +/** + * Fill in an array with a string. + * @param {String} str the string to use. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to fill in (will be mutated). + * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated array. + */ +function stringToArrayLike(str, array) { + for (var i = 0; i < str.length; ++i) { + array[i] = str.charCodeAt(i) & 0xFF; + } + return array; +} + +/** + * An helper for the function arrayLikeToString. + * This contains static informations and functions that + * can be optimized by the browser JIT compiler. + */ +var arrayToStringHelper = { + /** + * Transform an array of int into a string, chunk by chunk. + * See the performances notes on arrayLikeToString. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform. + * @param {String} type the type of the array. + * @param {Integer} chunk the chunk size. + * @return {String} the resulting string. + * @throws Error if the chunk is too big for the stack. + */ + stringifyByChunk: function(array, type, chunk) { + var result = [], k = 0, len = array.length; + // shortcut + if (len <= chunk) { + return String.fromCharCode.apply(null, array); + } + while (k < len) { + if (type === "array" || type === "nodebuffer") { + result.push(String.fromCharCode.apply(null, array.slice(k, Math.min(k + chunk, len)))); + } + else { + result.push(String.fromCharCode.apply(null, array.subarray(k, Math.min(k + chunk, len)))); + } + k += chunk; + } + return result.join(""); + }, + /** + * Call String.fromCharCode on every item in the array. + * This is the naive implementation, which generate A LOT of intermediate string. + * This should be used when everything else fail. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform. + * @return {String} the result. + */ + stringifyByChar: function(array){ + var resultStr = ""; + for(var i = 0; i < array.length; i++) { + resultStr += String.fromCharCode(array[i]); + } + return resultStr; + }, + applyCanBeUsed : { + /** + * true if the browser accepts to use String.fromCharCode on Uint8Array + */ + uint8array : (function () { + try { + return support.uint8array && String.fromCharCode.apply(null, new Uint8Array(1)).length === 1; + } catch (e) { + return false; + } + })(), + /** + * true if the browser accepts to use String.fromCharCode on nodejs Buffer. + */ + nodebuffer : (function () { + try { + return support.nodebuffer && String.fromCharCode.apply(null, nodejsUtils.allocBuffer(1)).length === 1; + } catch (e) { + return false; + } + })() + } +}; + +/** + * Transform an array-like object to a string. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform. + * @return {String} the result. + */ +function arrayLikeToString(array) { + // Performances notes : + // -------------------- + // String.fromCharCode.apply(null, array) is the fastest, see + // see http://jsperf.com/converting-a-uint8array-to-a-string/2 + // but the stack is limited (and we can get huge arrays !). + // + // result += String.fromCharCode(array[i]); generate too many strings ! + // + // This code is inspired by http://jsperf.com/arraybuffer-to-string-apply-performance/2 + // TODO : we now have workers that split the work. Do we still need that ? + var chunk = 65536, + type = exports.getTypeOf(array), + canUseApply = true; + if (type === "uint8array") { + canUseApply = arrayToStringHelper.applyCanBeUsed.uint8array; + } else if (type === "nodebuffer") { + canUseApply = arrayToStringHelper.applyCanBeUsed.nodebuffer; + } + + if (canUseApply) { + while (chunk > 1) { + try { + return arrayToStringHelper.stringifyByChunk(array, type, chunk); + } catch (e) { + chunk = Math.floor(chunk / 2); + } + } + } + + // no apply or chunk error : slow and painful algorithm + // default browser on android 4.* + return arrayToStringHelper.stringifyByChar(array); +} + +exports.applyFromCharCode = arrayLikeToString; + + +/** + * Copy the data from an array-like to an other array-like. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayFrom the origin array. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayTo the destination array which will be mutated. + * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated destination array. + */ +function arrayLikeToArrayLike(arrayFrom, arrayTo) { + for (var i = 0; i < arrayFrom.length; i++) { + arrayTo[i] = arrayFrom[i]; + } + return arrayTo; +} + +// a matrix containing functions to transform everything into everything. +var transform = {}; + +// string to ? +transform["string"] = { + "string": identity, + "array": function(input) { + return stringToArrayLike(input, new Array(input.length)); + }, + "arraybuffer": function(input) { + return transform["string"]["uint8array"](input).buffer; + }, + "uint8array": function(input) { + return stringToArrayLike(input, new Uint8Array(input.length)); + }, + "nodebuffer": function(input) { + return stringToArrayLike(input, nodejsUtils.allocBuffer(input.length)); + } +}; + +// array to ? +transform["array"] = { + "string": arrayLikeToString, + "array": identity, + "arraybuffer": function(input) { + return (new Uint8Array(input)).buffer; + }, + "uint8array": function(input) { + return new Uint8Array(input); + }, + "nodebuffer": function(input) { + return nodejsUtils.newBufferFrom(input); + } +}; + +// arraybuffer to ? +transform["arraybuffer"] = { + "string": function(input) { + return arrayLikeToString(new Uint8Array(input)); + }, + "array": function(input) { + return arrayLikeToArrayLike(new Uint8Array(input), new Array(input.byteLength)); + }, + "arraybuffer": identity, + "uint8array": function(input) { + return new Uint8Array(input); + }, + "nodebuffer": function(input) { + return nodejsUtils.newBufferFrom(new Uint8Array(input)); + } +}; + +// uint8array to ? +transform["uint8array"] = { + "string": arrayLikeToString, + "array": function(input) { + return arrayLikeToArrayLike(input, new Array(input.length)); + }, + "arraybuffer": function(input) { + return input.buffer; + }, + "uint8array": identity, + "nodebuffer": function(input) { + return nodejsUtils.newBufferFrom(input); + } +}; + +// nodebuffer to ? +transform["nodebuffer"] = { + "string": arrayLikeToString, + "array": function(input) { + return arrayLikeToArrayLike(input, new Array(input.length)); + }, + "arraybuffer": function(input) { + return transform["nodebuffer"]["uint8array"](input).buffer; + }, + "uint8array": function(input) { + return arrayLikeToArrayLike(input, new Uint8Array(input.length)); + }, + "nodebuffer": identity +}; + +/** + * Transform an input into any type. + * The supported output type are : string, array, uint8array, arraybuffer, nodebuffer. + * If no output type is specified, the unmodified input will be returned. + * @param {String} outputType the output type. + * @param {String|Array|ArrayBuffer|Uint8Array|Buffer} input the input to convert. + * @throws {Error} an Error if the browser doesn't support the requested output type. + */ +exports.transformTo = function(outputType, input) { + if (!input) { + // undefined, null, etc + // an empty string won't harm. + input = ""; + } + if (!outputType) { + return input; + } + exports.checkSupport(outputType); + var inputType = exports.getTypeOf(input); + var result = transform[inputType][outputType](input); + return result; +}; + +/** + * Return the type of the input. + * The type will be in a format valid for JSZip.utils.transformTo : string, array, uint8array, arraybuffer. + * @param {Object} input the input to identify. + * @return {String} the (lowercase) type of the input. + */ +exports.getTypeOf = function(input) { + if (typeof input === "string") { + return "string"; + } + if (Object.prototype.toString.call(input) === "[object Array]") { + return "array"; + } + if (support.nodebuffer && nodejsUtils.isBuffer(input)) { + return "nodebuffer"; + } + if (support.uint8array && input instanceof Uint8Array) { + return "uint8array"; + } + if (support.arraybuffer && input instanceof ArrayBuffer) { + return "arraybuffer"; + } +}; + +/** + * Throw an exception if the type is not supported. + * @param {String} type the type to check. + * @throws {Error} an Error if the browser doesn't support the requested type. + */ +exports.checkSupport = function(type) { + var supported = support[type.toLowerCase()]; + if (!supported) { + throw new Error(type + " is not supported by this platform"); + } +}; + +exports.MAX_VALUE_16BITS = 65535; +exports.MAX_VALUE_32BITS = -1; // well, "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" is parsed as -1 + +/** + * Prettify a string read as binary. + * @param {string} str the string to prettify. + * @return {string} a pretty string. + */ +exports.pretty = function(str) { + var res = '', + code, i; + for (i = 0; i < (str || "").length; i++) { + code = str.charCodeAt(i); + res += '\\x' + (code < 16 ? "0" : "") + code.toString(16).toUpperCase(); + } + return res; +}; + +/** + * Defer the call of a function. + * @param {Function} callback the function to call asynchronously. + * @param {Array} args the arguments to give to the callback. + */ +exports.delay = function(callback, args, self) { + setImmediate(function () { + callback.apply(self || null, args || []); + }); +}; + +/** + * Extends a prototype with an other, without calling a constructor with + * side effects. Inspired by nodejs' `utils.inherits` + * @param {Function} ctor the constructor to augment + * @param {Function} superCtor the parent constructor to use + */ +exports.inherits = function (ctor, superCtor) { + var Obj = function() {}; + Obj.prototype = superCtor.prototype; + ctor.prototype = new Obj(); +}; + +/** + * Merge the objects passed as parameters into a new one. + * @private + * @param {...Object} var_args All objects to merge. + * @return {Object} a new object with the data of the others. + */ +exports.extend = function() { + var result = {}, i, attr; + for (i = 0; i < arguments.length; i++) { // arguments is not enumerable in some browsers + for (attr in arguments[i]) { + if (arguments[i].hasOwnProperty(attr) && typeof result[attr] === "undefined") { + result[attr] = arguments[i][attr]; + } + } + } + return result; +}; + +/** + * Transform arbitrary content into a Promise. + * @param {String} name a name for the content being processed. + * @param {Object} inputData the content to process. + * @param {Boolean} isBinary true if the content is not an unicode string + * @param {Boolean} isOptimizedBinaryString true if the string content only has one byte per character. + * @param {Boolean} isBase64 true if the string content is encoded with base64. + * @return {Promise} a promise in a format usable by JSZip. + */ +exports.prepareContent = function(name, inputData, isBinary, isOptimizedBinaryString, isBase64) { + + // if inputData is already a promise, this flatten it. + var promise = external.Promise.resolve(inputData).then(function(data) { + + + var isBlob = support.blob && (data instanceof Blob || ['[object File]', '[object Blob]'].indexOf(Object.prototype.toString.call(data)) !== -1); + + if (isBlob && typeof FileReader !== "undefined") { + return new external.Promise(function (resolve, reject) { + var reader = new FileReader(); + + reader.onload = function(e) { + resolve(e.target.result); + }; + reader.onerror = function(e) { + reject(e.target.error); + }; + reader.readAsArrayBuffer(data); + }); + } else { + return data; + } + }); + + return promise.then(function(data) { + var dataType = exports.getTypeOf(data); + + if (!dataType) { + return external.Promise.reject( + new Error("Can't read the data of '" + name + "'. Is it " + + "in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?") + ); + } + // special case : it's way easier to work with Uint8Array than with ArrayBuffer + if (dataType === "arraybuffer") { + data = exports.transformTo("uint8array", data); + } else if (dataType === "string") { + if (isBase64) { + data = base64.decode(data); + } + else if (isBinary) { + // optimizedBinaryString === true means that the file has already been filtered with a 0xFF mask + if (isOptimizedBinaryString !== true) { + // this is a string, not in a base64 format. + // Be sure that this is a correct "binary string" + data = string2binary(data); + } + } + } + return data; + }); +}; + +},{"./base64":1,"./external":6,"./nodejsUtils":14,"./support":30,"core-js/library/fn/set-immediate":36}],33:[function(require,module,exports){ +'use strict'; +var readerFor = require('./reader/readerFor'); +var utils = require('./utils'); +var sig = require('./signature'); +var ZipEntry = require('./zipEntry'); +var utf8 = require('./utf8'); +var support = require('./support'); +// class ZipEntries {{{ +/** + * All the entries in the zip file. + * @constructor + * @param {Object} loadOptions Options for loading the stream. + */ +function ZipEntries(loadOptions) { + this.files = []; + this.loadOptions = loadOptions; +} +ZipEntries.prototype = { + /** + * Check that the reader is on the specified signature. + * @param {string} expectedSignature the expected signature. + * @throws {Error} if it is an other signature. + */ + checkSignature: function(expectedSignature) { + if (!this.reader.readAndCheckSignature(expectedSignature)) { + this.reader.index -= 4; + var signature = this.reader.readString(4); + throw new Error("Corrupted zip or bug: unexpected signature " + "(" + utils.pretty(signature) + ", expected " + utils.pretty(expectedSignature) + ")"); + } + }, + /** + * Check if the given signature is at the given index. + * @param {number} askedIndex the index to check. + * @param {string} expectedSignature the signature to expect. + * @return {boolean} true if the signature is here, false otherwise. + */ + isSignature: function(askedIndex, expectedSignature) { + var currentIndex = this.reader.index; + this.reader.setIndex(askedIndex); + var signature = this.reader.readString(4); + var result = signature === expectedSignature; + this.reader.setIndex(currentIndex); + return result; + }, + /** + * Read the end of the central directory. + */ + readBlockEndOfCentral: function() { + this.diskNumber = this.reader.readInt(2); + this.diskWithCentralDirStart = this.reader.readInt(2); + this.centralDirRecordsOnThisDisk = this.reader.readInt(2); + this.centralDirRecords = this.reader.readInt(2); + this.centralDirSize = this.reader.readInt(4); + this.centralDirOffset = this.reader.readInt(4); + + this.zipCommentLength = this.reader.readInt(2); + // warning : the encoding depends of the system locale + // On a linux machine with LANG=en_US.utf8, this field is utf8 encoded. + // On a windows machine, this field is encoded with the localized windows code page. + var zipComment = this.reader.readData(this.zipCommentLength); + var decodeParamType = support.uint8array ? "uint8array" : "array"; + // To get consistent behavior with the generation part, we will assume that + // this is utf8 encoded unless specified otherwise. + var decodeContent = utils.transformTo(decodeParamType, zipComment); + this.zipComment = this.loadOptions.decodeFileName(decodeContent); + }, + /** + * Read the end of the Zip 64 central directory. + * Not merged with the method readEndOfCentral : + * The end of central can coexist with its Zip64 brother, + * I don't want to read the wrong number of bytes ! + */ + readBlockZip64EndOfCentral: function() { + this.zip64EndOfCentralSize = this.reader.readInt(8); + this.reader.skip(4); + // this.versionMadeBy = this.reader.readString(2); + // this.versionNeeded = this.reader.readInt(2); + this.diskNumber = this.reader.readInt(4); + this.diskWithCentralDirStart = this.reader.readInt(4); + this.centralDirRecordsOnThisDisk = this.reader.readInt(8); + this.centralDirRecords = this.reader.readInt(8); + this.centralDirSize = this.reader.readInt(8); + this.centralDirOffset = this.reader.readInt(8); + + this.zip64ExtensibleData = {}; + var extraDataSize = this.zip64EndOfCentralSize - 44, + index = 0, + extraFieldId, + extraFieldLength, + extraFieldValue; + while (index < extraDataSize) { + extraFieldId = this.reader.readInt(2); + extraFieldLength = this.reader.readInt(4); + extraFieldValue = this.reader.readData(extraFieldLength); + this.zip64ExtensibleData[extraFieldId] = { + id: extraFieldId, + length: extraFieldLength, + value: extraFieldValue + }; + } + }, + /** + * Read the end of the Zip 64 central directory locator. + */ + readBlockZip64EndOfCentralLocator: function() { + this.diskWithZip64CentralDirStart = this.reader.readInt(4); + this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8); + this.disksCount = this.reader.readInt(4); + if (this.disksCount > 1) { + throw new Error("Multi-volumes zip are not supported"); + } + }, + /** + * Read the local files, based on the offset read in the central part. + */ + readLocalFiles: function() { + var i, file; + for (i = 0; i < this.files.length; i++) { + file = this.files[i]; + this.reader.setIndex(file.localHeaderOffset); + this.checkSignature(sig.LOCAL_FILE_HEADER); + file.readLocalPart(this.reader); + file.handleUTF8(); + file.processAttributes(); + } + }, + /** + * Read the central directory. + */ + readCentralDir: function() { + var file; + + this.reader.setIndex(this.centralDirOffset); + while (this.reader.readAndCheckSignature(sig.CENTRAL_FILE_HEADER)) { + file = new ZipEntry({ + zip64: this.zip64 + }, this.loadOptions); + file.readCentralPart(this.reader); + this.files.push(file); + } + + if (this.centralDirRecords !== this.files.length) { + if (this.centralDirRecords !== 0 && this.files.length === 0) { + // We expected some records but couldn't find ANY. + // This is really suspicious, as if something went wrong. + throw new Error("Corrupted zip or bug: expected " + this.centralDirRecords + " records in central dir, got " + this.files.length); + } else { + // We found some records but not all. + // Something is wrong but we got something for the user: no error here. + // console.warn("expected", this.centralDirRecords, "records in central dir, got", this.files.length); + } + } + }, + /** + * Read the end of central directory. + */ + readEndOfCentral: function() { + var offset = this.reader.lastIndexOfSignature(sig.CENTRAL_DIRECTORY_END); + if (offset < 0) { + // Check if the content is a truncated zip or complete garbage. + // A "LOCAL_FILE_HEADER" is not required at the beginning (auto + // extractible zip for example) but it can give a good hint. + // If an ajax request was used without responseType, we will also + // get unreadable data. + var isGarbage = !this.isSignature(0, sig.LOCAL_FILE_HEADER); + + if (isGarbage) { + throw new Error("Can't find end of central directory : is this a zip file ? " + + "If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html"); + } else { + throw new Error("Corrupted zip: can't find end of central directory"); + } + + } + this.reader.setIndex(offset); + var endOfCentralDirOffset = offset; + this.checkSignature(sig.CENTRAL_DIRECTORY_END); + this.readBlockEndOfCentral(); + + + /* extract from the zip spec : + 4) If one of the fields in the end of central directory + record is too small to hold required data, the field + should be set to -1 (0xFFFF or 0xFFFFFFFF) and the + ZIP64 format record should be created. + 5) The end of central directory record and the + Zip64 end of central directory locator record must + reside on the same disk when splitting or spanning + an archive. + */ + if (this.diskNumber === utils.MAX_VALUE_16BITS || this.diskWithCentralDirStart === utils.MAX_VALUE_16BITS || this.centralDirRecordsOnThisDisk === utils.MAX_VALUE_16BITS || this.centralDirRecords === utils.MAX_VALUE_16BITS || this.centralDirSize === utils.MAX_VALUE_32BITS || this.centralDirOffset === utils.MAX_VALUE_32BITS) { + this.zip64 = true; + + /* + Warning : the zip64 extension is supported, but ONLY if the 64bits integer read from + the zip file can fit into a 32bits integer. This cannot be solved : JavaScript represents + all numbers as 64-bit double precision IEEE 754 floating point numbers. + So, we have 53bits for integers and bitwise operations treat everything as 32bits. + see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators + and http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf section 8.5 + */ + + // should look for a zip64 EOCD locator + offset = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR); + if (offset < 0) { + throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator"); + } + this.reader.setIndex(offset); + this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR); + this.readBlockZip64EndOfCentralLocator(); + + // now the zip64 EOCD record + if (!this.isSignature(this.relativeOffsetEndOfZip64CentralDir, sig.ZIP64_CENTRAL_DIRECTORY_END)) { + // console.warn("ZIP64 end of central directory not where expected."); + this.relativeOffsetEndOfZip64CentralDir = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_END); + if (this.relativeOffsetEndOfZip64CentralDir < 0) { + throw new Error("Corrupted zip: can't find the ZIP64 end of central directory"); + } + } + this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir); + this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_END); + this.readBlockZip64EndOfCentral(); + } + + var expectedEndOfCentralDirOffset = this.centralDirOffset + this.centralDirSize; + if (this.zip64) { + expectedEndOfCentralDirOffset += 20; // end of central dir 64 locator + expectedEndOfCentralDirOffset += 12 /* should not include the leading 12 bytes */ + this.zip64EndOfCentralSize; + } + + var extraBytes = endOfCentralDirOffset - expectedEndOfCentralDirOffset; + + if (extraBytes > 0) { + // console.warn(extraBytes, "extra bytes at beginning or within zipfile"); + if (this.isSignature(endOfCentralDirOffset, sig.CENTRAL_FILE_HEADER)) { + // The offsets seem wrong, but we have something at the specified offset. + // So… we keep it. + } else { + // the offset is wrong, update the "zero" of the reader + // this happens if data has been prepended (crx files for example) + this.reader.zero = extraBytes; + } + } else if (extraBytes < 0) { + throw new Error("Corrupted zip: missing " + Math.abs(extraBytes) + " bytes."); + } + }, + prepareReader: function(data) { + this.reader = readerFor(data); + }, + /** + * Read a zip file and create ZipEntries. + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the binary string representing a zip file. + */ + load: function(data) { + this.prepareReader(data); + this.readEndOfCentral(); + this.readCentralDir(); + this.readLocalFiles(); + } +}; +// }}} end of ZipEntries +module.exports = ZipEntries; + +},{"./reader/readerFor":22,"./signature":23,"./support":30,"./utf8":31,"./utils":32,"./zipEntry":34}],34:[function(require,module,exports){ +'use strict'; +var readerFor = require('./reader/readerFor'); +var utils = require('./utils'); +var CompressedObject = require('./compressedObject'); +var crc32fn = require('./crc32'); +var utf8 = require('./utf8'); +var compressions = require('./compressions'); +var support = require('./support'); + +var MADE_BY_DOS = 0x00; +var MADE_BY_UNIX = 0x03; + +/** + * Find a compression registered in JSZip. + * @param {string} compressionMethod the method magic to find. + * @return {Object|null} the JSZip compression object, null if none found. + */ +var findCompression = function(compressionMethod) { + for (var method in compressions) { + if (!compressions.hasOwnProperty(method)) { + continue; + } + if (compressions[method].magic === compressionMethod) { + return compressions[method]; + } + } + return null; +}; + +// class ZipEntry {{{ +/** + * An entry in the zip file. + * @constructor + * @param {Object} options Options of the current file. + * @param {Object} loadOptions Options for loading the stream. + */ +function ZipEntry(options, loadOptions) { + this.options = options; + this.loadOptions = loadOptions; +} +ZipEntry.prototype = { + /** + * say if the file is encrypted. + * @return {boolean} true if the file is encrypted, false otherwise. + */ + isEncrypted: function() { + // bit 1 is set + return (this.bitFlag & 0x0001) === 0x0001; + }, + /** + * say if the file has utf-8 filename/comment. + * @return {boolean} true if the filename/comment is in utf-8, false otherwise. + */ + useUTF8: function() { + // bit 11 is set + return (this.bitFlag & 0x0800) === 0x0800; + }, + /** + * Read the local part of a zip file and add the info in this object. + * @param {DataReader} reader the reader to use. + */ + readLocalPart: function(reader) { + var compression, localExtraFieldsLength; + + // we already know everything from the central dir ! + // If the central dir data are false, we are doomed. + // On the bright side, the local part is scary : zip64, data descriptors, both, etc. + // The less data we get here, the more reliable this should be. + // Let's skip the whole header and dash to the data ! + reader.skip(22); + // in some zip created on windows, the filename stored in the central dir contains \ instead of /. + // Strangely, the filename here is OK. + // I would love to treat these zip files as corrupted (see http://www.info-zip.org/FAQ.html#backslashes + // or APPNOTE#4.4.17.1, "All slashes MUST be forward slashes '/'") but there are a lot of bad zip generators... + // Search "unzip mismatching "local" filename continuing with "central" filename version" on + // the internet. + // + // I think I see the logic here : the central directory is used to display + // content and the local directory is used to extract the files. Mixing / and \ + // may be used to display \ to windows users and use / when extracting the files. + // Unfortunately, this lead also to some issues : http://seclists.org/fulldisclosure/2009/Sep/394 + this.fileNameLength = reader.readInt(2); + localExtraFieldsLength = reader.readInt(2); // can't be sure this will be the same as the central dir + // the fileName is stored as binary data, the handleUTF8 method will take care of the encoding. + this.fileName = reader.readData(this.fileNameLength); + reader.skip(localExtraFieldsLength); + + if (this.compressedSize === -1 || this.uncompressedSize === -1) { + throw new Error("Bug or corrupted zip : didn't get enough informations from the central directory " + "(compressedSize === -1 || uncompressedSize === -1)"); + } + + compression = findCompression(this.compressionMethod); + if (compression === null) { // no compression found + throw new Error("Corrupted zip : compression " + utils.pretty(this.compressionMethod) + " unknown (inner file : " + utils.transformTo("string", this.fileName) + ")"); + } + this.decompressed = new CompressedObject(this.compressedSize, this.uncompressedSize, this.crc32, compression, reader.readData(this.compressedSize)); + }, + + /** + * Read the central part of a zip file and add the info in this object. + * @param {DataReader} reader the reader to use. + */ + readCentralPart: function(reader) { + this.versionMadeBy = reader.readInt(2); + reader.skip(2); + // this.versionNeeded = reader.readInt(2); + this.bitFlag = reader.readInt(2); + this.compressionMethod = reader.readString(2); + this.date = reader.readDate(); + this.crc32 = reader.readInt(4); + this.compressedSize = reader.readInt(4); + this.uncompressedSize = reader.readInt(4); + var fileNameLength = reader.readInt(2); + this.extraFieldsLength = reader.readInt(2); + this.fileCommentLength = reader.readInt(2); + this.diskNumberStart = reader.readInt(2); + this.internalFileAttributes = reader.readInt(2); + this.externalFileAttributes = reader.readInt(4); + this.localHeaderOffset = reader.readInt(4); + + if (this.isEncrypted()) { + throw new Error("Encrypted zip are not supported"); + } + + // will be read in the local part, see the comments there + reader.skip(fileNameLength); + this.readExtraFields(reader); + this.parseZIP64ExtraField(reader); + this.fileComment = reader.readData(this.fileCommentLength); + }, + + /** + * Parse the external file attributes and get the unix/dos permissions. + */ + processAttributes: function () { + this.unixPermissions = null; + this.dosPermissions = null; + var madeBy = this.versionMadeBy >> 8; + + // Check if we have the DOS directory flag set. + // We look for it in the DOS and UNIX permissions + // but some unknown platform could set it as a compatibility flag. + this.dir = this.externalFileAttributes & 0x0010 ? true : false; + + if(madeBy === MADE_BY_DOS) { + // first 6 bits (0 to 5) + this.dosPermissions = this.externalFileAttributes & 0x3F; + } + + if(madeBy === MADE_BY_UNIX) { + this.unixPermissions = (this.externalFileAttributes >> 16) & 0xFFFF; + // the octal permissions are in (this.unixPermissions & 0x01FF).toString(8); + } + + // fail safe : if the name ends with a / it probably means a folder + if (!this.dir && this.fileNameStr.slice(-1) === '/') { + this.dir = true; + } + }, + + /** + * Parse the ZIP64 extra field and merge the info in the current ZipEntry. + * @param {DataReader} reader the reader to use. + */ + parseZIP64ExtraField: function(reader) { + + if (!this.extraFields[0x0001]) { + return; + } + + // should be something, preparing the extra reader + var extraReader = readerFor(this.extraFields[0x0001].value); + + // I really hope that these 64bits integer can fit in 32 bits integer, because js + // won't let us have more. + if (this.uncompressedSize === utils.MAX_VALUE_32BITS) { + this.uncompressedSize = extraReader.readInt(8); + } + if (this.compressedSize === utils.MAX_VALUE_32BITS) { + this.compressedSize = extraReader.readInt(8); + } + if (this.localHeaderOffset === utils.MAX_VALUE_32BITS) { + this.localHeaderOffset = extraReader.readInt(8); + } + if (this.diskNumberStart === utils.MAX_VALUE_32BITS) { + this.diskNumberStart = extraReader.readInt(4); + } + }, + /** + * Read the central part of a zip file and add the info in this object. + * @param {DataReader} reader the reader to use. + */ + readExtraFields: function(reader) { + var end = reader.index + this.extraFieldsLength, + extraFieldId, + extraFieldLength, + extraFieldValue; + + if (!this.extraFields) { + this.extraFields = {}; + } + + while (reader.index < end) { + extraFieldId = reader.readInt(2); + extraFieldLength = reader.readInt(2); + extraFieldValue = reader.readData(extraFieldLength); + + this.extraFields[extraFieldId] = { + id: extraFieldId, + length: extraFieldLength, + value: extraFieldValue + }; + } + }, + /** + * Apply an UTF8 transformation if needed. + */ + handleUTF8: function() { + var decodeParamType = support.uint8array ? "uint8array" : "array"; + if (this.useUTF8()) { + this.fileNameStr = utf8.utf8decode(this.fileName); + this.fileCommentStr = utf8.utf8decode(this.fileComment); + } else { + var upath = this.findExtraFieldUnicodePath(); + if (upath !== null) { + this.fileNameStr = upath; + } else { + // ASCII text or unsupported code page + var fileNameByteArray = utils.transformTo(decodeParamType, this.fileName); + this.fileNameStr = this.loadOptions.decodeFileName(fileNameByteArray); + } + + var ucomment = this.findExtraFieldUnicodeComment(); + if (ucomment !== null) { + this.fileCommentStr = ucomment; + } else { + // ASCII text or unsupported code page + var commentByteArray = utils.transformTo(decodeParamType, this.fileComment); + this.fileCommentStr = this.loadOptions.decodeFileName(commentByteArray); + } + } + }, + + /** + * Find the unicode path declared in the extra field, if any. + * @return {String} the unicode path, null otherwise. + */ + findExtraFieldUnicodePath: function() { + var upathField = this.extraFields[0x7075]; + if (upathField) { + var extraReader = readerFor(upathField.value); + + // wrong version + if (extraReader.readInt(1) !== 1) { + return null; + } + + // the crc of the filename changed, this field is out of date. + if (crc32fn(this.fileName) !== extraReader.readInt(4)) { + return null; + } + + return utf8.utf8decode(extraReader.readData(upathField.length - 5)); + } + return null; + }, + + /** + * Find the unicode comment declared in the extra field, if any. + * @return {String} the unicode comment, null otherwise. + */ + findExtraFieldUnicodeComment: function() { + var ucommentField = this.extraFields[0x6375]; + if (ucommentField) { + var extraReader = readerFor(ucommentField.value); + + // wrong version + if (extraReader.readInt(1) !== 1) { + return null; + } + + // the crc of the comment changed, this field is out of date. + if (crc32fn(this.fileComment) !== extraReader.readInt(4)) { + return null; + } + + return utf8.utf8decode(extraReader.readData(ucommentField.length - 5)); + } + return null; + } +}; +module.exports = ZipEntry; + +},{"./compressedObject":2,"./compressions":3,"./crc32":4,"./reader/readerFor":22,"./support":30,"./utf8":31,"./utils":32}],35:[function(require,module,exports){ +'use strict'; + +var StreamHelper = require('./stream/StreamHelper'); +var DataWorker = require('./stream/DataWorker'); +var utf8 = require('./utf8'); +var CompressedObject = require('./compressedObject'); +var GenericWorker = require('./stream/GenericWorker'); + +/** + * A simple object representing a file in the zip file. + * @constructor + * @param {string} name the name of the file + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data + * @param {Object} options the options of the file + */ +var ZipObject = function(name, data, options) { + this.name = name; + this.dir = options.dir; + this.date = options.date; + this.comment = options.comment; + this.unixPermissions = options.unixPermissions; + this.dosPermissions = options.dosPermissions; + + this._data = data; + this._dataBinary = options.binary; + // keep only the compression + this.options = { + compression : options.compression, + compressionOptions : options.compressionOptions + }; +}; + +ZipObject.prototype = { + /** + * Create an internal stream for the content of this object. + * @param {String} type the type of each chunk. + * @return StreamHelper the stream. + */ + internalStream: function (type) { + var result = null, outputType = "string"; + try { + if (!type) { + throw new Error("No output type specified."); + } + outputType = type.toLowerCase(); + var askUnicodeString = outputType === "string" || outputType === "text"; + if (outputType === "binarystring" || outputType === "text") { + outputType = "string"; + } + result = this._decompressWorker(); + + var isUnicodeString = !this._dataBinary; + + if (isUnicodeString && !askUnicodeString) { + result = result.pipe(new utf8.Utf8EncodeWorker()); + } + if (!isUnicodeString && askUnicodeString) { + result = result.pipe(new utf8.Utf8DecodeWorker()); + } + } catch (e) { + result = new GenericWorker("error"); + result.error(e); + } + + return new StreamHelper(result, outputType, ""); + }, + + /** + * Prepare the content in the asked type. + * @param {String} type the type of the result. + * @param {Function} onUpdate a function to call on each internal update. + * @return Promise the promise of the result. + */ + async: function (type, onUpdate) { + return this.internalStream(type).accumulate(onUpdate); + }, + + /** + * Prepare the content as a nodejs stream. + * @param {String} type the type of each chunk. + * @param {Function} onUpdate a function to call on each internal update. + * @return Stream the stream. + */ + nodeStream: function (type, onUpdate) { + return this.internalStream(type || "nodebuffer").toNodejsStream(onUpdate); + }, + + /** + * Return a worker for the compressed content. + * @private + * @param {Object} compression the compression object to use. + * @param {Object} compressionOptions the options to use when compressing. + * @return Worker the worker. + */ + _compressWorker: function (compression, compressionOptions) { + if ( + this._data instanceof CompressedObject && + this._data.compression.magic === compression.magic + ) { + return this._data.getCompressedWorker(); + } else { + var result = this._decompressWorker(); + if(!this._dataBinary) { + result = result.pipe(new utf8.Utf8EncodeWorker()); + } + return CompressedObject.createWorkerFrom(result, compression, compressionOptions); + } + }, + /** + * Return a worker for the decompressed content. + * @private + * @return Worker the worker. + */ + _decompressWorker : function () { + if (this._data instanceof CompressedObject) { + return this._data.getContentWorker(); + } else if (this._data instanceof GenericWorker) { + return this._data; + } else { + return new DataWorker(this._data); + } + } +}; + +var removedMethods = ["asText", "asBinary", "asNodeBuffer", "asUint8Array", "asArrayBuffer"]; +var removedFn = function () { + throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide."); +}; + +for(var i = 0; i < removedMethods.length; i++) { + ZipObject.prototype[removedMethods[i]] = removedFn; +} +module.exports = ZipObject; + +},{"./compressedObject":2,"./stream/DataWorker":27,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31}],36:[function(require,module,exports){ +require('../modules/web.immediate'); +module.exports = require('../modules/_core').setImmediate; +},{"../modules/_core":40,"../modules/web.immediate":56}],37:[function(require,module,exports){ +module.exports = function(it){ + if(typeof it != 'function')throw TypeError(it + ' is not a function!'); + return it; +}; +},{}],38:[function(require,module,exports){ +var isObject = require('./_is-object'); +module.exports = function(it){ + if(!isObject(it))throw TypeError(it + ' is not an object!'); + return it; +}; +},{"./_is-object":51}],39:[function(require,module,exports){ +var toString = {}.toString; + +module.exports = function(it){ + return toString.call(it).slice(8, -1); +}; +},{}],40:[function(require,module,exports){ +var core = module.exports = {version: '2.3.0'}; +if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef +},{}],41:[function(require,module,exports){ +// optional / simple context binding +var aFunction = require('./_a-function'); +module.exports = function(fn, that, length){ + aFunction(fn); + if(that === undefined)return fn; + switch(length){ + case 1: return function(a){ + return fn.call(that, a); + }; + case 2: return function(a, b){ + return fn.call(that, a, b); + }; + case 3: return function(a, b, c){ + return fn.call(that, a, b, c); + }; + } + return function(/* ...args */){ + return fn.apply(that, arguments); + }; +}; +},{"./_a-function":37}],42:[function(require,module,exports){ +// Thank's IE8 for his funny defineProperty +module.exports = !require('./_fails')(function(){ + return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7; +}); +},{"./_fails":45}],43:[function(require,module,exports){ +var isObject = require('./_is-object') + , document = require('./_global').document + // in old IE typeof document.createElement is 'object' + , is = isObject(document) && isObject(document.createElement); +module.exports = function(it){ + return is ? document.createElement(it) : {}; +}; +},{"./_global":46,"./_is-object":51}],44:[function(require,module,exports){ +var global = require('./_global') + , core = require('./_core') + , ctx = require('./_ctx') + , hide = require('./_hide') + , PROTOTYPE = 'prototype'; + +var $export = function(type, name, source){ + var IS_FORCED = type & $export.F + , IS_GLOBAL = type & $export.G + , IS_STATIC = type & $export.S + , IS_PROTO = type & $export.P + , IS_BIND = type & $export.B + , IS_WRAP = type & $export.W + , exports = IS_GLOBAL ? core : core[name] || (core[name] = {}) + , expProto = exports[PROTOTYPE] + , target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE] + , key, own, out; + if(IS_GLOBAL)source = name; + for(key in source){ + // contains in native + own = !IS_FORCED && target && target[key] !== undefined; + if(own && key in exports)continue; + // export native or passed + out = own ? target[key] : source[key]; + // prevent global pollution for namespaces + exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key] + // bind timers to global for call from export context + : IS_BIND && own ? ctx(out, global) + // wrap global constructors for prevent change them in library + : IS_WRAP && target[key] == out ? (function(C){ + var F = function(a, b, c){ + if(this instanceof C){ + switch(arguments.length){ + case 0: return new C; + case 1: return new C(a); + case 2: return new C(a, b); + } return new C(a, b, c); + } return C.apply(this, arguments); + }; + F[PROTOTYPE] = C[PROTOTYPE]; + return F; + // make static versions for prototype methods + })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; + // export proto methods to core.%CONSTRUCTOR%.methods.%NAME% + if(IS_PROTO){ + (exports.virtual || (exports.virtual = {}))[key] = out; + // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME% + if(type & $export.R && expProto && !expProto[key])hide(expProto, key, out); + } + } +}; +// type bitmap +$export.F = 1; // forced +$export.G = 2; // global +$export.S = 4; // static +$export.P = 8; // proto +$export.B = 16; // bind +$export.W = 32; // wrap +$export.U = 64; // safe +$export.R = 128; // real proto method for `library` +module.exports = $export; +},{"./_core":40,"./_ctx":41,"./_global":46,"./_hide":47}],45:[function(require,module,exports){ +module.exports = function(exec){ + try { + return !!exec(); + } catch(e){ + return true; + } +}; +},{}],46:[function(require,module,exports){ +// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 +var global = module.exports = typeof window != 'undefined' && window.Math == Math + ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')(); +if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef +},{}],47:[function(require,module,exports){ +var dP = require('./_object-dp') + , createDesc = require('./_property-desc'); +module.exports = require('./_descriptors') ? function(object, key, value){ + return dP.f(object, key, createDesc(1, value)); +} : function(object, key, value){ + object[key] = value; + return object; +}; +},{"./_descriptors":42,"./_object-dp":52,"./_property-desc":53}],48:[function(require,module,exports){ +module.exports = require('./_global').document && document.documentElement; +},{"./_global":46}],49:[function(require,module,exports){ +module.exports = !require('./_descriptors') && !require('./_fails')(function(){ + return Object.defineProperty(require('./_dom-create')('div'), 'a', {get: function(){ return 7; }}).a != 7; +}); +},{"./_descriptors":42,"./_dom-create":43,"./_fails":45}],50:[function(require,module,exports){ +// fast apply, http://jsperf.lnkit.com/fast-apply/5 +module.exports = function(fn, args, that){ + var un = that === undefined; + switch(args.length){ + case 0: return un ? fn() + : fn.call(that); + case 1: return un ? fn(args[0]) + : fn.call(that, args[0]); + case 2: return un ? fn(args[0], args[1]) + : fn.call(that, args[0], args[1]); + case 3: return un ? fn(args[0], args[1], args[2]) + : fn.call(that, args[0], args[1], args[2]); + case 4: return un ? fn(args[0], args[1], args[2], args[3]) + : fn.call(that, args[0], args[1], args[2], args[3]); + } return fn.apply(that, args); +}; +},{}],51:[function(require,module,exports){ +module.exports = function(it){ + return typeof it === 'object' ? it !== null : typeof it === 'function'; +}; +},{}],52:[function(require,module,exports){ +var anObject = require('./_an-object') + , IE8_DOM_DEFINE = require('./_ie8-dom-define') + , toPrimitive = require('./_to-primitive') + , dP = Object.defineProperty; + +exports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes){ + anObject(O); + P = toPrimitive(P, true); + anObject(Attributes); + if(IE8_DOM_DEFINE)try { + return dP(O, P, Attributes); + } catch(e){ /* empty */ } + if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!'); + if('value' in Attributes)O[P] = Attributes.value; + return O; +}; +},{"./_an-object":38,"./_descriptors":42,"./_ie8-dom-define":49,"./_to-primitive":55}],53:[function(require,module,exports){ +module.exports = function(bitmap, value){ + return { + enumerable : !(bitmap & 1), + configurable: !(bitmap & 2), + writable : !(bitmap & 4), + value : value + }; +}; +},{}],54:[function(require,module,exports){ +var ctx = require('./_ctx') + , invoke = require('./_invoke') + , html = require('./_html') + , cel = require('./_dom-create') + , global = require('./_global') + , process = global.process + , setTask = global.setImmediate + , clearTask = global.clearImmediate + , MessageChannel = global.MessageChannel + , counter = 0 + , queue = {} + , ONREADYSTATECHANGE = 'onreadystatechange' + , defer, channel, port; +var run = function(){ + var id = +this; + if(queue.hasOwnProperty(id)){ + var fn = queue[id]; + delete queue[id]; + fn(); + } +}; +var listener = function(event){ + run.call(event.data); +}; +// Node.js 0.9+ & IE10+ has setImmediate, otherwise: +if(!setTask || !clearTask){ + setTask = function setImmediate(fn){ + var args = [], i = 1; + while(arguments.length > i)args.push(arguments[i++]); + queue[++counter] = function(){ + invoke(typeof fn == 'function' ? fn : Function(fn), args); + }; + defer(counter); + return counter; + }; + clearTask = function clearImmediate(id){ + delete queue[id]; + }; + // Node.js 0.8- + if(require('./_cof')(process) == 'process'){ + defer = function(id){ + process.nextTick(ctx(run, id, 1)); + }; + // Browsers with MessageChannel, includes WebWorkers + } else if(MessageChannel){ + channel = new MessageChannel; + port = channel.port2; + channel.port1.onmessage = listener; + defer = ctx(port.postMessage, port, 1); + // Browsers with postMessage, skip WebWorkers + // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' + } else if(global.addEventListener && typeof postMessage == 'function' && !global.importScripts){ + defer = function(id){ + global.postMessage(id + '', '*'); + }; + global.addEventListener('message', listener, false); + // IE8- + } else if(ONREADYSTATECHANGE in cel('script')){ + defer = function(id){ + html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function(){ + html.removeChild(this); + run.call(id); + }; + }; + // Rest old browsers + } else { + defer = function(id){ + setTimeout(ctx(run, id, 1), 0); + }; + } +} +module.exports = { + set: setTask, + clear: clearTask +}; +},{"./_cof":39,"./_ctx":41,"./_dom-create":43,"./_global":46,"./_html":48,"./_invoke":50}],55:[function(require,module,exports){ +// 7.1.1 ToPrimitive(input [, PreferredType]) +var isObject = require('./_is-object'); +// instead of the ES6 spec version, we didn't implement @@toPrimitive case +// and the second argument - flag - preferred type is a string +module.exports = function(it, S){ + if(!isObject(it))return it; + var fn, val; + if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val; + if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val; + if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val; + throw TypeError("Can't convert object to primitive value"); +}; +},{"./_is-object":51}],56:[function(require,module,exports){ +var $export = require('./_export') + , $task = require('./_task'); +$export($export.G + $export.B, { + setImmediate: $task.set, + clearImmediate: $task.clear +}); +},{"./_export":44,"./_task":54}],57:[function(require,module,exports){ +(function (global){ +'use strict'; +var Mutation = global.MutationObserver || global.WebKitMutationObserver; + +var scheduleDrain; + +{ + if (Mutation) { + var called = 0; + var observer = new Mutation(nextTick); + var element = global.document.createTextNode(''); + observer.observe(element, { + characterData: true + }); + scheduleDrain = function () { + element.data = (called = ++called % 2); + }; + } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') { + var channel = new global.MessageChannel(); + channel.port1.onmessage = nextTick; + scheduleDrain = function () { + channel.port2.postMessage(0); + }; + } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) { + scheduleDrain = function () { + + // Create a + + + + + +
+ +

index.html

+
+ + diff --git a/doc/0.1.4/de_private/overview-tree.html b/doc/0.1.4/de_private/overview-tree.html new file mode 100644 index 0000000..6d4275a --- /dev/null +++ b/doc/0.1.4/de_private/overview-tree.html @@ -0,0 +1,313 @@ + + + + + +Class Hierarchy + + + + + + + + + + + + + + + +
+ +
+
+ +
+
+

Class Hierarchy

+ +
+
+

Interface Hierarchy

+ +
+
+

Enum Hierarchy

+ +
+
+
+
+ +
+ + diff --git a/doc/0.1.4/de_private/package-search-index.js b/doc/0.1.4/de_private/package-search-index.js new file mode 100644 index 0000000..195d1ef --- /dev/null +++ b/doc/0.1.4/de_private/package-search-index.js @@ -0,0 +1 @@ +packageSearchIndex = [{"l":"All Packages","url":"allpackages-index.html"},{"l":"bitchanger.calculations"},{"l":"bitchanger.gui.controller"},{"l":"bitchanger.gui.controls"},{"l":"bitchanger.gui.views"},{"l":"bitchanger.main"},{"l":"bitchanger.preferences"},{"l":"bitchanger.util"}] \ No newline at end of file diff --git a/doc/0.1.4/de_private/package-search-index.zip b/doc/0.1.4/de_private/package-search-index.zip new file mode 100644 index 0000000000000000000000000000000000000000..98e970004e642c7bccc1c43e8eb524fabfd738fa GIT binary patch literal 282 zcmWIWW@Zs#;Nak3*tS$6kO2uu0@($L$=QkNsk+6fiABj7x|w+?sTF!z#rb)y{f2yp z9C%pvH^sD9GsxO|^lS7OigO*1>T_q8ellOF|*P^6{u2cW|KYo75_s2aRcaiLm zCx0F~=XU2x)`?%welP`ivva(4s!=HeI*pl;fg!+~kx7IB;e2E{kn>RiPR|5*v$BDd NG6JDHklqW{2LRsiRb~JH literal 0 HcmV?d00001 diff --git a/doc/0.1.4/de_private/resources/glass.png b/doc/0.1.4/de_private/resources/glass.png new file mode 100644 index 0000000000000000000000000000000000000000..a7f591f467a1c0c949bbc510156a0c1afb860a6e GIT binary patch literal 499 zcmVJoRsvExf%rEN>jUL}qZ_~k#FbE+Q;{`;0FZwVNX2n-^JoI; zP;4#$8DIy*Yk-P>VN(DUKmPse7mx+ExD4O|;?E5D0Z5($mjO3`*anwQU^s{ZDK#Lz zj>~{qyaIx5K!t%=G&2IJNzg!ChRpyLkO7}Ry!QaotAHAMpbB3AF(}|_f!G-oI|uK6 z`id_dumai5K%C3Y$;tKS_iqMPHg<*|-@e`liWLAggVM!zAP#@l;=c>S03;{#04Z~5 zN_+ss=Yg6*hTr59mzMwZ@+l~q!+?ft!fF66AXT#wWavHt30bZWFCK%!BNk}LN?0Hg z1VF_nfs`Lm^DjYZ1(1uD0u4CSIr)XAaqW6IT{!St5~1{i=i}zAy76p%_|w8rh@@c0Axr!ns=D-X+|*sY6!@wacG9%)Qn*O zl0sa739kT-&_?#oVxXF6tOnqTD)cZ}2vi$`ZU8RLAlo8=_z#*P3xI~i!lEh+Pdu-L zx{d*wgjtXbnGX_Yf@Tc7Q3YhLhPvc8noGJs2DA~1DySiA&6V{5JzFt ojAY1KXm~va;tU{v7C?Xj0BHw!K;2aXV*mgE07*qoM6N<$f;4TDA^-pY literal 0 HcmV?d00001 diff --git a/doc/0.1.4/de_private/script.js b/doc/0.1.4/de_private/script.js new file mode 100644 index 0000000..09adaaa --- /dev/null +++ b/doc/0.1.4/de_private/script.js @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + */ + +var moduleSearchIndex; +var packageSearchIndex; +var typeSearchIndex; +var memberSearchIndex; +var tagSearchIndex; +function loadScripts(doc, tag) { + createElem(doc, tag, 'jquery/jszip/dist/jszip.js'); + createElem(doc, tag, 'jquery/jszip-utils/dist/jszip-utils.js'); + if (window.navigator.userAgent.indexOf('MSIE ') > 0 || window.navigator.userAgent.indexOf('Trident/') > 0 || + window.navigator.userAgent.indexOf('Edge/') > 0) { + createElem(doc, tag, 'jquery/jszip-utils/dist/jszip-utils-ie.js'); + } + createElem(doc, tag, 'search.js'); + + $.get(pathtoroot + "module-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "module-search-index.zip", function(e, data) { + var zip = new JSZip(data); + zip.load(data); + moduleSearchIndex = JSON.parse(zip.file("module-search-index.json").asText()); + }); + }); + $.get(pathtoroot + "package-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "package-search-index.zip", function(e, data) { + var zip = new JSZip(data); + zip.load(data); + packageSearchIndex = JSON.parse(zip.file("package-search-index.json").asText()); + }); + }); + $.get(pathtoroot + "type-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "type-search-index.zip", function(e, data) { + var zip = new JSZip(data); + zip.load(data); + typeSearchIndex = JSON.parse(zip.file("type-search-index.json").asText()); + }); + }); + $.get(pathtoroot + "member-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "member-search-index.zip", function(e, data) { + var zip = new JSZip(data); + zip.load(data); + memberSearchIndex = JSON.parse(zip.file("member-search-index.json").asText()); + }); + }); + $.get(pathtoroot + "tag-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "tag-search-index.zip", function(e, data) { + var zip = new JSZip(data); + zip.load(data); + tagSearchIndex = JSON.parse(zip.file("tag-search-index.json").asText()); + }); + }); + if (!moduleSearchIndex) { + createElem(doc, tag, 'module-search-index.js'); + } + if (!packageSearchIndex) { + createElem(doc, tag, 'package-search-index.js'); + } + if (!typeSearchIndex) { + createElem(doc, tag, 'type-search-index.js'); + } + if (!memberSearchIndex) { + createElem(doc, tag, 'member-search-index.js'); + } + if (!tagSearchIndex) { + createElem(doc, tag, 'tag-search-index.js'); + } + $(window).resize(function() { + $('.navPadding').css('padding-top', $('.fixedNav').css("height")); + }); +} + +function createElem(doc, tag, path) { + var script = doc.createElement(tag); + var scriptElement = doc.getElementsByTagName(tag)[0]; + script.src = pathtoroot + path; + scriptElement.parentNode.insertBefore(script, scriptElement); +} + +function show(type) { + count = 0; + for (var key in data) { + var row = document.getElementById(key); + if ((data[key] & type) !== 0) { + row.style.display = ''; + row.className = (count++ % 2) ? rowColor : altColor; + } + else + row.style.display = 'none'; + } + updateTabs(type); +} + +function updateTabs(type) { + for (var value in tabs) { + var sNode = document.getElementById(tabs[value][0]); + var spanNode = sNode.firstChild; + if (value == type) { + sNode.className = activeTableTab; + spanNode.innerHTML = tabs[value][1]; + } + else { + sNode.className = tableTab; + spanNode.innerHTML = "" + tabs[value][1] + ""; + } + } +} + +function updateModuleFrame(pFrame, cFrame) { + top.packageFrame.location = pFrame; + top.classFrame.location = cFrame; +} diff --git a/doc/0.1.4/de_private/search.js b/doc/0.1.4/de_private/search.js new file mode 100644 index 0000000..7fc8bfc --- /dev/null +++ b/doc/0.1.4/de_private/search.js @@ -0,0 +1,329 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + */ + +var noResult = {l: "No results found"}; +var catModules = "Modules"; +var catPackages = "Packages"; +var catTypes = "Types"; +var catMembers = "Members"; +var catSearchTags = "SearchTags"; +var highlight = "$&"; +var camelCaseRegexp = ""; +var secondaryMatcher = ""; +function getHighlightedText(item) { + var ccMatcher = new RegExp(camelCaseRegexp); + var label = item.replace(ccMatcher, highlight); + if (label === item) { + label = item.replace(secondaryMatcher, highlight); + } + return label; +} +function getURLPrefix(ui) { + var urlPrefix=""; + if (useModuleDirectories) { + var slash = "/"; + if (ui.item.category === catModules) { + return ui.item.l + slash; + } else if (ui.item.category === catPackages && ui.item.m) { + return ui.item.m + slash; + } else if ((ui.item.category === catTypes && ui.item.p) || ui.item.category === catMembers) { + $.each(packageSearchIndex, function(index, item) { + if (ui.item.p == item.l) { + urlPrefix = item.m + slash; + } + }); + return urlPrefix; + } else { + return urlPrefix; + } + } + return urlPrefix; +} +var watermark = 'Search'; +$(function() { + $("#search").val(''); + $("#search").prop("disabled", false); + $("#reset").prop("disabled", false); + $("#search").val(watermark).addClass('watermark'); + $("#search").blur(function() { + if ($(this).val().length == 0) { + $(this).val(watermark).addClass('watermark'); + } + }); + $("#search").on('click keydown', function() { + if ($(this).val() == watermark) { + $(this).val('').removeClass('watermark'); + } + }); + $("#reset").click(function() { + $("#search").val(''); + $("#search").focus(); + }); + $("#search").focus(); + $("#search")[0].setSelectionRange(0, 0); +}); +$.widget("custom.catcomplete", $.ui.autocomplete, { + _create: function() { + this._super(); + this.widget().menu("option", "items", "> :not(.ui-autocomplete-category)"); + }, + _renderMenu: function(ul, items) { + var rMenu = this, + currentCategory = ""; + $.each(items, function(index, item) { + var li; + if (item.l !== noResult.l && item.category !== currentCategory) { + ul.append("
  • " + item.category + "
  • "); + currentCategory = item.category; + } + li = rMenu._renderItemData(ul, item); + if (item.category) { + li.attr("aria-label", item.category + " : " + item.l); + li.attr("class", "resultItem"); + } else { + li.attr("aria-label", item.l); + li.attr("class", "resultItem"); + } + }); + }, + _renderItem: function(ul, item) { + var label = ""; + if (item.category === catModules) { + label = getHighlightedText(item.l); + } else if (item.category === catPackages) { + label = (item.m) + ? getHighlightedText(item.m + "/" + item.l) + : getHighlightedText(item.l); + } else if (item.category === catTypes) { + label = (item.p) + ? getHighlightedText(item.p + "." + item.l) + : getHighlightedText(item.l); + } else if (item.category === catMembers) { + label = getHighlightedText(item.p + "." + (item.c + "." + item.l)); + } else if (item.category === catSearchTags) { + label = getHighlightedText(item.l); + } else { + label = item.l; + } + $li = $("
  • ").appendTo(ul); + if (item.category === catSearchTags) { + if (item.d) { + $("").attr("href", "#") + .html(label + " (" + item.h + ")
    " + + item.d + "
    ") + .appendTo($li); + } else { + $("
    ").attr("href", "#") + .html(label + " (" + item.h + ")") + .appendTo($li); + } + } else { + $("").attr("href", "#") + .html(label) + .appendTo($li); + } + return $li; + } +}); +$(function() { + $("#search").catcomplete({ + minLength: 1, + delay: 100, + source: function(request, response) { + var result = new Array(); + var presult = new Array(); + var tresult = new Array(); + var mresult = new Array(); + var tgresult = new Array(); + var secondaryresult = new Array(); + var displayCount = 0; + var exactMatcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(request.term) + "$", "i"); + camelCaseRegexp = ($.ui.autocomplete.escapeRegex(request.term)).split(/(?=[A-Z])/).join("([a-z0-9_$]*?)"); + var camelCaseMatcher = new RegExp("^" + camelCaseRegexp); + secondaryMatcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i"); + + // Return the nested innermost name from the specified object + function nestedName(e) { + return e.l.substring(e.l.lastIndexOf(".") + 1); + } + + function concatResults(a1, a2) { + a1 = a1.concat(a2); + a2.length = 0; + return a1; + } + + if (moduleSearchIndex) { + var mdleCount = 0; + $.each(moduleSearchIndex, function(index, item) { + item.category = catModules; + if (exactMatcher.test(item.l)) { + result.push(item); + mdleCount++; + } else if (camelCaseMatcher.test(item.l)) { + result.push(item); + } else if (secondaryMatcher.test(item.l)) { + secondaryresult.push(item); + } + }); + displayCount = mdleCount; + result = concatResults(result, secondaryresult); + } + if (packageSearchIndex) { + var pCount = 0; + var pkg = ""; + $.each(packageSearchIndex, function(index, item) { + item.category = catPackages; + pkg = (item.m) + ? (item.m + "/" + item.l) + : item.l; + if (exactMatcher.test(item.l)) { + presult.push(item); + pCount++; + } else if (camelCaseMatcher.test(pkg)) { + presult.push(item); + } else if (secondaryMatcher.test(pkg)) { + secondaryresult.push(item); + } + }); + result = result.concat(concatResults(presult, secondaryresult)); + displayCount = (pCount > displayCount) ? pCount : displayCount; + } + if (typeSearchIndex) { + var tCount = 0; + $.each(typeSearchIndex, function(index, item) { + item.category = catTypes; + var s = nestedName(item); + if (exactMatcher.test(s)) { + tresult.push(item); + tCount++; + } else if (camelCaseMatcher.test(s)) { + tresult.push(item); + } else if (secondaryMatcher.test(item.p + "." + item.l)) { + secondaryresult.push(item); + } + }); + result = result.concat(concatResults(tresult, secondaryresult)); + displayCount = (tCount > displayCount) ? tCount : displayCount; + } + if (memberSearchIndex) { + var mCount = 0; + $.each(memberSearchIndex, function(index, item) { + item.category = catMembers; + var s = nestedName(item); + if (exactMatcher.test(s)) { + mresult.push(item); + mCount++; + } else if (camelCaseMatcher.test(s)) { + mresult.push(item); + } else if (secondaryMatcher.test(item.c + "." + item.l)) { + secondaryresult.push(item); + } + }); + result = result.concat(concatResults(mresult, secondaryresult)); + displayCount = (mCount > displayCount) ? mCount : displayCount; + } + if (tagSearchIndex) { + var tgCount = 0; + $.each(tagSearchIndex, function(index, item) { + item.category = catSearchTags; + if (exactMatcher.test(item.l)) { + tgresult.push(item); + tgCount++; + } else if (secondaryMatcher.test(item.l)) { + secondaryresult.push(item); + } + }); + result = result.concat(concatResults(tgresult, secondaryresult)); + displayCount = (tgCount > displayCount) ? tgCount : displayCount; + } + displayCount = (displayCount > 500) ? displayCount : 500; + var counter = function() { + var count = {Modules: 0, Packages: 0, Types: 0, Members: 0, SearchTags: 0}; + var f = function(item) { + count[item.category] += 1; + return (count[item.category] <= displayCount); + }; + return f; + }(); + response(result.filter(counter)); + }, + response: function(event, ui) { + if (!ui.content.length) { + ui.content.push(noResult); + } else { + $("#search").empty(); + } + }, + autoFocus: true, + position: { + collision: "flip" + }, + select: function(event, ui) { + if (ui.item.l !== noResult.l) { + var url = getURLPrefix(ui); + if (ui.item.category === catModules) { + if (useModuleDirectories) { + url += "module-summary.html"; + } else { + url = ui.item.l + "-summary.html"; + } + } else if (ui.item.category === catPackages) { + if (ui.item.url) { + url = ui.item.url; + } else { + url += ui.item.l.replace(/\./g, '/') + "/package-summary.html"; + } + } else if (ui.item.category === catTypes) { + if (ui.item.url) { + url = ui.item.url; + } else if (ui.item.p === "") { + url += ui.item.l + ".html"; + } else { + url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.l + ".html"; + } + } else if (ui.item.category === catMembers) { + if (ui.item.p === "") { + url += ui.item.c + ".html" + "#"; + } else { + url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.c + ".html" + "#"; + } + if (ui.item.url) { + url += ui.item.url; + } else { + url += ui.item.l; + } + } else if (ui.item.category === catSearchTags) { + url += ui.item.u; + } + if (top !== window) { + parent.classFrame.location = pathtoroot + url; + } else { + window.location.href = pathtoroot + url; + } + } + } + }); +}); diff --git a/doc/0.1.4/de_private/stylesheet.css b/doc/0.1.4/de_private/stylesheet.css new file mode 100644 index 0000000..fa24676 --- /dev/null +++ b/doc/0.1.4/de_private/stylesheet.css @@ -0,0 +1,906 @@ +/* + * Javadoc style sheet + */ + +@import url('resources/fonts/dejavu.css'); + +/* + * Styles for individual HTML elements. + * + * These are styles that are specific to individual HTML elements. Changing them affects the style of a particular + * HTML element throughout the page. + */ + +body { + background-color:#ffffff; + color:#353833; + font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size:14px; + margin:0; + padding:0; + height:100%; + width:100%; +} +iframe { + margin:0; + padding:0; + height:100%; + width:100%; + overflow-y:scroll; + border:none; +} +a:link, a:visited { + text-decoration:none; + color:#4A6782; +} +a[href]:hover, a[href]:focus { + text-decoration:none; + color:#bb7a2a; +} +a[name] { + color:#353833; +} +a[name]:before, a[name]:target, a[id]:before, a[id]:target { + content:""; + display:inline-block; + position:relative; + padding-top:129px; + margin-top:-129px; +} +pre { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; +} +h1 { + font-size:20px; +} +h2 { + font-size:18px; +} +h3 { + font-size:16px; + font-style:italic; +} +h4 { + font-size:13px; +} +h5 { + font-size:12px; +} +h6 { + font-size:11px; +} +ul { + list-style-type:disc; +} +code, tt { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; + margin-top:8px; + line-height:1.4em; +} +dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; +} +table tr td dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + vertical-align:top; + padding-top:4px; +} +sup { + font-size:8px; +} + +/* + * Styles for HTML generated by javadoc. + * + * These are style classes that are used by the standard doclet to generate HTML documentation. + */ + +/* + * Styles for document title and copyright. + */ +.clear { + clear:both; + height:0px; + overflow:hidden; +} +.aboutLanguage { + float:right; + padding:0px 21px; + font-size:11px; + z-index:200; + margin-top:-9px; +} +.legalCopy { + margin-left:.5em; +} +.bar a, .bar a:link, .bar a:visited, .bar a:active { + color:#FFFFFF; + text-decoration:none; +} +.bar a:hover, .bar a:focus { + color:#bb7a2a; +} +.tab { + background-color:#0066FF; + color:#ffffff; + padding:8px; + width:5em; + font-weight:bold; +} +/* + * Styles for navigation bar. + */ +.bar { + background-color:#4D7A97; + color:#FFFFFF; + padding:.8em .5em .4em .8em; + height:auto;/*height:1.8em;*/ + font-size:11px; + margin:0; +} +.navPadding { + padding-top: 107px; +} +.fixedNav { + position:fixed; + width:100%; + z-index:999; + background-color:#ffffff; +} +.topNav { + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.bottomNav { + margin-top:10px; + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.subNav { + background-color:#dee3e9; + float:left; + width:100%; + overflow:hidden; + font-size:12px; +} +.subNav div { + clear:left; + float:left; + padding:0 0 5px 6px; + text-transform:uppercase; +} +ul.navList, ul.subNavList { + float:left; + margin:0 25px 0 0; + padding:0; +} +ul.navList li{ + list-style:none; + float:left; + padding: 5px 6px; + text-transform:uppercase; +} +ul.navListSearch { + float:right; + margin:0 0 0 0; + padding:0; +} +ul.navListSearch li { + list-style:none; + float:right; + padding: 5px 6px; + text-transform:uppercase; +} +ul.navListSearch li label { + position:relative; + right:-16px; +} +ul.subNavList li { + list-style:none; + float:left; +} +.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited { + color:#FFFFFF; + text-decoration:none; + text-transform:uppercase; +} +.topNav a:hover, .bottomNav a:hover { + text-decoration:none; + color:#bb7a2a; + text-transform:uppercase; +} +.navBarCell1Rev { + background-color:#F8981D; + color:#253441; + margin: auto 5px; +} +.skipNav { + position:absolute; + top:auto; + left:-9999px; + overflow:hidden; +} +/* + * Styles for page header and footer. + */ +.header, .footer { + clear:both; + margin:0 20px; + padding:5px 0 0 0; +} +.indexNav { + position:relative; + font-size:12px; + background-color:#dee3e9; +} +.indexNav ul { + margin-top:0; + padding:5px; +} +.indexNav ul li { + display:inline; + list-style-type:none; + padding-right:10px; + text-transform:uppercase; +} +.indexNav h1 { + font-size:13px; +} +.title { + color:#2c4557; + margin:10px 0; +} +.subTitle { + margin:5px 0 0 0; +} +.header ul { + margin:0 0 15px 0; + padding:0; +} +.footer ul { + margin:20px 0 5px 0; +} +.header ul li, .footer ul li { + list-style:none; + font-size:13px; +} +/* + * Styles for headings. + */ +div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList li.blockList h3 { + padding:0; + margin:15px 0; +} +ul.blockList li.blockList h2 { + padding:0px 0 20px 0; +} +/* + * Styles for page layout containers. + */ +.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer, +.allClassesContainer, .allPackagesContainer { + clear:both; + padding:10px 20px; + position:relative; +} +.indexContainer { + margin:10px; + position:relative; + font-size:12px; +} +.indexContainer h2 { + font-size:13px; + padding:0 0 3px 0; +} +.indexContainer ul { + margin:0; + padding:0; +} +.indexContainer ul li { + list-style:none; + padding-top:2px; +} +.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt { + font-size:12px; + font-weight:bold; + margin:10px 0 0 0; + color:#4E4E4E; +} +.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd { + margin:5px 0 10px 0px; + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} +.serializedFormContainer dl.nameValue dt { + margin-left:1px; + font-size:1.1em; + display:inline; + font-weight:bold; +} +.serializedFormContainer dl.nameValue dd { + margin:0 0 0 1px; + font-size:1.1em; + display:inline; +} +/* + * Styles for lists. + */ +li.circle { + list-style:circle; +} +ul.horizontal li { + display:inline; + font-size:0.9em; +} +ul.inheritance { + margin:0; + padding:0; +} +ul.inheritance li { + display:inline; + list-style:none; +} +ul.inheritance li ul.inheritance { + margin-left:15px; + padding-left:15px; + padding-top:1px; +} +ul.blockList, ul.blockListLast { + margin:10px 0 10px 0; + padding:0; +} +ul.blockList li.blockList, ul.blockListLast li.blockList { + list-style:none; + margin-bottom:15px; + line-height:1.4; +} +ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList { + padding:0px 20px 5px 10px; + border:1px solid #ededed; + background-color:#f8f8f8; +} +ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList { + padding:0 0 5px 8px; + background-color:#ffffff; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockList { + margin-left:0; + padding-left:0; + padding-bottom:15px; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast { + list-style:none; + border-bottom:none; + padding-bottom:0; +} +table tr td dl, table tr td dl dt, table tr td dl dd { + margin-top:0; + margin-bottom:1px; +} +/* + * Styles for tables. + */ +.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary, +.requiresSummary, .packagesSummary, .providesSummary, .usesSummary { + width:100%; + border-spacing:0; + border-left:1px solid #EEE; + border-right:1px solid #EEE; + border-bottom:1px solid #EEE; +} +.overviewSummary, .memberSummary, .requiresSummary, .packagesSummary, .providesSummary, .usesSummary { + padding:0px; +} +.overviewSummary caption, .memberSummary caption, .typeSummary caption, +.useSummary caption, .constantsSummary caption, .deprecatedSummary caption, +.requiresSummary caption, .packagesSummary caption, .providesSummary caption, .usesSummary caption { + position:relative; + text-align:left; + background-repeat:no-repeat; + color:#253441; + font-weight:bold; + clear:none; + overflow:hidden; + padding:0px; + padding-top:10px; + padding-left:1px; + margin:0px; + white-space:pre; +} +.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link, +.constantsSummary caption a:link, .deprecatedSummary caption a:link, +.requiresSummary caption a:link, .packagesSummary caption a:link, .providesSummary caption a:link, +.usesSummary caption a:link, +.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover, +.constantsSummary caption a:hover, .deprecatedSummary caption a:hover, +.requiresSummary caption a:hover, .packagesSummary caption a:hover, .providesSummary caption a:hover, +.usesSummary caption a:hover, +.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active, +.constantsSummary caption a:active, .deprecatedSummary caption a:active, +.requiresSummary caption a:active, .packagesSummary caption a:active, .providesSummary caption a:active, +.usesSummary caption a:active, +.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited, +.constantsSummary caption a:visited, .deprecatedSummary caption a:visited, +.requiresSummary caption a:visited, .packagesSummary caption a:visited, .providesSummary caption a:visited, +.usesSummary caption a:visited { + color:#FFFFFF; +} +.useSummary caption a:link, .useSummary caption a:hover, .useSummary caption a:active, +.useSummary caption a:visited { + color:#1f389c; +} +.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span, +.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span, +.requiresSummary caption span, .packagesSummary caption span, .providesSummary caption span, +.usesSummary caption span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + padding-bottom:7px; + display:inline-block; + float:left; + background-color:#F8981D; + border: none; + height:16px; +} +.memberSummary caption span.activeTableTab span, .packagesSummary caption span.activeTableTab span, +.overviewSummary caption span.activeTableTab span, .typeSummary caption span.activeTableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#F8981D; + height:16px; +} +.memberSummary caption span.tableTab span, .packagesSummary caption span.tableTab span, +.overviewSummary caption span.tableTab span, .typeSummary caption span.tableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#4D7A97; + height:16px; +} +.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab, +.packagesSummary caption span.tableTab, .packagesSummary caption span.activeTableTab, +.overviewSummary caption span.tableTab, .overviewSummary caption span.activeTableTab, +.typeSummary caption span.tableTab, .typeSummary caption span.activeTableTab { + padding-top:0px; + padding-left:0px; + padding-right:0px; + background-image:none; + float:none; + display:inline; +} +.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd, +.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd, +.requiresSummary .tabEnd, .packagesSummary .tabEnd, .providesSummary .tabEnd, .usesSummary .tabEnd { + display:none; + width:5px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .activeTableTab .tabEnd, .packagesSummary .activeTableTab .tabEnd, +.overviewSummary .activeTableTab .tabEnd, .typeSummary .activeTableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .tableTab .tabEnd, .packagesSummary .tableTab .tabEnd, +.overviewSummary .tableTab .tabEnd, .typeSummary .tableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + background-color:#4D7A97; + float:left; +} +.rowColor th, .altColor th { + font-weight:normal; +} +.overviewSummary td, .memberSummary td, .typeSummary td, +.useSummary td, .constantsSummary td, .deprecatedSummary td, +.requiresSummary td, .packagesSummary td, .providesSummary td, .usesSummary td { + text-align:left; + padding:0px 0px 12px 10px; +} +th.colFirst, th.colSecond, th.colLast, th.colConstructorName, th.colDeprecatedItemName, .useSummary th, +.constantsSummary th, .packagesSummary th, td.colFirst, td.colSecond, td.colLast, .useSummary td, +.constantsSummary td { + vertical-align:top; + padding-right:0px; + padding-top:8px; + padding-bottom:3px; +} +th.colFirst, th.colSecond, th.colLast, th.colConstructorName, th.colDeprecatedItemName, .constantsSummary th, +.packagesSummary th { + background:#dee3e9; + text-align:left; + padding:8px 3px 3px 7px; +} +td.colFirst, th.colFirst { + font-size:13px; +} +td.colSecond, th.colSecond, td.colLast, th.colConstructorName, th.colDeprecatedItemName, th.colLast { + font-size:13px; +} +.constantsSummary th, .packagesSummary th { + font-size:13px; +} +.providesSummary th.colFirst, .providesSummary th.colLast, .providesSummary td.colFirst, +.providesSummary td.colLast { + white-space:normal; + font-size:13px; +} +.overviewSummary td.colFirst, .overviewSummary th.colFirst, +.requiresSummary td.colFirst, .requiresSummary th.colFirst, +.packagesSummary td.colFirst, .packagesSummary td.colSecond, .packagesSummary th.colFirst, .packagesSummary th, +.usesSummary td.colFirst, .usesSummary th.colFirst, +.providesSummary td.colFirst, .providesSummary th.colFirst, +.memberSummary td.colFirst, .memberSummary th.colFirst, +.memberSummary td.colSecond, .memberSummary th.colSecond, .memberSummary th.colConstructorName, +.typeSummary td.colFirst, .typeSummary th.colFirst { + vertical-align:top; +} +.packagesSummary th.colLast, .packagesSummary td.colLast { + white-space:normal; +} +td.colFirst a:link, td.colFirst a:visited, +td.colSecond a:link, td.colSecond a:visited, +th.colFirst a:link, th.colFirst a:visited, +th.colSecond a:link, th.colSecond a:visited, +th.colConstructorName a:link, th.colConstructorName a:visited, +th.colDeprecatedItemName a:link, th.colDeprecatedItemName a:visited, +.constantValuesContainer td a:link, .constantValuesContainer td a:visited, +.allClassesContainer td a:link, .allClassesContainer td a:visited, +.allPackagesContainer td a:link, .allPackagesContainer td a:visited { + font-weight:bold; +} +.tableSubHeadingColor { + background-color:#EEEEFF; +} +.altColor, .altColor th { + background-color:#FFFFFF; +} +.rowColor, .rowColor th { + background-color:#EEEEEF; +} +/* + * Styles for contents. + */ +.description pre { + margin-top:0; +} +.deprecatedContent { + margin:0; + padding:10px 0; +} +.docSummary { + padding:0; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + font-style:normal; +} +div.block { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} +td.colLast div { + padding-top:0px; +} +td.colLast a { + padding-bottom:3px; +} +/* + * Styles for formatting effect. + */ +.sourceLineNo { + color:green; + padding:0 30px 0 0; +} +h1.hidden { + visibility:hidden; + overflow:hidden; + font-size:10px; +} +.block { + display:block; + margin:3px 10px 2px 0px; + color:#474747; +} +.deprecatedLabel, .descfrmTypeLabel, .implementationLabel, .memberNameLabel, .memberNameLink, +.moduleLabelInPackage, .moduleLabelInType, .overrideSpecifyLabel, .packageLabelInType, +.packageHierarchyLabel, .paramLabel, .returnLabel, .seeLabel, .simpleTagLabel, +.throwsLabel, .typeNameLabel, .typeNameLink, .searchTagLink { + font-weight:bold; +} +.deprecationComment, .emphasizedPhrase, .interfaceName { + font-style:italic; +} +.deprecationBlock { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; + border-style:solid; + border-width:thin; + border-radius:10px; + padding:10px; + margin-bottom:10px; + margin-right:10px; + display:inline-block; +} +div.block div.deprecationComment, div.block div.block span.emphasizedPhrase, +div.block div.block span.interfaceName { + font-style:normal; +} +div.contentContainer ul.blockList li.blockList h2 { + padding-bottom:0px; +} +/* + * Styles for IFRAME. + */ +.mainContainer { + margin:0 auto; + padding:0; + height:100%; + width:100%; + position:fixed; + top:0; + left:0; +} +.leftContainer { + height:100%; + position:fixed; + width:320px; +} +.leftTop { + position:relative; + float:left; + width:315px; + top:0; + left:0; + height:30%; + border-right:6px solid #ccc; + border-bottom:6px solid #ccc; +} +.leftBottom { + position:relative; + float:left; + width:315px; + bottom:0; + left:0; + height:70%; + border-right:6px solid #ccc; + border-top:1px solid #000; +} +.rightContainer { + position:absolute; + left:320px; + top:0; + bottom:0; + height:100%; + right:0; + border-left:1px solid #000; +} +.rightIframe { + margin:0; + padding:0; + height:100%; + right:30px; + width:100%; + overflow:visible; + margin-bottom:30px; +} +/* + * Styles specific to HTML5 elements. + */ +main, nav, header, footer, section { + display:block; +} +/* + * Styles for javadoc search. + */ +.ui-autocomplete-category { + font-weight:bold; + font-size:15px; + padding:7px 0 7px 3px; + background-color:#4D7A97; + color:#FFFFFF; +} +.resultItem { + font-size:13px; +} +.ui-autocomplete { + max-height:85%; + max-width:65%; + overflow-y:scroll; + overflow-x:scroll; + white-space:nowrap; + box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); +} +ul.ui-autocomplete { + position:fixed; + z-index:999999; +} +ul.ui-autocomplete li { + float:left; + clear:both; + width:100%; +} +.resultHighlight { + font-weight:bold; +} +#search { + background-image:url('resources/glass.png'); + background-size:13px; + background-repeat:no-repeat; + background-position:2px 3px; + padding-left:20px; + position:relative; + right:-18px; +} +#reset { + background-color: rgb(255,255,255); + background-image:url('resources/x.png'); + background-position:center; + background-repeat:no-repeat; + background-size:12px; + border:0 none; + width:16px; + height:17px; + position:relative; + left:-4px; + top:-4px; + font-size:0px; +} +.watermark { + color:#545454; +} +.searchTagDescResult { + font-style:italic; + font-size:11px; +} +.searchTagHolderResult { + font-style:italic; + font-size:12px; +} +.searchTagResult:before, .searchTagResult:target { + color:red; +} +.moduleGraph span { + display:none; + position:absolute; +} +.moduleGraph:hover span { + display:block; + margin: -100px 0 0 100px; + z-index: 1; +} +.methodSignature { + white-space:normal; +} + +/* + * Styles for user-provided tables. + * + * borderless: + * No borders, vertical margins, styled caption. + * This style is provided for use with existing doc comments. + * In general, borderless tables should not be used for layout purposes. + * + * plain: + * Plain borders around table and cells, vertical margins, styled caption. + * Best for small tables or for complex tables for tables with cells that span + * rows and columns, when the "striped" style does not work well. + * + * striped: + * Borders around the table and vertical borders between cells, striped rows, + * vertical margins, styled caption. + * Best for tables that have a header row, and a body containing a series of simple rows. + */ + +table.borderless, +table.plain, +table.striped { + margin-top: 10px; + margin-bottom: 10px; +} +table.borderless > caption, +table.plain > caption, +table.striped > caption { + font-weight: bold; + font-size: smaller; +} +table.borderless th, table.borderless td, +table.plain th, table.plain td, +table.striped th, table.striped td { + padding: 2px 5px; +} +table.borderless, +table.borderless > thead > tr > th, table.borderless > tbody > tr > th, table.borderless > tr > th, +table.borderless > thead > tr > td, table.borderless > tbody > tr > td, table.borderless > tr > td { + border: none; +} +table.borderless > thead > tr, table.borderless > tbody > tr, table.borderless > tr { + background-color: transparent; +} +table.plain { + border-collapse: collapse; + border: 1px solid black; +} +table.plain > thead > tr, table.plain > tbody tr, table.plain > tr { + background-color: transparent; +} +table.plain > thead > tr > th, table.plain > tbody > tr > th, table.plain > tr > th, +table.plain > thead > tr > td, table.plain > tbody > tr > td, table.plain > tr > td { + border: 1px solid black; +} +table.striped { + border-collapse: collapse; + border: 1px solid black; +} +table.striped > thead { + background-color: #E3E3E3; +} +table.striped > thead > tr > th, table.striped > thead > tr > td { + border: 1px solid black; +} +table.striped > tbody > tr:nth-child(even) { + background-color: #EEE +} +table.striped > tbody > tr:nth-child(odd) { + background-color: #FFF +} +table.striped > tbody > tr > th, table.striped > tbody > tr > td { + border-left: 1px solid black; + border-right: 1px solid black; +} +table.striped > tbody > tr > th { + font-weight: normal; +} diff --git a/doc/0.1.4/de_private/type-search-index.js b/doc/0.1.4/de_private/type-search-index.js new file mode 100644 index 0000000..feeb60f --- /dev/null +++ b/doc/0.1.4/de_private/type-search-index.js @@ -0,0 +1 @@ +typeSearchIndex = [{"l":"All Classes","url":"allclasses-index.html"},{"p":"bitchanger.gui.views","l":"AlphaNumGridView"},{"p":"bitchanger.gui.controls","l":"AlphaNumKeys"},{"p":"bitchanger.gui.controller","l":"AlphaNumKeysController"},{"p":"bitchanger.util","l":"ArrayUtils"},{"p":"bitchanger.gui.controls","l":"BaseSpinner"},{"p":"bitchanger.gui.controls","l":"BasicMenuBar"},{"p":"bitchanger.gui.controller","l":"BasicMenuController"},{"p":"bitchanger.main","l":"BitchangerLauncher"},{"p":"bitchanger.calculations","l":"Calculable"},{"p":"bitchanger.gui.views","l":"CalculatorView"},{"p":"bitchanger.calculations","l":"ChangeableNumber"},{"p":"bitchanger.preferences","l":"Comma"},{"p":"bitchanger.gui.views","l":"AlphaNumGridView.ConstraintType"},{"p":"bitchanger.gui.controller","l":"Controllable"},{"p":"bitchanger.gui.controller","l":"ControllableApplication"},{"p":"bitchanger.gui.controller","l":"Controller"},{"p":"bitchanger.gui.controller","l":"ControllerBase"},{"p":"bitchanger.gui.controller","l":"ConverterController"},{"p":"bitchanger.gui.controls","l":"ConverterMenuBar"},{"p":"bitchanger.gui.controller","l":"ConverterMenuController"},{"p":"bitchanger.gui.views","l":"ConverterView"},{"p":"bitchanger.calculations","l":"ConvertingNumbers"},{"p":"bitchanger.util","l":"FXUtils"},{"p":"bitchanger.util","l":"IconFactory"},{"p":"bitchanger.gui.controller","l":"IEEEController"},{"p":"bitchanger.gui.controller","l":"IEEEMenuController"},{"p":"bitchanger.gui.views","l":"IEEEView"},{"p":"bitchanger.gui.controls","l":"InformationDialog"},{"p":"bitchanger.gui.controls","l":"InformationDialog.InformationType"},{"p":"bitchanger.preferences","l":"Preferences"},{"p":"bitchanger.main","l":"PrimaryFXApp"},{"p":"bitchanger.util","l":"Resources"},{"p":"bitchanger.calculations","l":"SimpleChangeableNumber"},{"p":"bitchanger.preferences","l":"Style"},{"p":"bitchanger.gui.controls","l":"SVGIcon"},{"p":"bitchanger.util","l":"TriConsumer"},{"p":"bitchanger.gui.controls","l":"UnfocusedButton"},{"p":"bitchanger.gui.controls","l":"ValueButton"},{"p":"bitchanger.gui.controls","l":"ValueField"},{"p":"bitchanger.gui.views","l":"Viewable"},{"p":"bitchanger.gui.views","l":"ViewBase"}] \ No newline at end of file diff --git a/doc/0.1.4/de_private/type-search-index.zip b/doc/0.1.4/de_private/type-search-index.zip new file mode 100644 index 0000000000000000000000000000000000000000..b5016fd447f6c25808a15e29019bb6c24d8d11e9 GIT binary patch literal 592 zcmWIWW@Zs#;Nak3*tS$6kO2vZ0of&$1*y8lsfk6&8M>KyDXA5DS;hHzbEn?+J8Zzy z7SH-s>KDVEjT;wsHVY&R3q4XgeJ1Usr?$FeNJqJPlIzbI?}eaW;ohI=p5xp2PEyoaJ4ULQZT zbw}~5u0qT2-^|>^ZWTG!Z_Hld!=(6t!{m=;&x3PHrUIK+r2Vsgx|}mtfyc-Diq*f8 zIS!TFw|HH+etM>{%bs)Lyu!P2^F5B`Pp$Yo94}4W5b;87Ut(^QK*`G&-*cl2qV1FQ zwz(f{eScm_F7o6DE}p1EeOgn5j<3-9?rJ=(Hup_(=(c5F*T3*x%YXHeLP_AXmZI5J z`F1OpO9)-L!G4<|`oTH9v+Z9#2GnDL76t>+dw?=}DXc=@%9_jj9q z%_&r7sYdj-98k%XhBk`&h+<@x7gnPkGTInl5hQ% zYB$v#QuaT0dVP7p=<{&L(~})R%T{P64A z_2)J|JrFtjjv241_>%?phHeW|#TD5E%l=Mm+5Pob)la4XZ+4E8wWevC7#SF + + + + +All Classes + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    All Classes

    +
    +
    +
      +
    • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Classes Interface Summary Class Summary Enum Summary 
      ClassDescription
      AlphaNumGridView +
      View, die die Basis Scene für eine Tabelle aus einer Spalte mit Labels, einer Spalte mit Textfeldern + und einer Tastaturmatrix aus AlphaNumKeys erstellt.
      +
      AlphaNumGridView.ConstraintType +
      Aufzählung von möglichen Typen für Constraints einer GridPane
      +
      AlphaNumKeys +
      AlphaNumKeys stellt ein Tastaturlayout als 4x5 Matrix bereit.
      +
      AlphaNumKeysController +
      Dieser Controller gibt den Bedienelementen einer Instanz von AlphaNumKeys eine Funktion und bindet die Simulation der + Tastatur an die gekapselte Scene.
      +
      ArrayUtils +
      Klasse, die Werkzeug-Methoden für Arrays enthält.
      +
      BaseSpinner +
      Spinner, mit dem die Basis für ein Zahlensystem ausgewählt werden kann.
      +
      BasicMenuBar +
      Basis Menüleiste, die die allgemein benötigten Menüpunkte enthält.
      +
      BasicMenuController 
      BitchangerLauncher +
      Diese Klasse enthält die Main-Methode, die der Einstiegspunkt für die Applikation ist.
      +
      Calculable 
      CalculatorView 
      ChangeableNumber +
      Schnittstelle, die Methoden definiert, um eine Zahl aus einem beliebigen Zahlensystem + in beliebige andere Zahlensysteme umzuwandeln
      +
      Comma +
      Aufzählung der Wrapper-Klasse Comma, die das Zeichen für ein Komma repräsentiert.
      +
      Controllable +
      Schnittstelle, die Methoden definiert, um eine View mit einem Controller zu verbinden.
      +
      ControllableApplication +
      Schnittstelle, die Methoden definiert, um eine Application mit einem Controller zu verbinden.
      +
      Controller +
      Schnittstelle, die einen Controller beschreibt.
      +
      ControllerBase<T extends Controllable> +
      Basis für einen Controller, der einer Instanz von Controllable (z.B. eine View) eine Funktion gibt.
      +
      ConverterController +
      Controller, der die Funktion für eine ConverterView bereitstellt.
      +
      ConverterMenuBar 
      ConverterMenuController 
      ConverterView +
      View, die die Scene für die Umwandlung von Zahlensystemen enthält.
      +
      ConvertingNumbers +
      Die Klasse ConvertingNumbers enthält Methoden zum Umwandeln von Zahlen mit verschiedenen Zahlensystemen.
      +
      FXUtils +
      Utility-Klasse zur allgemeinen Verarbeitung von Objekten, die zur Oberfläche gehören.
      +
      IconFactory +
      Factory Klasse für das Erstellen von SVGIcons
      +
      IEEEController 
      IEEEMenuController 
      IEEEView +
      View, die die Scene für die Umwandlung zwischen dezimal Zahlen und der IEEE-Norm enthält.
      +
      InformationDialog 
      InformationDialog.InformationType 
      Preferences +
      Preferences ist die globale Sammlung für alle möglichen Einstellungen, die am Bitchanger vorgenommen + werden können.
      +
      PrimaryFXApp +
      Hauptfenster der Applikation mit javaFX
      +
      Resources +
      Enthält alle benötigten Ressourcen, wie Pfade zu den CSS Dateien oder den Icons
      +
      SimpleChangeableNumber +
      Die Klasse SimpleChangeableNumber bietet eine vollständige Implementierung von ChangeableNumber.
      +
      Style +
      Aufzählung für verschiedene Stile, die als CSS Datei für javaFX verfügbar sind
      +
      SVGIcon 
      TriConsumer<T,​U,​V> +
      Repräsentiert eine Operation, die drei Übergabeparameter akzeptiert und keine Rückgabe hat.
      +
      UnfocusedButton +
      Button, der beim Klick nicht den Fokus erhält und als Grundform ein Rechteck ohne abgerundete Ecken besitzt.
      +
      ValueButton +
      UnfocusedButton mit einer zusätzlichen Property für die Einstellung einer Basis.
      +
      ValueField +
      TextFeld, in dem eine Zahl zu einem bestimmten Zahlensystem eingegeben werden kann.
      +
      Viewable +
      Die Schnittstelle Viewable definiert die Basis für eine View.
      +
      ViewBase<T extends javafx.scene.Parent> +
      Basis-Klasse für alle View-Klassen, die das Interface Viewable implementieren und mit einem + Controller eine Funktion erhalten.
      +
      +
    • +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/allclasses.html b/doc/0.1.4/de_public/allclasses.html new file mode 100644 index 0000000..4fc1c8b --- /dev/null +++ b/doc/0.1.4/de_public/allclasses.html @@ -0,0 +1,69 @@ + + + + + +All Classes + + + + + + + + + + + + + +

    All Classes

    +
    + +
    + + diff --git a/doc/0.1.4/de_public/allpackages-index.html b/doc/0.1.4/de_public/allpackages-index.html new file mode 100644 index 0000000..8e93a2a --- /dev/null +++ b/doc/0.1.4/de_public/allpackages-index.html @@ -0,0 +1,205 @@ + + + + + +All Packages + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    All Packages

    +
    +
    +
      +
    • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Package Summary 
      PackageDescription
      bitchanger.calculations +
      Bietet alle Klassen, die zur Berechnung der Daten benötigt werden.
      +
      bitchanger.gui.controller +
      Stellt Controller bereit, die den Views eine Funktion geben.
      +
      bitchanger.gui.controls +
      Stellt angepasste Bedienelemente und Funktionen für die Benutzeroberfläche zur Verfügung
      +
      bitchanger.gui.views +
      Bietet verschiedene Views, die auf einer graphischen Oberfläche präsentiert werden können
      +
      bitchanger.main +
      Beinhaltet den Launcher mit der Main-Methode und die JavaFX Applikation zum starten der grafischen Oberfläche.
      +
      bitchanger.preferences +
      Mit den Klassen aus diesem Package können alle Komponenten auf globale Einstellungen zugreifen und diese verändern.
      +
      bitchanger.util +
      Enthält Klassen mit allgemeinen und klassenübergreifend benötigten Methoden.
      +
      +
    • +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/bitchanger/BitchangerLauncherApp.html b/doc/0.1.4/de_public/bitchanger/BitchangerLauncherApp.html new file mode 100644 index 0000000..1fcf3b3 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/BitchangerLauncherApp.html @@ -0,0 +1,327 @@ + + + + + +BitchangerLauncherApp + + + + + + + + + + + + + + + +
    + +
    + +
    +
    +
    Package bitchanger
    +

    Class BitchangerLauncherApp

    +
    +
    + +
    +
      +
    • +
      +
      public class BitchangerLauncherApp
      +extends Object
      +
      Diese Klasse enthält die Main-Methode, die der Einstiegspunkt für die Applikation ist.
      +
      +
      Since:
      +
      0.1.0
      +
      Version:
      +
      0.1.0
      +
      Author:
      +
      Tim Mühle
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          BitchangerLauncherApp

          +
          public BitchangerLauncherApp()
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          main

          +
          public static void main​(String[] args)
          +
          Die Main Methode liest zuerst alle gespeicherten Einstellungen für die Klasse Preferences ein. + Danach wird das Hauptfenster der Anwendung gestartet und gewartet, bis dieses geschlossen wurde.
          +
          +
          Parameters:
          +
          args - Argumente, die beim Programmstart übergeben werden. Die Argumente werden vom Programm ignoriert.
          +
          See Also:
          +
          Preferences, +Hauptfenster.main(String[])
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/calculations/Calculable.html b/doc/0.1.4/de_public/bitchanger/calculations/Calculable.html new file mode 100644 index 0000000..88e0545 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/calculations/Calculable.html @@ -0,0 +1,191 @@ + + + + + +Calculable + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface Calculable

    +
    +
    +
    +
      +
    • +
      +
      public interface Calculable
      +
    • +
    +
    +
    +
    + +
    + +
    + + diff --git a/doc/0.1.4/de_public/bitchanger/calculations/ChangeableNumber.html b/doc/0.1.4/de_public/bitchanger/calculations/ChangeableNumber.html new file mode 100644 index 0000000..c307a7d --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/calculations/ChangeableNumber.html @@ -0,0 +1,565 @@ + + + + + +ChangeableNumber + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface ChangeableNumber

    +
    +
    +
    +
      +
    • +
      +
      All Known Implementing Classes:
      +
      SimpleChangeableNumber
      +
      +
      +
      public interface ChangeableNumber
      +
      Schnittstelle, die Methoden definiert, um eine Zahl aus einem beliebigen Zahlensystem + in beliebige andere Zahlensysteme umzuwandeln
      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Abstract Methods Default Methods 
        Modifier and TypeMethodDescription
        default doubleasDouble() 
        voidreset() +
        Setzt den eingeschlossenen Wert zurück.
        +
        default voidset​(double decValue) 
        voidsetBin​(String binValue) +
        Setzt den Wert dieser ChangeableNumber auf den Wert eines binären Strings
        +
        voidsetDec​(String decValue) +
        Setzt den Wert dieser ChangeableNumber auf den Wert eines dezimalen Strings
        +
        voidsetHex​(String hexValue) +
        Setzt den Wert dieser ChangeableNumber auf den Wert eines hexadezimalen Strings
        +
        voidsetOct​(String octValue) +
        Setzt den Wert dieser ChangeableNumber auf den Wert eines oktalen Strings
        +
        voidsetValue​(String value, + int baseOfValue) +
        Setzt den Wert dieser ChangeableNumber auf einen Wert in einem beliebigen Zahlensystem
        +
        StringtoBaseString​(int base) +
        Gibt die String-Darstellung dieser ChangeableNumber zu einer beliebigen Basis zurück.
        +
        StringtoBinString() +
        Gibt die String-Darstellung dieser ChangeableNumber als binären String zurück.
        +
        StringtoDecString() +
        Gibt die String-Darstellung dieser ChangeableNumber als dezimalen String zurück.
        +
        StringtoHexString() +
        Gibt die String-Darstellung dieser ChangeableNumber als hexadezimalen String zurück.
        +
        StringtoOctString() +
        Gibt die String-Darstellung dieser ChangeableNumber als oktalen String zurück.
        +
        +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          asDouble

          +
          default double asDouble()
          +
        • +
        + + + +
          +
        • +

          set

          +
          default void set​(double decValue)
          +
        • +
        + + + + + + + + + + + + + + + + + + + + + + + +
          +
        • +

          reset

          +
          void reset()
          +
          Setzt den eingeschlossenen Wert zurück. Der vorherige Wert wird gelöscht! Wird nach dieser Methode + eine der toString-Methoden aufgerufen, wird ein leerer String zurückgegeben. +

          + Mit einer der set-Methoden kann der eingeschlossene Wert wieder neu gesetzt werden. +

          +
        • +
        + + + +
          +
        • +

          toHexString

          +
          String toHexString()
          +
          Gibt die String-Darstellung dieser ChangeableNumber als hexadezimalen String zurück. +

          + Der String wird nicht als hexadezimal gekennzeichnet, es wird also nicht das Präfix 0x vorangestellt! +

          +
          +
          Returns:
          +
          hexadezimale String-Darstellung dieser ChangeableNumber
          +
          +
        • +
        + + + +
          +
        • +

          toDecString

          +
          String toDecString()
          +
          Gibt die String-Darstellung dieser ChangeableNumber als dezimalen String zurück.
          +
          +
          Returns:
          +
          dezimale String-Darstellung dieser ChangeableNumber
          +
          +
        • +
        + + + +
          +
        • +

          toOctString

          +
          String toOctString()
          +
          Gibt die String-Darstellung dieser ChangeableNumber als oktalen String zurück. +

          + Der String wird nicht als oktal gekennzeichnet, es wird also kein Präfix vorangestellt! +

          +
          +
          Returns:
          +
          oktale String-Darstellung dieser ChangeableNumber
          +
          +
        • +
        + + + +
          +
        • +

          toBinString

          +
          String toBinString()
          +
          Gibt die String-Darstellung dieser ChangeableNumber als binären String zurück. +

          + Der String wird nicht als binär gekennzeichnet, es wird also nicht das Präfix 0b vorangestellt! +

          +
          +
          Returns:
          +
          binäre String-Darstellung dieser ChangeableNumber
          +
          +
        • +
        + + + +
          +
        • +

          toBaseString

          +
          String toBaseString​(int base)
          +             throws IllegalArgumentException
          +
          Gibt die String-Darstellung dieser ChangeableNumber zu einer beliebigen Basis zurück. +

          + Der String wird nicht durch ein Präfix gekennzeichnet! +

          +
          +
          Parameters:
          +
          base - Basis des Zahlensystems, in dem diese ChangeableNumber dargestellt werden soll
          +
          Returns:
          +
          String-Darstellung dieser ChangeableNumber zur übergebenen Basis
          +
          Throws:
          +
          IllegalArgumentException - wenn base den Wertebereich [2, 36] verlässt   -   see ConvertingNumbers.isValueToBase(int, String)
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +
    + + diff --git a/doc/0.1.4/de_public/bitchanger/calculations/ConvertingNumbers.html b/doc/0.1.4/de_public/bitchanger/calculations/ConvertingNumbers.html new file mode 100644 index 0000000..251c536 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/calculations/ConvertingNumbers.html @@ -0,0 +1,708 @@ + + + + + +ConvertingNumbers + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class ConvertingNumbers

    +
    +
    + +
    +
      +
    • +
      +
      public class ConvertingNumbers
      +extends Object
      +
      Die Klasse ConvertingNumbers enthält Methoden zum Umwandeln von Zahlen mit verschiedenen Zahlensystemen. +

      + Die Methoden dieser Klasse können sowohl ganze Zahlen als auch Kommazahlen mit positiven oder negativen Wert umwandeln. + Es werden beliebige Zahlensysteme von der Basis 2 bis zur Basis 36 unterstützt, was dem Zeichenvorrat 0-9 und A-Z entspricht. + In der String-Darstellung können Zahlen mit Ziffern, Großbuchstaben und Kleinbuchstaben an die Methoden dieser Klasse + übergeben werden, allerdings enthalten die Rückgaben in der String-Darstellung aller Methoden ausschließlich Zahlen + und Großbuchstaben. +

      +

      + Das Komma-Zeichen kann mit der Klasse Preferences auf Deutsch (,) oder Englisch (.) eingestellt werden. + Ebenso kann der Indikator für abgeschnittene Nachkommastellen (...) aktiviert oder deaktiviert werden. +

      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle, Moritz Wolter
      +
      See Also:
      +
      Preferences
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeFieldDescription
        static StringFRACTIONAL_PRECISION_INDICATOR +
        Indikator für Abgeschnittene Nachkommastellen bei der Umwandlung vom Zehnersystem in ein anderes, beliebiges Zahlensystem
        +
        static intMAX_BASE +
        Eine Konstante für die größtmögliche Basis bei einem Zeichenvorrat von 0-9 und A-Z
        +
        static intMIN_BASE +
        Eine Konstante für die kleinstmögliche Basis
        +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Static Methods Concrete Methods 
        Modifier and TypeMethodDescription
        static doublebaseToDec​(int base, + String value) +
        Wandelt die übergebene Zahl value zur beliebigen Basis base in eine Zahl zur Basis 10 als double um.
        +
        static StringbaseToDecString​(int base, + String value) +
        Wandelt die übergebene Zahl value zur beliebigen Basis base in eine Zahl zur Basis 10 in der String-Darstellung um.
        +
        static StringbaseToDecString​(int base, + String value, + char comma) +
        Wandelt die übergebene Zahl value zur beliebigen Basis base in eine Zahl zur Basis 10 in der String-Darstellung um.
        +
        static StringdecToBase​(int newBase, + String decValue) +
        Wandelt die übergebene Zahl decValue zur Basis 10 in eine Zahl zur beliebigen Basis newBase in der String-Darstellung um.
        +
        static StringdecToBase​(int newBase, + String decValue, + char comma) +
        Wandelt die übergebene Zahl decValue zur Basis 10 in eine Zahl zur beliebigen Basis newBase in der String-Darstellung um.
        +
        static StringdecToBase​(int newBase, + String decValue, + char comma, + int fractionalPrecision) +
        Wandelt die übergebene Zahl decValue zur Basis 10 in eine Zahl zur beliebigen Basis newBase in der String-Darstellung um.
        +
        static StringdecToBaseBlocks​(int newBase, + String decValue, + char comma, + int blockSize) +
        Wandelt die übergebene Zahl decValue zur Basis 10 in eine Zahl zur beliebigen Basis newBase in der String-Darstellung um + und unterteilt die Zahl in Blöcke der gewünschten Länge.
        +
        static booleanisValueToBase​(int base, + String value) +
        Prüft, ob value eine Zahl zur geforderten Basis base repräsentiert.
        +
        static StringsplitInBlocks​(String value, + int blockSize) +
        Unterteilt den übergebenen String in Blöcke mit der gegebenen Länge, beispielsweise + zur Tausendertrennung
        +
        + +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          MIN_BASE

          +
          public static final int MIN_BASE
          +
          Eine Konstante für die kleinstmögliche Basis
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          MAX_BASE

          +
          public static final int MAX_BASE
          +
          Eine Konstante für die größtmögliche Basis bei einem Zeichenvorrat von 0-9 und A-Z
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          FRACTIONAL_PRECISION_INDICATOR

          +
          public static final String FRACTIONAL_PRECISION_INDICATOR
          +
          Indikator für Abgeschnittene Nachkommastellen bei der Umwandlung vom Zehnersystem in ein anderes, beliebiges Zahlensystem
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          isValueToBase

          +
          public static boolean isValueToBase​(int base,
          +                                    String value)
          +                             throws IllegalArgumentException
          +
          Prüft, ob value eine Zahl zur geforderten Basis base repräsentiert. + Ist der Indikator für abgeschnittene Nachkommastellen aktiviert, wird dieser bei der Auswertung ignoriert. + Leerzeichen können als Tausender-Trennung verwendet werden und werden von dieser Methode ebenfalls ignoriert.
          +
          +
          Parameters:
          +
          value - zu prüfende Zahl repräsentiert als String
          +
          base - geforderte Basis von value - erlaubt sind nur Werte von 2 bis 36 (einschließlich)
          +
          Returns:
          +
          true, wenn value eine Zahl zur geforderten Basis base + repräsentiert, andernfalls wird false zurückgegeben
          +
          Throws:
          +
          IllegalArgumentException - wenn basis den Wertebereich [2, 36] verlässt
          +
          +
        • +
        + + + + + + + + + + + +
          +
        • +

          baseToDecString

          +
          public static String baseToDecString​(int base,
          +                                     String value,
          +                                     char comma)
          +                              throws NullPointerException,
          +                                     NumberFormatException,
          +                                     IllegalArgumentException
          +
          Wandelt die übergebene Zahl value zur beliebigen Basis base in eine Zahl zur Basis 10 in der String-Darstellung um.
          +
          +
          Parameters:
          +
          base - die spezifische Basis des übergebenen Wertes value
          +
          value - der Zahlenwert, der umgewandelt werden soll, in der String-Darstellung
          +
          comma - das Zeichen, welches als Komma in Gleitpunktzahlen verwendet wird
          +
          Returns:
          +
          Wert der Zahl im Zehnersystem in der String-Darstellung
          +
          Throws:
          +
          NullPointerException - wenn der Parameter value null ist
          +
          NumberFormatException - wenn der Parameter value keine Zahl zur Basis base ist
          +
          IllegalArgumentException - wenn value ein leerer String ist oder wenn basis den Wertebereich [2, 36] verlässt   -   see isValueToBase(int,java.lang.String)
          +
          +
        • +
        + + + +
          +
        • +

          decToBase

          +
          public static String decToBase​(int newBase,
          +                               String decValue)
          +                        throws NullPointerException,
          +                               NumberFormatException
          +
          Wandelt die übergebene Zahl decValue zur Basis 10 in eine Zahl zur beliebigen Basis newBase in der String-Darstellung um. +

          + Wenn in der Klasse Preferences der Indikator für Nachkommastellen aktiviert ist, werden die wegen der + maximalen Anzahl von Nachkommastellen abgeschnittenen Nachkommastellen durch "..." angedeutet. +

          +
          +
          Parameters:
          +
          newBase - Basis des neuen Zahlensystems, in das die Zahl decValue umgewandelt werden soll
          +
          decValue - Wert der Zahl im Zehnersystem in der String-Darstellung
          +
          Returns:
          +
          umgewandelte Zahl zur übergebenen Basis in der String-Darstellung mit dem standardmäßig eingestellten Komma
          +
          Throws:
          +
          NullPointerException - wenn der Parameter decValue null ist
          +
          NumberFormatException - wenn der Parameter decValue keine Zahl zur Basis 10 ist
          +
          IllegalArgumentException - wenn decValue ein leerer String ist oder wenn newBase den Wertebereich [2, 36] verlässt   -   see isValueToBase(int,java.lang.String)
          +
          See Also:
          +
          Preferences
          +
          +
        • +
        + + + +
          +
        • +

          decToBase

          +
          public static String decToBase​(int newBase,
          +                               String decValue,
          +                               char comma)
          +                        throws NullPointerException,
          +                               NumberFormatException,
          +                               IllegalArgumentException
          +
          Wandelt die übergebene Zahl decValue zur Basis 10 in eine Zahl zur beliebigen Basis newBase in der String-Darstellung um. +

          + Wenn in der Klasse Preferences der Indikator für Nachkommastellen aktiviert ist, werden die wegen der + maximalen Anzahl von Nachkommastellen abgeschnittenen Nachkommastellen durch "..." angedeutet. +

          +
          +
          Parameters:
          +
          newBase - Basis des neuen Zahlensystems, in das die Zahl decValue umgewandelt werden soll
          +
          decValue - Wert der Zahl im Zehnersystem in der String-Darstellung
          +
          comma - das Zeichen, welches als Komma in Gleitpunktzahlen verwendet wird
          +
          Returns:
          +
          umgewandelte Zahl zur übergebenen Basis in der String-Darstellung mit maximal 15 Nachkommastellen
          +
          Throws:
          +
          NullPointerException - wenn der Parameter decValue null ist
          +
          NumberFormatException - wenn der Parameter decValue keine Zahl zur Basis 10 ist
          +
          IllegalArgumentException - wenn decValue ein leerer String ist oder wenn newBase den Wertebereich [2, 36] verlässt   -   see isValueToBase(int,java.lang.String)
          +
          See Also:
          +
          Preferences
          +
          +
        • +
        + + + +
          +
        • +

          decToBase

          +
          public static String decToBase​(int newBase,
          +                               String decValue,
          +                               char comma,
          +                               int fractionalPrecision)
          +                        throws NullPointerException,
          +                               NumberFormatException,
          +                               IllegalArgumentException,
          +                               UnsupportedOperationException
          +
          Wandelt die übergebene Zahl decValue zur Basis 10 in eine Zahl zur beliebigen Basis newBase in der String-Darstellung um. +

          + Wenn in der Klasse Preferences der Indikator für Nachkommastellen aktiviert ist, werden die wegen der + maximalen Anzahl von Nachkommastellen abgeschnittenen Nachkommastellen durch "..." angedeutet. +

          +
          +
          Parameters:
          +
          newBase - Basis des neuen Zahlensystems, in das die Zahl decValue umgewandelt werden soll
          +
          decValue - Wert der Zahl im Zehnersystem in der String-Darstellung
          +
          comma - das Zeichen, welches als Komma in Gleitpunktzahlen verwendet wird
          +
          fractionalPrecision - maximale Anzahl der Nachkommastellen
          +
          Returns:
          +
          umgewandelte Zahl zur übergebenen Basis in der String-Darstellung
          +
          Throws:
          +
          NullPointerException - wenn der Parameter decValue null ist
          +
          NumberFormatException - wenn der Parameter decValue keine Zahl zur Basis 10 ist
          +
          IllegalArgumentException - wenn decValue ein leerer String ist oder wenn newBase den Wertebereich [2, 36] verlässt   -   see isValueToBase(int,java.lang.String)
          +
          UnsupportedOperationException - wenn decValue negativ ist und Nachkommastellen enthält und gleichzeitig newBase zwei ist
          +
          See Also:
          +
          Preferences
          +
          +
        • +
        + + + +
          +
        • +

          decToBaseBlocks

          +
          public static String decToBaseBlocks​(int newBase,
          +                                     String decValue,
          +                                     char comma,
          +                                     int blockSize)
          +                              throws NullPointerException,
          +                                     NumberFormatException,
          +                                     IllegalArgumentException
          +
          Wandelt die übergebene Zahl decValue zur Basis 10 in eine Zahl zur beliebigen Basis newBase in der String-Darstellung um + und unterteilt die Zahl in Blöcke der gewünschten Länge. +

          + Wenn in der Klasse Preferences der Indikator für Nachkommastellen aktiviert ist, werden die wegen der + maximalen Anzahl von Nachkommastellen abgeschnittenen Nachkommastellen durch "..." angedeutet. +

          +
          +
          Parameters:
          +
          newBase - Basis des neuen Zahlensystems, in das die Zahl decValue umgewandelt werden soll
          +
          decValue - Wert der Zahl im Zehnersystem in der String-Darstellung
          +
          comma - das Zeichen, welches als Komma in Gleitpunktzahlen verwendet wird
          +
          blockSize - Länge der Blöcke, in die der String unterteilt wird
          +
          Returns:
          +
          umgewandelte Zahl zur übergebenen Basis in der String-Darstellung
          +
          Throws:
          +
          NullPointerException - wenn der Parameter decValue null ist
          +
          NumberFormatException - wenn der Parameter decValue keine Zahl zur Basis 10 ist
          +
          IllegalArgumentException - wenn decValue ein leerer String ist oder wenn newBase den Wertebereich [2, 36] verlässt   -   see isValueToBase(int,java.lang.String)
          +
          Since:
          +
          Bitchanger 0.1.4
          +
          See Also:
          +
          Preferences, +decToBase(int, String, char), +splitInBlocks(String, int)
          +
          +
        • +
        + + + +
          +
        • +

          splitInBlocks

          +
          public static String splitInBlocks​(String value,
          +                                   int blockSize)
          +
          Unterteilt den übergebenen String in Blöcke mit der gegebenen Länge, beispielsweise + zur Tausendertrennung
          +
          +
          Parameters:
          +
          value - String, der aufgeteilt wird
          +
          blockSize - Länge der Blöcke
          +
          Returns:
          +
          Aufgeteilter String mit Blöcken
          +
          Since:
          +
          Bitchanger 0.1.4
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/calculations/SimpleChangeableNumber.html b/doc/0.1.4/de_public/bitchanger/calculations/SimpleChangeableNumber.html new file mode 100644 index 0000000..f4c4943 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/calculations/SimpleChangeableNumber.html @@ -0,0 +1,692 @@ + + + + + +SimpleChangeableNumber + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class SimpleChangeableNumber

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      ChangeableNumber
      +
      +
      +
      public class SimpleChangeableNumber
      +extends Object
      +implements ChangeableNumber
      +
      Die Klasse SimpleChangeableNumber bietet eine vollständige Implementierung von ChangeableNumber. +

      + Jede Instanz dieser Klasse schließt einen Wert ein, der aus beliebigen Zahlensystemen gesetzt und in + verschiedene Zahlensysteme umgewandelt werden kann. Die String-Darstellungen in den verschiedenen + Zahlensystemen enthalten keine Präfixe, die auf die Basis hinweisen. +

      +

      + Die String Darstellungen der Zahlensysteme werden für bessere Lesbarkeit in Blöcke unterteilt. + Beim Hexadezimal- und Binärsystem sind die Blöcke vier Zeichen lang, in allen anderen Zahlensystemen + haben die Blöcke eine Länge von drei Zeichen. +

      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle, Moritz Wolter
      +
      See Also:
      +
      ChangeableNumber
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + + + + + +
        Constructors 
        ConstructorDescription
        SimpleChangeableNumber() +
        Erzeugt eine neue Instanz mit dem eingeschlossenen Wert 0
        +
        SimpleChangeableNumber​(String decValue) +
        Erzeugt eine neue Instanz, die den übergebenen dezimal-Wert repräsentiert
        +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethodDescription
        voidreset() +
        Setzt den eingeschlossenen Wert zurück.
        +
        voidsetBin​(String binValue) +
        Setzt den Wert dieser ChangeableNumber auf den Wert eines binären Strings
        +
        voidsetDec​(String decValue) +
        Setzt den Wert dieser ChangeableNumber auf den Wert eines dezimalen Strings
        +
        voidsetHex​(String hexValue) +
        Setzt den Wert dieser ChangeableNumber auf den Wert eines hexadezimalen Strings
        +
        voidsetOct​(String octValue) +
        Setzt den Wert dieser ChangeableNumber auf den Wert eines oktalen Strings
        +
        voidsetValue​(String value, + int baseOfValue) +
        Setzt den Wert dieser ChangeableNumber auf einen Wert in einem beliebigen Zahlensystem
        +
        StringtoBaseString​(int base) +
        Gibt die String-Darstellung dieser ChangeableNumber zu einer beliebigen Basis zurück.
        +
        StringtoBinString() +
        Gibt die String-Darstellung dieser ChangeableNumber als binären String zurück.
        +
        StringtoDecString() +
        Gibt die String-Darstellung dieser ChangeableNumber als dezimalen String zurück.
        +
        StringtoHexString() +
        Gibt die String-Darstellung dieser ChangeableNumber als hexadezimalen String zurück.
        +
        StringtoOctString() +
        Gibt die String-Darstellung dieser ChangeableNumber als oktalen String zurück.
        +
        StringtoString() +
        Gibt einen String zurück, der die hexadezimale, dezimale, oktale und + binäre Darstellung des eingeschlossenen Wertes enthält.
        +
        + + +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      + +
      + +
      +
        +
      • + + +

        Method Detail

        + + + + + + + + + + + + + + + + + + + + + + + +
          +
        • +

          reset

          +
          public void reset()
          +
          Setzt den eingeschlossenen Wert zurück. Der vorherige Wert wird gelöscht! Wird nach dieser Methode + eine der toString-Methoden aufgerufen, wird ein leerer String zurückgegeben. +

          + Mit einer der set-Methoden kann der eingeschlossene Wert wieder neu gesetzt werden. +

          +
          +
          Specified by:
          +
          reset in interface ChangeableNumber
          +
          +
        • +
        + + + +
          +
        • +

          toHexString

          +
          public String toHexString()
          +
          Gibt die String-Darstellung dieser ChangeableNumber als hexadezimalen String zurück. +

          + Der String wird nicht als hexadezimal gekennzeichnet, es wird also nicht das Präfix 0x vorangestellt! +

          +
          +
          Specified by:
          +
          toHexString in interface ChangeableNumber
          +
          Returns:
          +
          hexadezimale String-Darstellung dieser ChangeableNumber
          +
          +
        • +
        + + + +
          +
        • +

          toDecString

          +
          public String toDecString()
          +
          Gibt die String-Darstellung dieser ChangeableNumber als dezimalen String zurück.
          +
          +
          Specified by:
          +
          toDecString in interface ChangeableNumber
          +
          Returns:
          +
          dezimale String-Darstellung dieser ChangeableNumber
          +
          +
        • +
        + + + +
          +
        • +

          toOctString

          +
          public String toOctString()
          +
          Gibt die String-Darstellung dieser ChangeableNumber als oktalen String zurück. +

          + Der String wird nicht als oktal gekennzeichnet, es wird also kein Präfix vorangestellt! +

          +
          +
          Specified by:
          +
          toOctString in interface ChangeableNumber
          +
          Returns:
          +
          oktale String-Darstellung dieser ChangeableNumber
          +
          +
        • +
        + + + +
          +
        • +

          toBinString

          +
          public String toBinString()
          +
          Gibt die String-Darstellung dieser ChangeableNumber als binären String zurück. +

          + Der String wird nicht als binär gekennzeichnet, es wird also nicht das Präfix 0b vorangestellt! +

          +
          +
          Specified by:
          +
          toBinString in interface ChangeableNumber
          +
          Returns:
          +
          binäre String-Darstellung dieser ChangeableNumber
          +
          +
        • +
        + + + +
          +
        • +

          toBaseString

          +
          public String toBaseString​(int base)
          +                    throws IllegalArgumentException
          +
          Gibt die String-Darstellung dieser ChangeableNumber zu einer beliebigen Basis zurück. +

          + Der String wird nicht durch ein Präfix gekennzeichnet! +

          +
          +
          Specified by:
          +
          toBaseString in interface ChangeableNumber
          +
          Parameters:
          +
          base - Basis des Zahlensystems, in dem diese ChangeableNumber dargestellt werden soll
          +
          Returns:
          +
          String-Darstellung dieser ChangeableNumber zur übergebenen Basis
          +
          Throws:
          +
          IllegalArgumentException - wenn base den Wertebereich [2, 36] verlässt   -   see ConvertingNumbers.isValueToBase(int, String)
          +
          +
        • +
        + + + +
          +
        • +

          toString

          +
          public String toString()
          +
          Gibt einen String zurück, der die hexadezimale, dezimale, oktale und + binäre Darstellung des eingeschlossenen Wertes enthält.
          +
          +
          Overrides:
          +
          toString in class Object
          +
          Returns:
          +
          String bestehend aus der hexadezimalen, dezimalen, oktalen und binären String-Darstellung des eingeschlossenen + Wertes, hintereinander aufgelistet
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/calculations/class-use/Calculable.html b/doc/0.1.4/de_public/bitchanger/calculations/class-use/Calculable.html new file mode 100644 index 0000000..84a2f26 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/calculations/class-use/Calculable.html @@ -0,0 +1,149 @@ + + + + + +Uses of Interface bitchanger.calculations.Calculable + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    bitchanger.calculations.Calculable

    +
    +
    No usage of bitchanger.calculations.Calculable
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/calculations/class-use/ChangeableNumber.html b/doc/0.1.4/de_public/bitchanger/calculations/class-use/ChangeableNumber.html new file mode 100644 index 0000000..0b38028 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/calculations/class-use/ChangeableNumber.html @@ -0,0 +1,197 @@ + + + + + +Uses of Interface bitchanger.calculations.ChangeableNumber + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    bitchanger.calculations.ChangeableNumber

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/calculations/class-use/ConvertingNumbers.html b/doc/0.1.4/de_public/bitchanger/calculations/class-use/ConvertingNumbers.html new file mode 100644 index 0000000..662cbce --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/calculations/class-use/ConvertingNumbers.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.calculations.ConvertingNumbers + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.calculations.ConvertingNumbers

    +
    +
    No usage of bitchanger.calculations.ConvertingNumbers
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/calculations/class-use/SimpleChangeableNumber.html b/doc/0.1.4/de_public/bitchanger/calculations/class-use/SimpleChangeableNumber.html new file mode 100644 index 0000000..cae1775 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/calculations/class-use/SimpleChangeableNumber.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.calculations.SimpleChangeableNumber + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.calculations.SimpleChangeableNumber

    +
    +
    No usage of bitchanger.calculations.SimpleChangeableNumber
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/calculations/package-summary.html b/doc/0.1.4/de_public/bitchanger/calculations/package-summary.html new file mode 100644 index 0000000..16489b6 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/calculations/package-summary.html @@ -0,0 +1,202 @@ + + + + + +bitchanger.calculations + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package bitchanger.calculations

    +
    +
    +
    + + +
    Bietet alle Klassen, die zur Berechnung der Daten benötigt werden.
    +
    +
      +
    • + + + + + + + + + + + + + + + + +
      Interface Summary 
      InterfaceDescription
      Calculable 
      ChangeableNumber +
      Schnittstelle, die Methoden definiert, um eine Zahl aus einem beliebigen Zahlensystem + in beliebige andere Zahlensysteme umzuwandeln
      +
      +
    • +
    • + + + + + + + + + + + + + + + + +
      Class Summary 
      ClassDescription
      ConvertingNumbers +
      Die Klasse ConvertingNumbers enthält Methoden zum Umwandeln von Zahlen mit verschiedenen Zahlensystemen.
      +
      SimpleChangeableNumber +
      Die Klasse SimpleChangeableNumber bietet eine vollständige Implementierung von ChangeableNumber.
      +
      +
    • +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/bitchanger/calculations/package-tree.html b/doc/0.1.4/de_public/bitchanger/calculations/package-tree.html new file mode 100644 index 0000000..7fc90fd --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/calculations/package-tree.html @@ -0,0 +1,172 @@ + + + + + +bitchanger.calculations Class Hierarchy + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package bitchanger.calculations

    +Package Hierarchies: + +
    +
    +
    +

    Class Hierarchy

    + +
    +
    +

    Interface Hierarchy

    + +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/bitchanger/calculations/package-use.html b/doc/0.1.4/de_public/bitchanger/calculations/package-use.html new file mode 100644 index 0000000..420f180 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/calculations/package-use.html @@ -0,0 +1,189 @@ + + + + + +Uses of Package bitchanger.calculations + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    bitchanger.calculations

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/class-use/BitchangerLauncherApp.html b/doc/0.1.4/de_public/bitchanger/class-use/BitchangerLauncherApp.html new file mode 100644 index 0000000..75bcd15 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/class-use/BitchangerLauncherApp.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.BitchangerLauncherApp + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.BitchangerLauncherApp

    +
    +
    No usage of bitchanger.BitchangerLauncherApp
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/components/Calculable.html b/doc/0.1.4/de_public/bitchanger/components/Calculable.html new file mode 100644 index 0000000..055a8e5 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/components/Calculable.html @@ -0,0 +1,191 @@ + + + + + +Calculable + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface Calculable

    +
    +
    +
    +
      +
    • +
      +
      public interface Calculable
      +
    • +
    +
    +
    +
    + +
    + +
    + + diff --git a/doc/0.1.4/de_public/bitchanger/components/ChangeableNumber.html b/doc/0.1.4/de_public/bitchanger/components/ChangeableNumber.html new file mode 100644 index 0000000..824cb4b --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/components/ChangeableNumber.html @@ -0,0 +1,537 @@ + + + + + +ChangeableNumber + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface ChangeableNumber

    +
    +
    +
    +
      +
    • +
      +
      All Known Implementing Classes:
      +
      SimpleChangeableNumber
      +
      +
      +
      public interface ChangeableNumber
      +
      Schnittstelle, die Methoden definiert, um eine Zahl aus einem beliebigen Zahlensystem + in beliebige andere Zahlensysteme umzuwandeln
      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Abstract Methods 
        Modifier and TypeMethodDescription
        voidreset() +
        Setzt den eingeschlossenen Wert zurück.
        +
        voidsetBin​(String binValue) +
        Setzt den Wert dieser ChangeableNumber auf den Wert eines binären Strings
        +
        voidsetDec​(String decValue) +
        Setzt den Wert dieser ChangeableNumber auf den Wert eines dezimalen Strings
        +
        voidsetHex​(String hexValue) +
        Setzt den Wert dieser ChangeableNumber auf den Wert eines hexadezimalen Strings
        +
        voidsetOct​(String octValue) +
        Setzt den Wert dieser ChangeableNumber auf den Wert eines oktalen Strings
        +
        voidsetValue​(String value, + int baseOfValue) +
        Setzt den Wert dieser ChangeableNumber auf einen Wert in einem beliebigen Zahlensystem
        +
        StringtoBaseString​(int base) +
        Gibt die String-Darstellung dieser ChangeableNumber zu einer beliebigen Basis zurück.
        +
        StringtoBinString() +
        Gibt die String-Darstellung dieser ChangeableNumber als binären String zurück.
        +
        StringtoDecString() +
        Gibt die String-Darstellung dieser ChangeableNumber als dezimalen String zurück.
        +
        StringtoHexString() +
        Gibt die String-Darstellung dieser ChangeableNumber als hexadezimalen String zurück.
        +
        StringtoOctString() +
        Gibt die String-Darstellung dieser ChangeableNumber als oktalen String zurück.
        +
        +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + + + + + + + + + + + + + + + + + + + + + +
          +
        • +

          toHexString

          +
          String toHexString()
          +
          Gibt die String-Darstellung dieser ChangeableNumber als hexadezimalen String zurück. +

          + Der String wird nicht als hexadezimal gekennzeichnet, es wird also nicht das Präfix 0x vorangestellt! +

          +
          +
          Returns:
          +
          hexadezimale String-Darstellung dieser ChangeableNumber
          +
          +
        • +
        + + + +
          +
        • +

          toDecString

          +
          String toDecString()
          +
          Gibt die String-Darstellung dieser ChangeableNumber als dezimalen String zurück.
          +
          +
          Returns:
          +
          dezimale String-Darstellung dieser ChangeableNumber
          +
          +
        • +
        + + + +
          +
        • +

          toOctString

          +
          String toOctString()
          +
          Gibt die String-Darstellung dieser ChangeableNumber als oktalen String zurück. +

          + Der String wird nicht als oktal gekennzeichnet, es wird also kein Präfix vorangestellt! +

          +
          +
          Returns:
          +
          oktale String-Darstellung dieser ChangeableNumber
          +
          +
        • +
        + + + +
          +
        • +

          toBinString

          +
          String toBinString()
          +
          Gibt die String-Darstellung dieser ChangeableNumber als binären String zurück. +

          + Der String wird nicht als binär gekennzeichnet, es wird also nicht das Präfix 0b vorangestellt! +

          +
          +
          Returns:
          +
          binäre String-Darstellung dieser ChangeableNumber
          +
          +
        • +
        + + + +
          +
        • +

          toBaseString

          +
          String toBaseString​(int base)
          +             throws IllegalArgumentException
          +
          Gibt die String-Darstellung dieser ChangeableNumber zu einer beliebigen Basis zurück. +

          + Der String wird nicht durch ein Präfix gekennzeichnet! +

          +
          +
          Parameters:
          +
          base - Basis des Zahlensystems, in dem diese ChangeableNumber dargestellt werden soll
          +
          Returns:
          +
          String-Darstellung dieser ChangeableNumber zur übergebenen Basis
          +
          Throws:
          +
          IllegalArgumentException - wenn base den Wertebereich [2, 36] verlässt   -   see ConvertingNumbers.isValueToBase(int, String)
          +
          +
        • +
        + + + +
          +
        • +

          reset

          +
          void reset()
          +
          Setzt den eingeschlossenen Wert zurück. Der vorherige Wert wird gelöscht! Wird nach dieser Methode + eine der toString-Methoden aufgerufen, wird ein leerer String zurückgegeben. +

          + Mit einer der set-Methoden kann der eingeschlossene Wert wieder neu gesetzt werden. +

          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +
    + + diff --git a/doc/0.1.4/de_public/bitchanger/components/ConvertingNumbers.html b/doc/0.1.4/de_public/bitchanger/components/ConvertingNumbers.html new file mode 100644 index 0000000..94e64cb --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/components/ConvertingNumbers.html @@ -0,0 +1,625 @@ + + + + + +ConvertingNumbers + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class ConvertingNumbers

    +
    +
    + +
    +
      +
    • +
      +
      public class ConvertingNumbers
      +extends Object
      +
      Die Klasse ConvertingNumbers enthält Methoden zum Umwandeln von Zahlen mit verschiedenen Zahlensystemen. +

      + Die Methoden dieser Klasse können sowohl ganze Zahlen als auch Kommazahlen mit positiven oder negativen Wert umwandeln. + Es werden beliebige Zahlensysteme von der Basis 2 bis zur Basis 36 unterstützt, was dem Zeichenvorrat 0-9 und A-Z entspricht. + In der String-Darstellung können Zahlen mit Ziffern, Großbuchstaben und Kleinbuchstaben an die Methoden dieser Klasse + übergeben werden, allerdings enthalten die Rückgaben in der String-Darstellung aller Methoden ausschließlich Zahlen + und Großbuchstaben. +

      +

      + Das Komma-Zeichen kann mit der Klasse Preferences auf Deutsch (,) oder Englisch (.) eingestellt werden. + Ebenso kann der Indikator für abgeschnittene Nachkommastellen (...) aktiviert oder deaktiviert werden. +

      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle, Moritz Wolter
      +
      See Also:
      +
      Preferences
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeFieldDescription
        static StringFRACTIONAL_PRECISION_INDICATOR +
        Indikator für Abgeschnittene Nachkommastellen bei der Umwandlung vom Zehnersystem in ein anderes, beliebiges Zahlensystem
        +
        static intMAX_BASE +
        Eine Konstante für die größtmögliche Basis bei einem Zeichenvorrat von 0-9 und A-Z
        +
        static intMIN_BASE +
        Eine Konstante für die kleinstmögliche Basis
        +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Static Methods Concrete Methods 
        Modifier and TypeMethodDescription
        static doublebaseToDec​(int base, + String value) +
        Wandelt die übergebene Zahl value zur beliebigen Basis base in eine Zahl zur Basis 10 als double um.
        +
        static StringbaseToDecString​(int base, + String value) +
        Wandelt die übergebene Zahl value zur beliebigen Basis base in eine Zahl zur Basis 10 in der String-Darstellung um.
        +
        static StringbaseToDecString​(int base, + String value, + char comma) +
        Wandelt die übergebene Zahl value zur beliebigen Basis base in eine Zahl zur Basis 10 in der String-Darstellung um.
        +
        static StringdecToBase​(int newBase, + String decValue) +
        Wandelt die übergebene Zahl decValue zur Basis 10 in eine Zahl zur beliebigen Basis newBase in der String-Darstellung um.
        +
        static StringdecToBase​(int newBase, + String decValue, + char comma) +
        Wandelt die übergebene Zahl decValue zur Basis 10 in eine Zahl zur beliebigen Basis newBase in der String-Darstellung um.
        +
        static StringdecToBase​(int newBase, + String decValue, + char comma, + int fractionalPrecision) +
        Wandelt die übergebene Zahl decValue zur Basis 10 in eine Zahl zur beliebigen Basis newBase in der String-Darstellung um.
        +
        static booleanisValueToBase​(int base, + String value) +
        Prüft, ob value eine Zahl zur geforderten Basis base repräsentiert.
        +
        + +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          MIN_BASE

          +
          public static final int MIN_BASE
          +
          Eine Konstante für die kleinstmögliche Basis
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          MAX_BASE

          +
          public static final int MAX_BASE
          +
          Eine Konstante für die größtmögliche Basis bei einem Zeichenvorrat von 0-9 und A-Z
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          FRACTIONAL_PRECISION_INDICATOR

          +
          public static final String FRACTIONAL_PRECISION_INDICATOR
          +
          Indikator für Abgeschnittene Nachkommastellen bei der Umwandlung vom Zehnersystem in ein anderes, beliebiges Zahlensystem
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          isValueToBase

          +
          public static boolean isValueToBase​(int base,
          +                                    String value)
          +                             throws IllegalArgumentException
          +
          Prüft, ob value eine Zahl zur geforderten Basis base repräsentiert. + Ist der Indikator für abgeschnittene Nachkommastellen aktiviert, wird dieser bei der Auswertung ignoriert. + Leerzeichen können als Tausender-Trennung verwendet werden und werden von dieser Methode ebenfalls ignoriert.
          +
          +
          Parameters:
          +
          value - zu prüfende Zahl repräsentiert als String
          +
          base - geforderte Basis von value - erlaubt sind nur Werte von 2 bis 36 (einschließlich)
          +
          Returns:
          +
          true, wenn value eine Zahl zur geforderten Basis base + repräsentiert, andernfalls wird false zurückgegeben
          +
          Throws:
          +
          IllegalArgumentException - wenn basis den Wertebereich [2, 36] verlässt
          +
          +
        • +
        + + + + + + + + + + + +
          +
        • +

          baseToDecString

          +
          public static String baseToDecString​(int base,
          +                                     String value,
          +                                     char comma)
          +                              throws NullPointerException,
          +                                     NumberFormatException,
          +                                     IllegalArgumentException
          +
          Wandelt die übergebene Zahl value zur beliebigen Basis base in eine Zahl zur Basis 10 in der String-Darstellung um.
          +
          +
          Parameters:
          +
          base - die spezifische Basis des übergebenen Wertes value
          +
          value - der Zahlenwert, der umgewandelt werden soll, in der String-Darstellung
          +
          comma - das Zeichen, welches als Komma in Gleitpunktzahlen verwendet wird
          +
          Returns:
          +
          Wert der Zahl im Zehnersystem in der String-Darstellung
          +
          Throws:
          +
          NullPointerException - wenn der Parameter value null ist
          +
          NumberFormatException - wenn der Parameter value keine Zahl zur Basis base ist
          +
          IllegalArgumentException - wenn value ein leerer String ist oder wenn basis den Wertebereich [2, 36] verlässt   -   see isValueToBase(int,java.lang.String)
          +
          +
        • +
        + + + +
          +
        • +

          decToBase

          +
          public static String decToBase​(int newBase,
          +                               String decValue)
          +                        throws NullPointerException,
          +                               NumberFormatException
          +
          Wandelt die übergebene Zahl decValue zur Basis 10 in eine Zahl zur beliebigen Basis newBase in der String-Darstellung um. +

          + Wenn in der Klasse Preferences der Indikator für Nachkommastellen aktiviert ist, werden die wegen der + maximalen Anzahl von Nachkommastellen abgeschnittenen Nachkommastellen durch "..." angedeutet. +

          +
          +
          Parameters:
          +
          newBase - Basis des neuen Zahlensystems, in das die Zahl decValue umgewandelt werden soll
          +
          decValue - Wert der Zahl im Zehnersystem in der String-Darstellung
          +
          Returns:
          +
          umgewandelte Zahl zur übergebenen Basis in der String-Darstellung mit dem standardmäßig eingestellten Komma
          +
          Throws:
          +
          NullPointerException - wenn der Parameter decValue null ist
          +
          NumberFormatException - wenn der Parameter decValue keine Zahl zur Basis 10 ist
          +
          IllegalArgumentException - wenn decValue ein leerer String ist oder wenn newBase den Wertebereich [2, 36] verlässt   -   see isValueToBase(int,java.lang.String)
          +
          See Also:
          +
          Preferences
          +
          +
        • +
        + + + +
          +
        • +

          decToBase

          +
          public static String decToBase​(int newBase,
          +                               String decValue,
          +                               char comma)
          +                        throws NullPointerException,
          +                               NumberFormatException,
          +                               IllegalArgumentException
          +
          Wandelt die übergebene Zahl decValue zur Basis 10 in eine Zahl zur beliebigen Basis newBase in der String-Darstellung um. +

          + Wenn in der Klasse Preferences der Indikator für Nachkommastellen aktiviert ist, werden die wegen der + maximalen Anzahl von Nachkommastellen abgeschnittenen Nachkommastellen durch "..." angedeutet. +

          +
          +
          Parameters:
          +
          newBase - Basis des neuen Zahlensystems, in das die Zahl decValue umgewandelt werden soll
          +
          decValue - Wert der Zahl im Zehnersystem in der String-Darstellung
          +
          comma - das Zeichen, welches als Komma in Gleitpunktzahlen verwendet wird
          +
          Returns:
          +
          umgewandelte Zahl zur übergebenen Basis in der String-Darstellung mit maximal 15 Nachkommastellen
          +
          Throws:
          +
          NullPointerException - wenn der Parameter decValue null ist
          +
          NumberFormatException - wenn der Parameter decValue keine Zahl zur Basis 10 ist
          +
          IllegalArgumentException - wenn decValue ein leerer String ist oder wenn newBase den Wertebereich [2, 36] verlässt   -   see isValueToBase(int,java.lang.String)
          +
          See Also:
          +
          Preferences
          +
          +
        • +
        + + + +
          +
        • +

          decToBase

          +
          public static String decToBase​(int newBase,
          +                               String decValue,
          +                               char comma,
          +                               int fractionalPrecision)
          +                        throws NullPointerException,
          +                               NumberFormatException,
          +                               IllegalArgumentException
          +
          Wandelt die übergebene Zahl decValue zur Basis 10 in eine Zahl zur beliebigen Basis newBase in der String-Darstellung um. +

          + Wenn in der Klasse Preferences der Indikator für Nachkommastellen aktiviert ist, werden die wegen der + maximalen Anzahl von Nachkommastellen abgeschnittenen Nachkommastellen durch "..." angedeutet. +

          +
          +
          Parameters:
          +
          newBase - Basis des neuen Zahlensystems, in das die Zahl decValue umgewandelt werden soll
          +
          decValue - Wert der Zahl im Zehnersystem in der String-Darstellung
          +
          comma - das Zeichen, welches als Komma in Gleitpunktzahlen verwendet wird
          +
          fractionalPrecision - maximale Anzahl der Nachkommastellen
          +
          Returns:
          +
          umgewandelte Zahl zur übergebenen Basis in der String-Darstellung
          +
          Throws:
          +
          NullPointerException - wenn der Parameter decValue null ist
          +
          NumberFormatException - wenn der Parameter decValue keine Zahl zur Basis 10 ist
          +
          IllegalArgumentException - wenn decValue ein leerer String ist oder wenn newBase den Wertebereich [2, 36] verlässt   -   see isValueToBase(int,java.lang.String)
          +
          See Also:
          +
          Preferences
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/components/SimpleChangeableNumber.html b/doc/0.1.4/de_public/bitchanger/components/SimpleChangeableNumber.html new file mode 100644 index 0000000..720a43e --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/components/SimpleChangeableNumber.html @@ -0,0 +1,680 @@ + + + + + +SimpleChangeableNumber + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class SimpleChangeableNumber

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      ChangeableNumber
      +
      +
      +
      public class SimpleChangeableNumber
      +extends Object
      +implements ChangeableNumber
      +
      Die Klasse SimpleChangeableNumber bietet eine vollständige Implementierung von ChangeableNumber. +

      + Jede Instanz dieser Klasse schließt einen Wert ein, der aus beliebigen Zahlensystemen gesetzt und in + verschiedene Zahlensysteme umgewandelt werden kann. Die String-Darstellungen in den verschiedenen + Zahlensystemen enthalten keine Präfixe, die auf die Basis hinweisen. +

      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim, Moritz Wolter
      +
      See Also:
      +
      ChangeableNumber
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + + + + + +
        Constructors 
        ConstructorDescription
        SimpleChangeableNumber() +
        Erzeugt eine neue Instanz mit dem eingeschlossenen Wert 0
        +
        SimpleChangeableNumber​(String dezimalWert) +
        Erzeugt eine neue Instanz, die den übergebenen dezimal-Wert repräsentiert
        +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethodDescription
        voidreset() +
        Setzt den eingeschlossenen Wert zurück.
        +
        voidsetBin​(String binValue) +
        Setzt den Wert dieser ChangeableNumber auf den Wert eines binären Strings
        +
        voidsetDec​(String decValue) +
        Setzt den Wert dieser ChangeableNumber auf den Wert eines dezimalen Strings
        +
        voidsetHex​(String hexValue) +
        Setzt den Wert dieser ChangeableNumber auf den Wert eines hexadezimalen Strings
        +
        voidsetOct​(String octValue) +
        Setzt den Wert dieser ChangeableNumber auf den Wert eines oktalen Strings
        +
        voidsetValue​(String value, + int baseOfValue) +
        Setzt den Wert dieser ChangeableNumber auf einen Wert in einem beliebigen Zahlensystem
        +
        StringtoBaseString​(int base) +
        Gibt die String-Darstellung dieser ChangeableNumber zu einer beliebigen Basis zurück.
        +
        StringtoBinString() +
        Gibt die String-Darstellung dieser ChangeableNumber als binären String zurück.
        +
        StringtoDecString() +
        Gibt die String-Darstellung dieser ChangeableNumber als dezimalen String zurück.
        +
        StringtoHexString() +
        Gibt die String-Darstellung dieser ChangeableNumber als hexadezimalen String zurück.
        +
        StringtoOctString() +
        Gibt die String-Darstellung dieser ChangeableNumber als oktalen String zurück.
        +
        StringtoString() +
        Gibt einen String zurück, der die hexadezimale, dezimale, oktale und + binäre Darstellung des eingeschlossenen Wertes enthält.
        +
        + +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      + +
      + +
      +
        +
      • + + +

        Method Detail

        + + + + + + + + + + + + + + + + + + + + + + + +
          +
        • +

          reset

          +
          public void reset()
          +
          Setzt den eingeschlossenen Wert zurück. Der vorherige Wert wird gelöscht! Wird nach dieser Methode + eine der toString-Methoden aufgerufen, wird ein leerer String zurückgegeben. +

          + Mit einer der set-Methoden kann der eingeschlossene Wert wieder neu gesetzt werden. +

          +
          +
          Specified by:
          +
          reset in interface ChangeableNumber
          +
          +
        • +
        + + + +
          +
        • +

          toHexString

          +
          public String toHexString()
          +
          Gibt die String-Darstellung dieser ChangeableNumber als hexadezimalen String zurück. +

          + Der String wird nicht als hexadezimal gekennzeichnet, es wird also nicht das Präfix 0x vorangestellt! +

          +
          +
          Specified by:
          +
          toHexString in interface ChangeableNumber
          +
          Returns:
          +
          hexadezimale String-Darstellung dieser ChangeableNumber
          +
          +
        • +
        + + + +
          +
        • +

          toDecString

          +
          public String toDecString()
          +
          Gibt die String-Darstellung dieser ChangeableNumber als dezimalen String zurück.
          +
          +
          Specified by:
          +
          toDecString in interface ChangeableNumber
          +
          Returns:
          +
          dezimale String-Darstellung dieser ChangeableNumber
          +
          +
        • +
        + + + +
          +
        • +

          toOctString

          +
          public String toOctString()
          +
          Gibt die String-Darstellung dieser ChangeableNumber als oktalen String zurück. +

          + Der String wird nicht als oktal gekennzeichnet, es wird also kein Präfix vorangestellt! +

          +
          +
          Specified by:
          +
          toOctString in interface ChangeableNumber
          +
          Returns:
          +
          oktale String-Darstellung dieser ChangeableNumber
          +
          +
        • +
        + + + +
          +
        • +

          toBinString

          +
          public String toBinString()
          +
          Gibt die String-Darstellung dieser ChangeableNumber als binären String zurück. +

          + Der String wird nicht als binär gekennzeichnet, es wird also nicht das Präfix 0b vorangestellt! +

          +
          +
          Specified by:
          +
          toBinString in interface ChangeableNumber
          +
          Returns:
          +
          binäre String-Darstellung dieser ChangeableNumber
          +
          +
        • +
        + + + +
          +
        • +

          toBaseString

          +
          public String toBaseString​(int base)
          +                    throws IllegalArgumentException
          +
          Gibt die String-Darstellung dieser ChangeableNumber zu einer beliebigen Basis zurück. +

          + Der String wird nicht durch ein Präfix gekennzeichnet! +

          +
          +
          Specified by:
          +
          toBaseString in interface ChangeableNumber
          +
          Parameters:
          +
          base - Basis des Zahlensystems, in dem diese ChangeableNumber dargestellt werden soll
          +
          Returns:
          +
          String-Darstellung dieser ChangeableNumber zur übergebenen Basis
          +
          Throws:
          +
          IllegalArgumentException - wenn base den Wertebereich [2, 36] verlässt   -   see ConvertingNumbers.isValueToBase(int, String)
          +
          +
        • +
        + + + +
          +
        • +

          toString

          +
          public String toString()
          +
          Gibt einen String zurück, der die hexadezimale, dezimale, oktale und + binäre Darstellung des eingeschlossenen Wertes enthält.
          +
          +
          Overrides:
          +
          toString in class Object
          +
          Returns:
          +
          String bestehend aus der hexadezimalen, dezimalen, oktalen und binären String-Darstellung des eingeschlossenen + Wertes, hintereinander aufgelistet
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/components/class-use/Calculable.html b/doc/0.1.4/de_public/bitchanger/components/class-use/Calculable.html new file mode 100644 index 0000000..da6a457 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/components/class-use/Calculable.html @@ -0,0 +1,149 @@ + + + + + +Uses of Interface bitchanger.components.Calculable + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    bitchanger.components.Calculable

    +
    +
    No usage of bitchanger.components.Calculable
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/components/class-use/ChangeableNumber.html b/doc/0.1.4/de_public/bitchanger/components/class-use/ChangeableNumber.html new file mode 100644 index 0000000..c78b5f1 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/components/class-use/ChangeableNumber.html @@ -0,0 +1,195 @@ + + + + + +Uses of Interface bitchanger.components.ChangeableNumber + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    bitchanger.components.ChangeableNumber

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/components/class-use/ConvertingNumbers.html b/doc/0.1.4/de_public/bitchanger/components/class-use/ConvertingNumbers.html new file mode 100644 index 0000000..cde3310 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/components/class-use/ConvertingNumbers.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.components.ConvertingNumbers + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.components.ConvertingNumbers

    +
    +
    No usage of bitchanger.components.ConvertingNumbers
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/components/class-use/SimpleChangeableNumber.html b/doc/0.1.4/de_public/bitchanger/components/class-use/SimpleChangeableNumber.html new file mode 100644 index 0000000..d1c9afb --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/components/class-use/SimpleChangeableNumber.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.components.SimpleChangeableNumber + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.components.SimpleChangeableNumber

    +
    +
    No usage of bitchanger.components.SimpleChangeableNumber
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/components/package-summary.html b/doc/0.1.4/de_public/bitchanger/components/package-summary.html new file mode 100644 index 0000000..67ad8eb --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/components/package-summary.html @@ -0,0 +1,197 @@ + + + + + +bitchanger.components + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package bitchanger.components

    +
    +
    +
      +
    • + + + + + + + + + + + + + + + + +
      Interface Summary 
      InterfaceDescription
      Calculable 
      ChangeableNumber +
      Schnittstelle, die Methoden definiert, um eine Zahl aus einem beliebigen Zahlensystem + in beliebige andere Zahlensysteme umzuwandeln
      +
      +
    • +
    • + + + + + + + + + + + + + + + + +
      Class Summary 
      ClassDescription
      ConvertingNumbers +
      Die Klasse ConvertingNumbers enthält Methoden zum Umwandeln von Zahlen mit verschiedenen Zahlensystemen.
      +
      SimpleChangeableNumber +
      Die Klasse SimpleChangeableNumber bietet eine vollständige Implementierung von ChangeableNumber.
      +
      +
    • +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/bitchanger/components/package-tree.html b/doc/0.1.4/de_public/bitchanger/components/package-tree.html new file mode 100644 index 0000000..a5da89e --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/components/package-tree.html @@ -0,0 +1,172 @@ + + + + + +bitchanger.components Class Hierarchy + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package bitchanger.components

    +Package Hierarchies: + +
    +
    +
    +

    Class Hierarchy

    + +
    +
    +

    Interface Hierarchy

    + +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/bitchanger/components/package-use.html b/doc/0.1.4/de_public/bitchanger/components/package-use.html new file mode 100644 index 0000000..79f0ca0 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/components/package-use.html @@ -0,0 +1,187 @@ + + + + + +Uses of Package bitchanger.components + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    bitchanger.components

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/Hauptfenster.html b/doc/0.1.4/de_public/bitchanger/gui/Hauptfenster.html new file mode 100644 index 0000000..f9185fb --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/Hauptfenster.html @@ -0,0 +1,421 @@ + + + + + +Hauptfenster + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class Hauptfenster

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • javafx.application.Application
      • +
      • +
          +
        • bitchanger.gui.Hauptfenster
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      public class Hauptfenster
      +extends javafx.application.Application
      +
      Hauptfenster der Applikation mit javaFX +

      + Das Fenster bietet verschiedene Szenen zum Rechnen und Umwandeln von verschiedenen Zahlensystemen. + Über eine Menüleiste kann zwischen den Szenen gewechselt werden, sowie die Programm-Einstellungen geöffnet werden. +

      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim
      +
      See Also:
      +
      ConverterView, +ConverterController
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Nested Class Summary

        +
          +
        • + + +

          Nested classes/interfaces inherited from class javafx.application.Application

          +javafx.application.Application.Parameters
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Field Summary

        +
          +
        • + + +

          Fields inherited from class javafx.application.Application

          +STYLESHEET_CASPIAN, STYLESHEET_MODENA
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + +
        Constructors 
        ConstructorDescription
        Hauptfenster() 
        +
      • +
      +
      + +
      + +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Hauptfenster

          +
          public Hauptfenster()
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          main

          +
          public static void main​(String[] args)
          +
          Startet die Anwendung und öffnet das Applikationsfenster.
          +
          +
          Parameters:
          +
          args - Argumente, die beim Programmstart übergeben werden. Die Argumente werden an die Methode launch weitergegeben und ansonsten ignoriert.
          +
          See Also:
          +
          Application.launch(String...)
          +
          +
        • +
        + + + +
          +
        • +

          start

          +
          public void start​(javafx.stage.Stage primaryStage)
          +           throws Exception
          +
          Diese Methode erstellt den Inhalt für das Hauptfenster und öffnet dieses. +

          + - Es wird eine Menübar erstellt, die in jeder Szene die Steuerung des Fensters erlaubt. +

          +

          + - Die verschiedenen Views für die unterschiedlichen Oberflächen werden erzeugt. +

          +

          + - Die zuletzt geöffnete Szene wird geladen. +

          +

          + - Das in den Einstellungen ausgewählte Stylesheet wird geladen. +

          +

          + - Das Fenster wird formatiert und geöffnet. +

          + + Diese Methode wird erst beendet, wenn das Hauptfenster geschlossen wurde
          +
          +
          Specified by:
          +
          start in class javafx.application.Application
          +
          Throws:
          +
          Exception
          +
          See Also:
          +
          ConverterView
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/class-use/Hauptfenster.html b/doc/0.1.4/de_public/bitchanger/gui/class-use/Hauptfenster.html new file mode 100644 index 0000000..f1707a1 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/class-use/Hauptfenster.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.Hauptfenster + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.Hauptfenster

    +
    +
    No usage of bitchanger.gui.Hauptfenster
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controller/AlphaNumGridController.html b/doc/0.1.4/de_public/bitchanger/gui/controller/AlphaNumGridController.html new file mode 100644 index 0000000..1d94d1e --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controller/AlphaNumGridController.html @@ -0,0 +1,372 @@ + + + + + +AlphaNumGridController + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class AlphaNumGridController

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Controller
      +
      +
      +
      public class AlphaNumGridController
      +extends ControllerBase
      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          AlphaNumGridController

          +
          public AlphaNumGridController​(AlphaNumGrid view)
          +
          Erzeugt einen neuen Controller, der einer AlphaNumGrid eine Funktion gibt.
          +
          +
          Parameters:
          +
          view - AlphaNumGrid, die an diesen Controller gebunden wird
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          initControls

          +
          protected void initControls()
          +
          Initialisiert alle benötigten Bedienelemente mit Referenzen aus den zur Verfügung stehenden Maps.
          +
          +
          Specified by:
          +
          initControls in class ControllerBase
          +
          +
        • +
        + + + +
          +
        • +

          setActions

          +
          public void setActions()
          +
          Setzt alle für die View benötigten Funktionen
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controller/AlphaNumKeysController.html b/doc/0.1.4/de_public/bitchanger/gui/controller/AlphaNumKeysController.html new file mode 100644 index 0000000..3ddd098 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controller/AlphaNumKeysController.html @@ -0,0 +1,407 @@ + + + + + +AlphaNumKeysController + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class AlphaNumKeysController

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Controller
      +
      +
      +
      public class AlphaNumKeysController
      +extends ControllerBase<AlphaNumKeys>
      +
      Dieser Controller gibt den Bedienelementen einer Instanz von AlphaNumKeys eine Funktion und bindet die Simulation der + Tastatur an die gekapselte Scene. +

      + Die Hauptfunktion ist die Simulation einer Tastatur mit den alphanumerischen Buttons. Beim Klick auf einer dieser + Buttons werden die benötigten KeyEvents ausgelöst und an die gebundene Scene weitergeleitet. + Die zur weiteren zur Verfügung gestellten Funktionen sind das Umschalten zwischen den Tastaturmodi, scrollen durch die Tastatur, + Aktualisierung des Komma-Buttons bei Änderung der CommaProperty aus Preferences. +

      +

      + Die Funktion des +/- Buttons zum Vorzeichenwechsel bleibt unbelegt, da weitere Bedienelemente benötigt werden. Die Funktion dieses + Buttons muss in einem anderen Controller implementiert werden. +

      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          AlphaNumKeysController

          +
          public AlphaNumKeysController​(AlphaNumKeys keys,
          +                              javafx.scene.Scene scene)
          +
          Erzeugt einen neuen Controller, der einer AlphaNumKeys eine Funktion gibt.
          +
          +
          Parameters:
          +
          keys - AlphaNumKeys, die an diesen Controller gebunden wird
          +
          scene - Scene, an die dieser Controller gebunden wird, um alle KeyEvents zum Simulieren einer Tastatur weiterzugeben
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          initControls

          +
          protected void initControls()
          +
          Initialisiert alle benötigten Bedienelemente mit Referenzen aus den zur Verfügung stehenden Maps.
          +
          +
          Specified by:
          +
          initControls in class ControllerBase<AlphaNumKeys>
          +
          +
        • +
        + + + +
          +
        • +

          setActions

          +
          public void setActions()
          +
          Setzt die Actions zum Umschalten zwischen den Tastaturmodi, zum scrollen durch die Tastatur, zur Aktualisierung des Komma-Buttons + und simuliert die Tastatureingaben für die alphanumerischen Buttons. +

          + Die Funktion des +/- Buttons zum Vorzeichenwechsel bleibt unbelegt, da weitere Bedienelemente benötigt werden. Die Funktion dieses + Buttons muss in einem anderen Controller implementiert werden. +

          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controller/BasicMenuController.html b/doc/0.1.4/de_public/bitchanger/gui/controller/BasicMenuController.html new file mode 100644 index 0000000..6abd736 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controller/BasicMenuController.html @@ -0,0 +1,563 @@ + + + + + +BasicMenuController + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class BasicMenuController

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          modusConverter

          +
          protected javafx.scene.control.MenuItem modusConverter
          +
        • +
        + + + +
          +
        • +

          modusIEEE

          +
          protected javafx.scene.control.MenuItem modusIEEE
          +
        • +
        + + + +
          +
        • +

          modusCalculator

          +
          protected javafx.scene.control.MenuItem modusCalculator
          +
        • +
        + + + +
          +
        • +

          options

          +
          protected javafx.scene.control.Menu options
          +
        • +
        + + + +
          +
        • +

          styleMenu

          +
          protected javafx.scene.control.Menu styleMenu
          +
        • +
        + + + +
          +
        • +

          styleLight

          +
          protected javafx.scene.control.MenuItem styleLight
          +
        • +
        + + + +
          +
        • +

          styleDark

          +
          protected javafx.scene.control.MenuItem styleDark
          +
        • +
        + + + +
          +
        • +

          moveToScreen

          +
          protected javafx.scene.control.Menu moveToScreen
          +
        • +
        + + + +
          +
        • +

          showFullscreen

          +
          protected javafx.scene.control.CheckMenuItem showFullscreen
          +
        • +
        + + + +
          +
        • +

          about

          +
          protected javafx.scene.control.MenuItem about
          +
        • +
        + + + +
          +
        • +

          version

          +
          protected javafx.scene.control.MenuItem version
          +
        • +
        + + + +
          +
        • +

          resetPreferences

          +
          protected javafx.scene.control.MenuItem resetPreferences
          +
        • +
        +
      • +
      +
      + +
      + +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          initControls

          +
          protected void initControls()
          +
          Initialisiert alle benötigten Bedienelemente mit Referenzen aus den zur Verfügung stehenden Maps.
          +
          +
          Specified by:
          +
          initControls in class ControllerBase<BasicMenuBar>
          +
          +
        • +
        + + + +
          +
        • +

          setActions

          +
          public void setActions()
          +
          Setzt alle für die View benötigten Funktionen.
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controller/Controllable.html b/doc/0.1.4/de_public/bitchanger/gui/controller/Controllable.html new file mode 100644 index 0000000..98d1147 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controller/Controllable.html @@ -0,0 +1,429 @@ + + + + + +Controllable + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface Controllable

    +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeFieldDescription
        static Map<String,​javafx.scene.control.Button>EMPTY_BUTTON_MAP +
        Leere und unveränderliche Map, die als Platzhalter verwendet werden kann, wenn ein Controllable keine + Buttons an seinen Controller übergeben muss
        +
        static Map<String,​javafx.scene.Node>EMPTY_NODE_MAP +
        Leere und unveränderliche Map, die als Platzhalter verwendet werden kann, wenn ein Controllable keine + Nodes an seinen Controller übergeben muss
        +
        static Map<String,​javafx.scene.control.TextField>EMPTY_TEXTFIELD_MAP +
        Leere und unveränderliche Map, die als Platzhalter verwendet werden kann, wenn ein Controllable keine + Textfelder an seinen Controller übergeben muss
        +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Abstract Methods 
        Modifier and TypeMethodDescription
        Map<String,​javafx.scene.control.Button>getButtonMap() +
        Gibt eine Map mit allen Buttons der View zurück.
        +
        Map<String,​javafx.scene.Node>getNodeMap() +
        Gibt eine Map mit allen Elemente (Nodes) der View zurück, die keine Buttons oder Textfelder sind und im Controller benötigt werden.
        +
        Map<String,​javafx.scene.control.TextField>getTextFieldMap() +
        Gibt eine Map mit allen Textfelder der View zurück.
        +
        +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          EMPTY_TEXTFIELD_MAP

          +
          static final Map<String,​javafx.scene.control.TextField> EMPTY_TEXTFIELD_MAP
          +
          Leere und unveränderliche Map, die als Platzhalter verwendet werden kann, wenn ein Controllable keine + Textfelder an seinen Controller übergeben muss
          +
          +
          See Also:
          +
          Collections.emptyMap()
          +
          +
        • +
        + + + +
          +
        • +

          EMPTY_BUTTON_MAP

          +
          static final Map<String,​javafx.scene.control.Button> EMPTY_BUTTON_MAP
          +
          Leere und unveränderliche Map, die als Platzhalter verwendet werden kann, wenn ein Controllable keine + Buttons an seinen Controller übergeben muss
          +
          +
          See Also:
          +
          Collections.emptyMap()
          +
          +
        • +
        + + + +
          +
        • +

          EMPTY_NODE_MAP

          +
          static final Map<String,​javafx.scene.Node> EMPTY_NODE_MAP
          +
          Leere und unveränderliche Map, die als Platzhalter verwendet werden kann, wenn ein Controllable keine + Nodes an seinen Controller übergeben muss
          +
          +
          See Also:
          +
          Collections.emptyMap()
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTextFieldMap

          +
          Map<String,​javafx.scene.control.TextField> getTextFieldMap()
          +
          Gibt eine Map mit allen Textfelder der View zurück. Jedes Textfeld ist einem eindeutigen Schlüsselwort zugeordnet, + mit dem es aus der Map herausgesucht werden kann. +

          + Jedes Schlüsselwort sollte einen Sinnvollen Bezug zum Einsatz des Textfeldes haben! +

          +
          +
          Returns:
          +
          Map, die alle Textfelder einer View enthält
          +
          +
        • +
        + + + +
          +
        • +

          getButtonMap

          +
          Map<String,​javafx.scene.control.Button> getButtonMap()
          +
          Gibt eine Map mit allen Buttons der View zurück. Jeder Button ist einem eindeutigen Schlüsselwort zugeordnet, + mit dem er aus der Map herausgesucht werden kann. +

          + Jedes Schlüsselwort sollte einen Sinnvollen Bezug zum Einsatz des Buttons haben! +

          +
          +
          Returns:
          +
          Map, die alle Buttons einer View enthält
          +
          +
        • +
        + + + +
          +
        • +

          getNodeMap

          +
          Map<String,​javafx.scene.Node> getNodeMap()
          +
          Gibt eine Map mit allen Elemente (Nodes) der View zurück, die keine Buttons oder Textfelder sind und im Controller benötigt werden. + Jedes Element ist einem eindeutigen Schlüsselwort zugeordnet, mit dem es aus der Map herausgesucht werden kann. +

          + Jedes Schlüsselwort sollte einen Sinnvollen Bezug zum Einsatz des Elements haben! +

          +
          +
          Returns:
          +
          Map, die alle Elemente einer View enthält, die keine Buttons oder Textfelder sind und im Controller benötigt werden
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controller/ControllableApplication.html b/doc/0.1.4/de_public/bitchanger/gui/controller/ControllableApplication.html new file mode 100644 index 0000000..3bad534 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controller/ControllableApplication.html @@ -0,0 +1,338 @@ + + + + + +ControllableApplication + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface ControllableApplication

    +
    +
    +
    +
      +
    • +
      +
      All Known Implementing Classes:
      +
      PrimaryFXApp
      +
      +
      +
      public interface ControllableApplication
      +
      Schnittstelle, die Methoden definiert, um eine Application mit einem Controller zu verbinden.
      +
      +
      Since:
      +
      Bitchanger 0.1.4
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      See Also:
      +
      Controller
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          changeView

          +
          default void changeView​(Viewable newView)
          +
          Wechselt die Scene der primaryStage zu Scene des übergebenen Viewable
          +
          +
          Parameters:
          +
          newView - Neue View, die dargestellt werden soll
          +
          +
        • +
        + + + +
          +
        • +

          getPrimaryStage

          +
          javafx.stage.Stage getPrimaryStage()
          +
          Returns the main application window
          +
          +
          Returns:
          +
          main application window
          +
          +
        • +
        + + + +
          +
        • +

          getViewable

          +
          Viewable getViewable​(String key)
          +
          Gibt die mit dem String key verknüpfte View zurück
          +
          +
          Parameters:
          +
          key - Schlüsselwort für die View
          +
          Returns:
          +
          View, die dem Schlüssel zugeordnet ist oder null, wenn keine passende View gefunden wird
          +
          +
        • +
        + + + +
          +
        • +

          getCurrentViewProperty

          +
          javafx.beans.property.ObjectProperty<Viewable> getCurrentViewProperty()
          +
          Gibt die CurrentViewProperty zurück
          +
          +
          Returns:
          +
          CurrentViewProperty
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +
    + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controller/Controller.html b/doc/0.1.4/de_public/bitchanger/gui/controller/Controller.html new file mode 100644 index 0000000..d3885c0 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controller/Controller.html @@ -0,0 +1,424 @@ + + + + + +Controller + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface Controller

    +
    +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          REGISTERED_CONTROLLERS

          +
          static final HashMap<Class<? extends Controllable>,​Class<? extends Controller>> REGISTERED_CONTROLLERS
          +
          Map, die die für ein Controllable registrierten Controller speichert und diese verknüpft
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          register

          +
          static void register​(Class<? extends Controllable> controllable,
          +                     Class<? extends Controller> controller)
          +
          Registriert eine Controller-Klasse für die Factory-Methode of(Controllable) + und ordnet diese einer Controllable-Klasse zu.
          +
          +
          Parameters:
          +
          controllable - Controllable-Klasse, der die Controller-Klasse zugeordnet wird
          +
          controller - Controller-Klasse, die registriert wird
          +
          +
        • +
        + + + +
          +
        • +

          of

          +
          static Controller of​(Controllable c)
          +
          Factory-Methode, die einen neuen Controller für das übergebene Controllable erzeugt und zurückgibt. +

          + Der registrierte Controller muss einen öffentlichen Konstruktor haben, der als einzigen Parameter + das Controllable übergeben bekommt. +

          +

          + Es kann nur ein passender Controller zurückgegeben werden, wenn ein Passendes Wertepaar in + der Map REGISTERED_CONTROLLERS vorhanden ist. Ein Controllable kann einen Controller + mit der Methode register(Class, Class) zugeordnet bekommen. +

          +
          +
          Parameters:
          +
          c - Controllable, das durch den neuen Controller eine Funktion erhalten soll
          +
          Returns:
          +
          neuer Controller, der an das Controllable gebunden ist oder null, wenn kein Controller registriert wurde
          +
          Since:
          +
          Bitchanger 0.1.4
          +
          See Also:
          +
          register(Class, Class)
          +
          +
        • +
        + + + +
          +
        • +

          ofArg

          +
          static Controller ofArg​(Controllable c,
          +                        Object... args)
          +
          Factory-Methode, die einen neuen Controller für das übergebene Controllable erzeugt und zurückgibt. +

          + Der registrierte Controller muss einen öffentlichen Konstruktor haben, der als ersten Parameter + das Controllable übergeben bekommt und alle weiteren übergebenen Objekte ebenfalls in der selben + Reihenfolge erhält, in der diese übergeben wurden. +

          +

          + Es kann nur ein passender Controller zurückgegeben werden, wenn ein Passendes Wertepaar in + der Map REGISTERED_CONTROLLERS vorhanden ist. Ein Controllable kann einen Controller + mit der Methode register(Class, Class) zugeordnet bekommen. +

          +
          +
          Parameters:
          +
          c - Controllable, das durch den neuen Controller eine Funktion erhalten soll
          +
          args - Parameter in der Reihenfolge, wie diese vom Konstruktor benötigt werden
          +
          Returns:
          +
          neuer Controller, der an das Controllable gebunden ist oder null, wenn kein Controller registriert wurde
          +
          Since:
          +
          Bitchanger 0.1.4
          +
          See Also:
          +
          register(Class, Class)
          +
          +
        • +
        + + + +
          +
        • +

          setActions

          +
          void setActions()
          +
          Setzt alle für die View benötigten Funktionen.
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controller/ControllerBase.html b/doc/0.1.4/de_public/bitchanger/gui/controller/ControllerBase.html new file mode 100644 index 0000000..2264938 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controller/ControllerBase.html @@ -0,0 +1,574 @@ + + + + + +ControllerBase + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class ControllerBase<T extends Controllable>

    +
    +
    + +
    +
      +
    • +
      +
      Type Parameters:
      +
      T - Typ des Controllable (wird benötigt, um auf weitere Methoden zugreifen zu können, die nicht in + Controllable definiert sind)
      +
      +
      +
      All Implemented Interfaces:
      +
      Controller
      +
      +
      +
      Direct Known Subclasses:
      +
      AlphaNumKeysController, BasicMenuController, ConverterController, IEEEController
      +
      +
      +
      public abstract class ControllerBase<T extends Controllable>
      +extends Object
      +implements Controller
      +
      Basis für einen Controller, der einer Instanz von Controllable (z.B. eine View) eine Funktion gibt. Die wichtigsten Attribute, + die benötigt werden um Zugriff auf die Bedienelemente des Controllables zu erhalten, werden im Konstruktor initialisiert und sind in + allen Subklassen sichtbar. +

      + Subklassen müssen die Methoden initControls() und Controller.setActions() implementieren, um die Bedienelemente + mit einer Funktion zu belegen. +

      +

      + Jedem Controller kann nur ein einziges Controllable zugewiesen werden. Umgekehrt ist es möglich ein Controllable mit mehreren + Controllern für verschiedene Funktionen zu verbinden. +

      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeFieldDescription
        protected Map<String,​javafx.scene.control.Button>buttonMap +
        Map, die alle Buttons des gekapselten Controllables enthält
        +
        protected Tcontrollable +
        gekapseltes Controllable, dem durch diesen Controller eine Funktion gegeben wird
        +
        protected Map<String,​javafx.scene.Node>nodeMap +
        Map, die alle Nodes des gekapselten Controllables enthält, die eine Funktion erhalten + und weder eine Instanz von Button noch von Textfeld sind
        +
        protected Map<String,​javafx.scene.control.TextField>textFieldMap +
        Map, die alle Textfelder des gekapselten Controllables enthält
        +
        + +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + + + +
        Constructors 
        ModifierConstructorDescription
        protected ControllerBase​(T controllable) +
        Kapselt das übergebene Controllable und initialisiert die Maps mit den Bedienelementen mit Referenzen + auf die zugehörigen Maps des Controllables.
        +
        +
      • +
      +
      + +
      + +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          textFieldMap

          +
          protected Map<String,​javafx.scene.control.TextField> textFieldMap
          +
          Map, die alle Textfelder des gekapselten Controllables enthält
          +
        • +
        + + + +
          +
        • +

          buttonMap

          +
          protected Map<String,​javafx.scene.control.Button> buttonMap
          +
          Map, die alle Buttons des gekapselten Controllables enthält
          +
        • +
        + + + +
          +
        • +

          nodeMap

          +
          protected Map<String,​javafx.scene.Node> nodeMap
          +
          Map, die alle Nodes des gekapselten Controllables enthält, die eine Funktion erhalten + und weder eine Instanz von Button noch von Textfeld sind
          +
        • +
        + + + +
          +
        • +

          controllable

          +
          protected final T extends Controllable controllable
          +
          gekapseltes Controllable, dem durch diesen Controller eine Funktion gegeben wird
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + + + +
          +
        • +

          ControllerBase

          +
          protected ControllerBase​(T controllable)
          +
          Kapselt das übergebene Controllable und initialisiert die Maps mit den Bedienelementen mit Referenzen + auf die zugehörigen Maps des Controllables. +

          + Nach der Initialisierung der allgemeinen Attribute wird die Methode initControls() aufgerufen. +

          +
          +
          Parameters:
          +
          controllable - Controllable, das mit diesem Controller eine Funktion erhält
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          initControls

          +
          protected abstract void initControls()
          +
          Initialisiert alle benötigten Bedienelemente mit Referenzen aus den zur Verfügung stehenden Maps.
          +
        • +
        + + + +
          +
        • +

          simulateKeyEvents

          +
          protected void simulateKeyEvents​(javafx.scene.control.Button source,
          +                                 javafx.scene.Node target,
          +                                 javafx.scene.Scene scene,
          +                                 String character,
          +                                 String text,
          +                                 javafx.scene.input.KeyCode keycode,
          +                                 boolean shiftDown,
          +                                 boolean controlDown,
          +                                 boolean altDown,
          +                                 boolean metaDown)
          +
          Simuliert den Druck der Taste auf einer Tastatur mit dem spezifischen keycode und feuert nacheinander die KeyEvents + KeyEvent.KEY_PRESSED, KeyEvent.KEY_TYPED und KeyEvent.KEY_RELEASED an den gewählten Empfänger + target. Wenn target den Wert null hat, werden die Events an die übergebene Scene scene + weitergeleitet. Sind sowohl target als auch scene null, werden die Events an die Scene von + controllable weitergeleitet, sofern controllable die Schnittstelle Viewable implementiert. +

          + Wenn die Parameter target und scene beide den Wert null haben und controllable nicht die Schnittstelle + Viewable implementiert, werden keine Events gefeuert und die Methode hat keine weiteren Auswirkungen. + Insbesondere wird auch keine Exception geworfen! +

          +
          +
          Parameters:
          +
          source - Quelle des Events, darf null sein
          +
          target - Ziel des Events, darf null sein, wenn das Attribut controllable eine Instanz von Viewable ist
          +
          scene - Scene, die die KeyEvents konsumiert, wenn target den Wert null hat. Darf null sein
          +
          character - Zeichen oder Zeichenkette, die mit dem Event verbunden wird
          +
          text - String, der den KeyCode beschreibt
          +
          keycode - KeyCode, der die Taste repräsentiert
          +
          shiftDown - true, wenn "Shift" gedrückt ist
          +
          controlDown - true, wenn "Strg" gedrückt ist
          +
          altDown - true, wenn "Alt" gedrückt ist
          +
          metaDown - true, wenn die "Meta-"Taste gedrückt wurde (Command-Taste auf macOS bzw. Windows-Taste auf Windows)
          +
          Since:
          +
          Bitchanger 0.1.4
          +
          See Also:
          +
          KeyEvent(Object, javafx.event.EventTarget, javafx.event.EventType, String, String, KeyCode, boolean, boolean, boolean, boolean)
          +
          +
        • +
        + + + + +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controller/ConverterController.html b/doc/0.1.4/de_public/bitchanger/gui/controller/ConverterController.html new file mode 100644 index 0000000..bb3128c --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controller/ConverterController.html @@ -0,0 +1,391 @@ + + + + + +ConverterController + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class ConverterController

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Controller
      +
      +
      +
      public class ConverterController
      +extends ControllerBase<ConverterView>
      +
      Controller, der die Funktion für eine ConverterView bereitstellt.
      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ConverterController

          +
          public ConverterController​(ConverterView view)
          +
          Konstruiert einen neuen Controller für eine ConverterView und verknüpft die benötigten Attribute mit + Referenzen auf die Bedienelemente aus der ConverterView.
          +
          +
          Parameters:
          +
          view - ConverterView, an die dieser Controller gebunden wird
          +
          See Also:
          +
          initControls()
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          initControls

          +
          protected void initControls()
          +
          Initialisiert alle benötigten Bedienelemente mit Referenzen aus den zur Verfügung stehenden Maps.
          +
          +
          Specified by:
          +
          initControls in class ControllerBase<ConverterView>
          +
          +
        • +
        + + + +
          +
        • +

          setActions

          +
          public void setActions()
          +
          Setzt alle für die View benötigten Funktionen.
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controller/ConverterMenuController.html b/doc/0.1.4/de_public/bitchanger/gui/controller/ConverterMenuController.html new file mode 100644 index 0000000..c05f3db --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controller/ConverterMenuController.html @@ -0,0 +1,423 @@ + + + + + +ConverterMenuController + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class ConverterMenuController

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          indicateFractionalInaccuracy

          +
          protected javafx.scene.control.CheckMenuItem indicateFractionalInaccuracy
          +
        • +
        +
      • +
      +
      + +
      + +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          initControls

          +
          protected void initControls()
          +
          Initialisiert alle benötigten Bedienelemente mit Referenzen aus den zur Verfügung stehenden Maps.
          +
          +
          Overrides:
          +
          initControls in class BasicMenuController
          +
          +
        • +
        + + + + +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controller/IEEEController.html b/doc/0.1.4/de_public/bitchanger/gui/controller/IEEEController.html new file mode 100644 index 0000000..3c5d6a7 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controller/IEEEController.html @@ -0,0 +1,371 @@ + + + + + +IEEEController + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class IEEEController

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          IEEEController

          +
          public IEEEController​(IEEEView controllable)
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          initControls

          +
          protected void initControls()
          +
          Initialisiert alle benötigten Bedienelemente mit Referenzen aus den zur Verfügung stehenden Maps.
          +
          +
          Specified by:
          +
          initControls in class ControllerBase<IEEEView>
          +
          +
        • +
        + + + +
          +
        • +

          setActions

          +
          public void setActions()
          +
          Setzt alle für die View benötigten Funktionen.
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controller/IEEEMenuController.html b/doc/0.1.4/de_public/bitchanger/gui/controller/IEEEMenuController.html new file mode 100644 index 0000000..6a78b02 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controller/IEEEMenuController.html @@ -0,0 +1,334 @@ + + + + + +IEEEMenuController + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class IEEEMenuController

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controller/class-use/AlphaNumGridController.html b/doc/0.1.4/de_public/bitchanger/gui/controller/class-use/AlphaNumGridController.html new file mode 100644 index 0000000..4dbc83e --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controller/class-use/AlphaNumGridController.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controller.AlphaNumGridController + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controller.AlphaNumGridController

    +
    +
    No usage of bitchanger.gui.controller.AlphaNumGridController
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controller/class-use/AlphaNumKeysController.html b/doc/0.1.4/de_public/bitchanger/gui/controller/class-use/AlphaNumKeysController.html new file mode 100644 index 0000000..229caef --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controller/class-use/AlphaNumKeysController.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controller.AlphaNumKeysController + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controller.AlphaNumKeysController

    +
    +
    No usage of bitchanger.gui.controller.AlphaNumKeysController
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controller/class-use/BasicMenuController.html b/doc/0.1.4/de_public/bitchanger/gui/controller/class-use/BasicMenuController.html new file mode 100644 index 0000000..e51e308 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controller/class-use/BasicMenuController.html @@ -0,0 +1,200 @@ + + + + + +Uses of Class bitchanger.gui.controller.BasicMenuController + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controller.BasicMenuController

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controller/class-use/Controllable.html b/doc/0.1.4/de_public/bitchanger/gui/controller/class-use/Controllable.html new file mode 100644 index 0000000..59d9c32 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controller/class-use/Controllable.html @@ -0,0 +1,392 @@ + + + + + +Uses of Interface bitchanger.gui.controller.Controllable + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    bitchanger.gui.controller.Controllable

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controller/class-use/ControllableApplication.html b/doc/0.1.4/de_public/bitchanger/gui/controller/class-use/ControllableApplication.html new file mode 100644 index 0000000..f007813 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controller/class-use/ControllableApplication.html @@ -0,0 +1,299 @@ + + + + + +Uses of Interface bitchanger.gui.controller.ControllableApplication + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    bitchanger.gui.controller.ControllableApplication

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controller/class-use/Controller.html b/doc/0.1.4/de_public/bitchanger/gui/controller/class-use/Controller.html new file mode 100644 index 0000000..ef45738 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controller/class-use/Controller.html @@ -0,0 +1,304 @@ + + + + + +Uses of Interface bitchanger.gui.controller.Controller + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    bitchanger.gui.controller.Controller

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controller/class-use/ControllerBase.html b/doc/0.1.4/de_public/bitchanger/gui/controller/class-use/ControllerBase.html new file mode 100644 index 0000000..c1e7e47 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controller/class-use/ControllerBase.html @@ -0,0 +1,225 @@ + + + + + +Uses of Class bitchanger.gui.controller.ControllerBase + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controller.ControllerBase

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controller/class-use/ConverterController.html b/doc/0.1.4/de_public/bitchanger/gui/controller/class-use/ConverterController.html new file mode 100644 index 0000000..6480677 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controller/class-use/ConverterController.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controller.ConverterController + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controller.ConverterController

    +
    +
    No usage of bitchanger.gui.controller.ConverterController
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controller/class-use/ConverterMenuController.html b/doc/0.1.4/de_public/bitchanger/gui/controller/class-use/ConverterMenuController.html new file mode 100644 index 0000000..496e571 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controller/class-use/ConverterMenuController.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controller.ConverterMenuController + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controller.ConverterMenuController

    +
    +
    No usage of bitchanger.gui.controller.ConverterMenuController
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controller/class-use/IEEEController.html b/doc/0.1.4/de_public/bitchanger/gui/controller/class-use/IEEEController.html new file mode 100644 index 0000000..1002aa9 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controller/class-use/IEEEController.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controller.IEEEController + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controller.IEEEController

    +
    +
    No usage of bitchanger.gui.controller.IEEEController
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controller/class-use/IEEEMenuController.html b/doc/0.1.4/de_public/bitchanger/gui/controller/class-use/IEEEMenuController.html new file mode 100644 index 0000000..954e1b0 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controller/class-use/IEEEMenuController.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controller.IEEEMenuController + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controller.IEEEMenuController

    +
    +
    No usage of bitchanger.gui.controller.IEEEMenuController
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controller/package-summary.html b/doc/0.1.4/de_public/bitchanger/gui/controller/package-summary.html new file mode 100644 index 0000000..e736c73 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controller/package-summary.html @@ -0,0 +1,232 @@ + + + + + +bitchanger.gui.controller + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package bitchanger.gui.controller

    +
    +
    +
    + + +
    Stellt Controller bereit, die den Views eine Funktion geben.
    +
    + +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controller/package-tree.html b/doc/0.1.4/de_public/bitchanger/gui/controller/package-tree.html new file mode 100644 index 0000000..a3c743a --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controller/package-tree.html @@ -0,0 +1,184 @@ + + + + + +bitchanger.gui.controller Class Hierarchy + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package bitchanger.gui.controller

    +Package Hierarchies: + +
    +
    +
    +

    Class Hierarchy

    + +
    +
    +

    Interface Hierarchy

    + +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controller/package-use.html b/doc/0.1.4/de_public/bitchanger/gui/controller/package-use.html new file mode 100644 index 0000000..687a48a --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controller/package-use.html @@ -0,0 +1,303 @@ + + + + + +Uses of Package bitchanger.gui.controller + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    bitchanger.gui.controller

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controls/AlphaNumGrid.html b/doc/0.1.4/de_public/bitchanger/gui/controls/AlphaNumGrid.html new file mode 100644 index 0000000..cf04f98 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controls/AlphaNumGrid.html @@ -0,0 +1,582 @@ + + + + + +AlphaNumGrid + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class AlphaNumGrid

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Controllable
      +
      +
      +
      public class AlphaNumGrid
      +extends Object
      +implements Controllable
      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      + +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          AlphaNumGrid

          +
          public AlphaNumGrid​(double spacing)
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTextFieldMap

          +
          public HashMap<String,​javafx.scene.control.TextField> getTextFieldMap()
          +
          Description copied from interface: Controllable
          +
          Gibt eine Map mit allen Textfelder der View zurück. Jedes Textfeld ist einem eindeutigen Schlüsselwort zugeordnet, + mit dem es aus der Map herausgesucht werden kann. +

          + Jedes Schlüsselwort sollte einen Sinnvollen Bezug zum Einsatz des Textfeldes haben! +

          +
          +
          Specified by:
          +
          getTextFieldMap in interface Controllable
          +
          Returns:
          +
          Map, die alle Textfelder einer View enthält
          +
          +
        • +
        + + + +
          +
        • +

          getButtonMap

          +
          public HashMap<String,​javafx.scene.control.Button> getButtonMap()
          +
          Description copied from interface: Controllable
          +
          Gibt eine Map mit allen Buttons der View zurück. Jeder Button ist einem eindeutigen Schlüsselwort zugeordnet, + mit dem er aus der Map herausgesucht werden kann. +

          + Jedes Schlüsselwort sollte einen Sinnvollen Bezug zum Einsatz des Buttons haben! +

          +
          +
          Specified by:
          +
          getButtonMap in interface Controllable
          +
          Returns:
          +
          Map, die alle Buttons einer View enthält
          +
          +
        • +
        + + + +
          +
        • +

          getNodeMap

          +
          public HashMap<String,​javafx.scene.Node> getNodeMap()
          +
          Description copied from interface: Controllable
          +
          Gibt eine Map mit allen Elemente (Nodes) der View zurück, die keine Buttons oder Textfelder sind und im Controller benötigt werden. + Jedes Element ist einem eindeutigen Schlüsselwort zugeordnet, mit dem es aus der Map herausgesucht werden kann. +

          + Jedes Schlüsselwort sollte einen Sinnvollen Bezug zum Einsatz des Elements haben! +

          +
          +
          Specified by:
          +
          getNodeMap in interface Controllable
          +
          Returns:
          +
          Map, die alle Elemente einer View enthält, die keine Buttons oder Textfelder sind und im Controller benötigt werden
          +
          +
        • +
        + + + +
          +
        • +

          getArrowButtons

          +
          public javafx.scene.layout.HBox getArrowButtons()
          +
        • +
        + + + +
          +
        • +

          getButtonMatrix

          +
          public ArrayList<javafx.scene.Node> getButtonMatrix()
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controls/AlphaNumKeys.html b/doc/0.1.4/de_public/bitchanger/gui/controls/AlphaNumKeys.html new file mode 100644 index 0000000..999b582 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controls/AlphaNumKeys.html @@ -0,0 +1,760 @@ + + + + + +AlphaNumKeys + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class AlphaNumKeys

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Controllable
      +
      +
      +
      public class AlphaNumKeys
      +extends Object
      +implements Controllable
      +
      AlphaNumKeys stellt ein Tastaturlayout als 4x5 Matrix bereit. Am linken Rand befinden sich sechs "Alpha-Buttons", die + zur Eingabe von Buchstaben bestimmt sind. Rechts daneben steht ein 3x3 Nummernfeld zur Verfügung, um Zahlen einzugeben. + Die untere Zeile enthält einen Button zum Umschalten in die Alphabet-Ansicht, in der das Alphabet auf allen Alpha- und + Nummern-Buttons abgebildet wird. Zudem gibt es zwei Buttons, mit denen durch die Buchstaben der Tastatur gescrollt werden + kann. Daneben befindet sich ein Button zum invertieren des Vorzeichens einer Zahl, sowie ein Button für die Zahl Null im + Nummernfeld-Modus und ein Button zur Eingabe eines Kommas. + +

      + Die Funktion erhält die Tastaturmatrix durch einen AlphaNumKeysController. +

      +

      + Alle alphanumerischen Buttons sind Instanzen von ValueButton und alle weiteren Buttons sind Instanzen von + UnfocusedButton, um den Fokus nicht auf die Tastatur zu lenken und weitere Funktionen zur Verfügung zu stellen. +

      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      See Also:
      +
      AlphaNumKeysController, +UnfocusedButton, +ValueButton
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeFieldDescription
        static String[]ALPHA_KEYS +
        Array, das die Schlüsselwörter für die Buchstaben-Buttons definiert
        +
        static intCOLUMN_COUNT +
        Konstante, die die Anzahl der Spalten dieser Tastaturmatrix enthält
        +
        static StringCOMMA_BTN_KEY +
        Schlüsselwort für den Komma-Button
        +
        static StringKEYBOARD_BTN_KEY +
        Schlüsselwort für den Button zum Umschalten des Tastaturlayouts
        +
        static StringNEXT_BTN_KEY +
        Schlüsselwort für den Button zum Weiterscrollen durch die Tastatur
        +
        static String[]NUM_KEYS +
        Array, das die Schlüsselwörter für die Zahlen-Buttons definiert
        +
        static StringPREVIOUS_BTN_KEY +
        Schlüsselwort für den Button zum Rückwärtsscrollen durch die Tastatur
        +
        static intROW_COUNT +
        Konstante, die die Anzahl der Zeilen dieser Tastaturmatrix enthält
        +
        static StringSIGN_BTN_KEY +
        Schlüsselwort für den Button zum Vorzeichenwechsel
        +
        javafx.beans.property.DoublePropertyspacingProperty +
        Property für den Abstand der Buttons previousBtn und nextBtn in der HBox arrowButtons
        +
        static StringZERO_BTN_KEY +
        Schlüsselwort für den Button, der die Null repräsentiert
        +
        + +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + + + + + +
        Constructors 
        ConstructorDescription
        AlphaNumKeys​(int firstRow, + int firstColumn, + double spacing, + javafx.scene.Scene scene) +
        Erstellt alle Buttons für das Tastaturlayout und setzt die Constraints für die Positionierung in einer GridPane.
        +
        AlphaNumKeys​(int firstRow, + int firstColumn, + javafx.beans.property.DoubleProperty spacingProperty, + javafx.scene.Scene scene) +
        Erstellt alle Buttons für das Tastaturlayout und setzt die Constraints für die Positionierung in einer GridPane.
        +
        +
      • +
      +
      + +
      + +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          SIGN_BTN_KEY

          +
          public static final String SIGN_BTN_KEY
          +
          Schlüsselwort für den Button zum Vorzeichenwechsel
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          ZERO_BTN_KEY

          +
          public static final String ZERO_BTN_KEY
          +
          Schlüsselwort für den Button, der die Null repräsentiert
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          COMMA_BTN_KEY

          +
          public static final String COMMA_BTN_KEY
          +
          Schlüsselwort für den Komma-Button
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          KEYBOARD_BTN_KEY

          +
          public static final String KEYBOARD_BTN_KEY
          +
          Schlüsselwort für den Button zum Umschalten des Tastaturlayouts
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          NEXT_BTN_KEY

          +
          public static final String NEXT_BTN_KEY
          +
          Schlüsselwort für den Button zum Weiterscrollen durch die Tastatur
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          PREVIOUS_BTN_KEY

          +
          public static final String PREVIOUS_BTN_KEY
          +
          Schlüsselwort für den Button zum Rückwärtsscrollen durch die Tastatur
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          ALPHA_KEYS

          +
          public static final String[] ALPHA_KEYS
          +
          Array, das die Schlüsselwörter für die Buchstaben-Buttons definiert
          +
        • +
        + + + +
          +
        • +

          NUM_KEYS

          +
          public static final String[] NUM_KEYS
          +
          Array, das die Schlüsselwörter für die Zahlen-Buttons definiert
          +
        • +
        + + + +
          +
        • +

          ROW_COUNT

          +
          public static final int ROW_COUNT
          +
          Konstante, die die Anzahl der Zeilen dieser Tastaturmatrix enthält
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          COLUMN_COUNT

          +
          public static final int COLUMN_COUNT
          +
          Konstante, die die Anzahl der Spalten dieser Tastaturmatrix enthält
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          spacingProperty

          +
          public final javafx.beans.property.DoubleProperty spacingProperty
          +
          Property für den Abstand der Buttons previousBtn und nextBtn in der HBox arrowButtons
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          AlphaNumKeys

          +
          public AlphaNumKeys​(int firstRow,
          +                    int firstColumn,
          +                    double spacing,
          +                    javafx.scene.Scene scene)
          +
          Erstellt alle Buttons für das Tastaturlayout und setzt die Constraints für die Positionierung in einer GridPane. + Zudem werden alle Bedienelemente durch einen AlphaNumKeysController mit der entsprechenden Funktion belegt, + um Tastatureingaben zu simulieren. +

          + Wenn firstRow oder firstColumn kleiner als 0 sind, werden keine Buttons erzeugt und nur eine leere + Map bereitgestellt! +

          +
          +
          Parameters:
          +
          firstRow - Erste Zeile, in der die Buttons in einer GridPane positioniert werden
          +
          firstColumn - Erste Spalte, in der die Buttons in einer GridPane positioniert werden
          +
          spacing - Abstand der Buttons previousBtn und nextBtn in der HBox arrowButtons, sollte dem Wert von dem + Abstand in der GridPane entsprechen. Die spacingProperty wird mit diesem Wert initialisiert.
          +
          scene - Scene, an die der Controller gebunden wird und die alle simulierten KeyEvents erhält
          +
          +
        • +
        + + + +
          +
        • +

          AlphaNumKeys

          +
          public AlphaNumKeys​(int firstRow,
          +                    int firstColumn,
          +                    javafx.beans.property.DoubleProperty spacingProperty,
          +                    javafx.scene.Scene scene)
          +
          Erstellt alle Buttons für das Tastaturlayout und setzt die Constraints für die Positionierung in einer GridPane. + Zudem werden alle Bedienelemente durch einen AlphaNumKeysController mit der entsprechenden Funktion belegt, + um Tastatureingaben zu simulieren. +

          + Wenn firstRow oder firstColumn kleiner als 0 sind, werden keine Buttons erzeugt und nur eine leere + Map bereitgestellt! +

          +
          +
          Parameters:
          +
          firstRow - Erste Zeile, in der die Buttons in einer GridPane positioniert werden
          +
          firstColumn - Erste Spalte, in der die Buttons in einer GridPane positioniert werden
          +
          spacingProperty - Property, an die die spacingProperty gebunden wird
          +
          scene - Scene, an die der Controller gebunden wird und die alle simulierten KeyEvents erhält
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTextFieldMap

          +
          public Map<String,​javafx.scene.control.TextField> getTextFieldMap()
          +
          Gibt eine Map mit allen Textfelder der View zurück. Jedes Textfeld ist einem eindeutigen Schlüsselwort zugeordnet, + mit dem es aus der Map herausgesucht werden kann. +

          + Jedes Schlüsselwort sollte einen Sinnvollen Bezug zum Einsatz des Textfeldes haben! +

          +
          +
          Specified by:
          +
          getTextFieldMap in interface Controllable
          +
          Returns:
          +
          Map, die alle Textfelder einer View enthält
          +
          +
        • +
        + + + +
          +
        • +

          getButtonMap

          +
          public Map<String,​javafx.scene.control.Button> getButtonMap()
          +
          Gibt eine Map mit allen Buttons der View zurück. Jeder Button ist einem eindeutigen Schlüsselwort zugeordnet, + mit dem er aus der Map herausgesucht werden kann. +

          + Jedes Schlüsselwort sollte einen Sinnvollen Bezug zum Einsatz des Buttons haben! +

          +
          +
          Specified by:
          +
          getButtonMap in interface Controllable
          +
          Returns:
          +
          Map, die alle Buttons einer View enthält
          +
          +
        • +
        + + + +
          +
        • +

          getNodeMap

          +
          public Map<String,​javafx.scene.Node> getNodeMap()
          +
          Gibt eine Map mit allen Elemente (Nodes) der View zurück, die keine Buttons oder Textfelder sind und im Controller benötigt werden. + Jedes Element ist einem eindeutigen Schlüsselwort zugeordnet, mit dem es aus der Map herausgesucht werden kann. +

          + Jedes Schlüsselwort sollte einen Sinnvollen Bezug zum Einsatz des Elements haben! +

          +
          +
          Specified by:
          +
          getNodeMap in interface Controllable
          +
          Returns:
          +
          Map, die alle Elemente einer View enthält, die keine Buttons oder Textfelder sind und im Controller benötigt werden
          +
          +
        • +
        + + + +
          +
        • +

          getArrowButtons

          +
          public javafx.scene.layout.HBox getArrowButtons()
          +
          Gibt die HBox mit den Buttons, mit denen durch die Tastatur gescrollt werden kann, zurück
          +
          +
          Returns:
          +
          HBox mit den Buttons, mit denen durch die Tastatur gescrollt werden kann
          +
          +
        • +
        + + + +
          +
        • +

          getButtonMatrix

          +
          public ArrayList<javafx.scene.Node> getButtonMatrix()
          +
          Gibt die Liste mit allen Nodes der Tastatur-Matrix zurück. Alle Elemente sind in der Reihenfolge + angeordnet, wie sie Zeilenweise in der Tabelle positioniert sind.
          +
          +
          Returns:
          +
          Liste mit allen Nodes der Tastatur-Matrix
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controls/BaseSpinner.html b/doc/0.1.4/de_public/bitchanger/gui/controls/BaseSpinner.html new file mode 100644 index 0000000..69e0638 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controls/BaseSpinner.html @@ -0,0 +1,393 @@ + + + + + +BaseSpinner + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class BaseSpinner

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • javafx.scene.Node
      • +
      • +
          +
        • javafx.scene.Parent
        • +
        • +
            +
          • javafx.scene.layout.Region
          • +
          • +
              +
            • javafx.scene.control.Control
            • +
            • +
                +
              • javafx.scene.control.Spinner<Integer>
              • +
              • +
                  +
                • bitchanger.gui.controls.BaseSpinner
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      javafx.css.Styleable, javafx.event.EventTarget, javafx.scene.control.Skinnable
      +
      +
      +
      public class BaseSpinner
      +extends javafx.scene.control.Spinner<Integer>
      +
      Spinner, mit dem die Basis für ein Zahlensystem ausgewählt werden kann. + +

      + Diese Klasse erweitert die Funktion der Klasse Spinner<T> so, dass der Benutzer + Eingaben im Editor des Spinners machen darf und der im Editor eingegebenen Wert + automatisch während der Eingabe aktualisiert wird, wenn es sich um einen gültigen + Wert handelt. +

      +
      +
      Since:
      +
      Bitchanger 0.1.2
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Summary

        +
          +
        • + + +

          Fields inherited from class javafx.scene.control.Spinner

          +STYLE_CLASS_ARROWS_ON_LEFT_HORIZONTAL, STYLE_CLASS_ARROWS_ON_LEFT_VERTICAL, STYLE_CLASS_ARROWS_ON_RIGHT_HORIZONTAL, STYLE_CLASS_SPLIT_ARROWS_HORIZONTAL, STYLE_CLASS_SPLIT_ARROWS_VERTICAL
        • +
        +
          +
        • + + +

          Fields inherited from class javafx.scene.layout.Region

          +USE_COMPUTED_SIZE, USE_PREF_SIZE
        • +
        +
          +
        • + + +

          Fields inherited from class javafx.scene.Node

          +BASELINE_OFFSET_SAME_AS_HEIGHT
        • +
        +
      • +
      +
      + +
      + +
      + +
      +
        +
      • + + +

        Method Summary

        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Spinner

          +cancelEdit, commitValue, createDefaultSkin, decrement, decrement, editableProperty, editorProperty, executeAccessibleAction, getClassCssMetaData, getControlCssMetaData, getEditor, getInitialDelay, getPromptText, getRepeatDelay, getValue, getValueFactory, increment, increment, initialDelayProperty, isEditable, promptTextProperty, queryAccessibleAttribute, repeatDelayProperty, setEditable, setInitialDelay, setPromptText, setRepeatDelay, setValueFactory, valueFactoryProperty, valueProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Control

          +computeMaxHeight, computeMaxWidth, computeMinHeight, computeMinWidth, computePrefHeight, computePrefWidth, contextMenuProperty, getBaselineOffset, getContextMenu, getCssMetaData, getInitialFocusTraversable, getSkin, getTooltip, isResizable, layoutChildren, setContextMenu, setSkin, setTooltip, skinProperty, tooltipProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.layout.Region

          +backgroundProperty, borderProperty, cacheShapeProperty, centerShapeProperty, getBackground, getBorder, getHeight, getInsets, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getOpaqueInsets, getPadding, getPrefHeight, getPrefWidth, getShape, getUserAgentStylesheet, getWidth, heightProperty, insetsProperty, isCacheShape, isCenterShape, isScaleShape, isSnapToPixel, layoutInArea, layoutInArea, layoutInArea, layoutInArea, maxHeight, maxHeightProperty, maxWidth, maxWidthProperty, minHeight, minHeightProperty, minWidth, minWidthProperty, opaqueInsetsProperty, paddingProperty, positionInArea, positionInArea, prefHeight, prefHeightProperty, prefWidth, prefWidthProperty, resize, scaleShapeProperty, setBackground, setBorder, setCacheShape, setCenterShape, setHeight, setMaxHeight, setMaxSize, setMaxWidth, setMinHeight, setMinSize, setMinWidth, setOpaqueInsets, setPadding, setPrefHeight, setPrefSize, setPrefWidth, setScaleShape, setShape, setSnapToPixel, setWidth, shapeProperty, snappedBottomInset, snappedLeftInset, snappedRightInset, snappedTopInset, snapPosition, snapPositionX, snapPositionY, snapSize, snapSizeX, snapSizeY, snapSpace, snapSpaceX, snapSpaceY, snapToPixelProperty, widthProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Parent

          +getChildren, getChildrenUnmodifiable, getManagedChildren, getStylesheets, isNeedsLayout, layout, lookup, needsLayoutProperty, requestLayout, requestParentLayout, setNeedsLayout, updateBounds
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Node

          +accessibleHelpProperty, accessibleRoleDescriptionProperty, accessibleRoleProperty, accessibleTextProperty, addEventFilter, addEventHandler, applyCss, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen, contains, contains, cursorProperty, depthTestProperty, disabledProperty, disableProperty, effectiveNodeOrientationProperty, effectProperty, eventDispatcherProperty, fireEvent, focusedProperty, focusTraversableProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getContentBias, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInitialCursor, getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY, getLocalToParentTransform, getLocalToSceneTransform, getNodeOrientation, getOnContextMenuRequested, getOnDragDetected, getOnDragDone, getOnDragDropped, getOnDragEntered, getOnDragExited, getOnDragOver, getOnInputMethodTextChanged, getOnKeyPressed, getOnKeyReleased, getOnKeyTyped, getOnMouseClicked, getOnMouseDragEntered, getOnMouseDragExited, getOnMouseDragged, getOnMouseDragOver, getOnMouseDragReleased, getOnMouseEntered, getOnMouseExited, getOnMouseMoved, getOnMousePressed, getOnMouseReleased, getOnRotate, getOnRotationFinished, getOnRotationStarted, getOnScroll, getOnScrollFinished, getOnScrollStarted, getOnSwipeDown, getOnSwipeLeft, getOnSwipeRight, getOnSwipeUp, getOnTouchMoved, getOnTouchPressed, getOnTouchReleased, getOnTouchStationary, getOnZoom, getOnZoomFinished, getOnZoomStarted, getOpacity, getParent, getProperties, getPseudoClassStates, getRotate, getRotationAxis, getScaleX, getScaleY, getScaleZ, getScene, getStyle, getStyleableParent, getStyleClass, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getTypeSelector, getUserData, getViewOrder, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, isVisible, layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent, localToParent, localToParent, localToParent, localToParent, localToParentTransformProperty, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToSceneTransformProperty, localToScreen, localToScreen, localToScreen, localToScreen, localToScreen, lookupAll, managedProperty, mouseTransparentProperty, nodeOrientationProperty, notifyAccessibleAttributeChanged, onContextMenuRequestedProperty, onDragDetectedProperty, onDragDoneProperty, onDragDroppedProperty, onDragEnteredProperty, onDragExitedProperty, onDragOverProperty, onInputMethodTextChangedProperty, onKeyPressedProperty, onKeyReleasedProperty, onKeyTypedProperty, onMouseClickedProperty, onMouseDragEnteredProperty, onMouseDragExitedProperty, onMouseDraggedProperty, onMouseDragOverProperty, onMouseDragReleasedProperty, onMouseEnteredProperty, onMouseExitedProperty, onMouseMovedProperty, onMousePressedProperty, onMouseReleasedProperty, onRotateProperty, onRotationFinishedProperty, onRotationStartedProperty, onScrollFinishedProperty, onScrollProperty, onScrollStartedProperty, onSwipeDownProperty, onSwipeLeftProperty, onSwipeRightProperty, onSwipeUpProperty, onTouchMovedProperty, onTouchPressedProperty, onTouchReleasedProperty, onTouchStationaryProperty, onZoomFinishedProperty, onZoomProperty, onZoomStartedProperty, opacityProperty, parentProperty, parentToLocal, parentToLocal, parentToLocal, parentToLocal, parentToLocal, pickOnBoundsProperty, pressedProperty, pseudoClassStateChanged, relocate, removeEventFilter, removeEventHandler, requestFocus, resizeRelocate, rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty, scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, screenToLocal, screenToLocal, screenToLocal, setAccessibleHelp, setAccessibleRole, setAccessibleRoleDescription, setAccessibleText, setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest, setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler, setFocused, setFocusTraversable, setHover, setId, setInputMethodRequests, setLayoutX, setLayoutY, setManaged, setMouseTransparent, setNodeOrientation, setOnContextMenuRequested, setOnDragDetected, setOnDragDone, setOnDragDropped, setOnDragEntered, setOnDragExited, setOnDragOver, setOnInputMethodTextChanged, setOnKeyPressed, setOnKeyReleased, setOnKeyTyped, setOnMouseClicked, setOnMouseDragEntered, setOnMouseDragExited, setOnMouseDragged, setOnMouseDragOver, setOnMouseDragReleased, setOnMouseEntered, setOnMouseExited, setOnMouseMoved, setOnMousePressed, setOnMouseReleased, setOnRotate, setOnRotationFinished, setOnRotationStarted, setOnScroll, setOnScrollFinished, setOnScrollStarted, setOnSwipeDown, setOnSwipeLeft, setOnSwipeRight, setOnSwipeUp, setOnTouchMoved, setOnTouchPressed, setOnTouchReleased, setOnTouchStationary, setOnZoom, setOnZoomFinished, setOnZoomStarted, setOpacity, setPickOnBounds, setPressed, setRotate, setRotationAxis, setScaleX, setScaleY, setScaleZ, setStyle, setTranslateX, setTranslateY, setTranslateZ, setUserData, setViewOrder, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, toString, translateXProperty, translateYProperty, translateZProperty, usesMirroring, viewOrderProperty, visibleProperty
        • +
        + +
          +
        • + + +

          Methods inherited from interface javafx.css.Styleable

          +getStyleableNode
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          BaseSpinner

          +
          public BaseSpinner()
          +
          Erzeugt einen BaseSpinner, bei dem die minimale und maximale einstellbare Basis durch die Konstanten + ConvertingNumbers.MIN_BASE und ConvertingNumbers.MAX_BASE gegeben sind. Der Standardwert + wird mit 10 initialisiert.
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controls/BasicMenuBar.html b/doc/0.1.4/de_public/bitchanger/gui/controls/BasicMenuBar.html new file mode 100644 index 0000000..525ae28 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controls/BasicMenuBar.html @@ -0,0 +1,872 @@ + + + + + +BasicMenuBar + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class BasicMenuBar

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • javafx.scene.Node
      • +
      • +
          +
        • javafx.scene.Parent
        • +
        • +
            +
          • javafx.scene.layout.Region
          • +
          • +
              +
            • javafx.scene.control.Control
            • +
            • +
                +
              • javafx.scene.control.MenuBar
              • +
              • +
                  +
                • bitchanger.gui.controls.BasicMenuBar
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Controllable, javafx.css.Styleable, javafx.event.EventTarget, javafx.scene.control.Skinnable
      +
      +
      +
      Direct Known Subclasses:
      +
      ConverterMenuBar
      +
      +
      +
      public class BasicMenuBar
      +extends javafx.scene.control.MenuBar
      +implements Controllable
      +
      Basis Menüleiste, die die allgemein benötigten Menüpunkte enthält. + Über die MenuItems, die in Optionen -> Komma einstellen vorhanden sind, wird + entsprechend das Preferences.commaProperty geändert. + Weitere Funktionen können über Controller hinzugefügt werden.
      +
      +
      Since:
      +
      Bitchanger 0.1.4
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      See Also:
      +
      BasicMenuController
      +
      +
    • +
    +
    +
    +
      +
    • + +
      + +
      + +
      +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + + + + + +
        Constructors 
        ConstructorDescription
        BasicMenuBar() +
        Erzeugt eine neue BasicMenuBar mit allen MenuItems.
        +
        BasicMenuBar​(ControllableApplication controllableApp) +
        Erzeugt eine neue BasicMenuBar mit allen MenuItems, die bereits mit den Basisfunktionen belegt sind.
        +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethodDescription
        Map<String,​javafx.scene.control.Button>getButtonMap() +
        Gibt eine Map mit allen Buttons der View zurück.
        +
        Map<String,​javafx.scene.Node>getNodeMap() +
        Gibt eine Map mit allen Elemente (Nodes) der View zurück, die keine Buttons oder Textfelder sind und im Controller benötigt werden.
        +
        Map<String,​javafx.scene.control.TextField>getTextFieldMap() +
        Gibt eine Map mit allen Textfelder der View zurück.
        +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.MenuBar

          +createDefaultSkin, getClassCssMetaData, getControlCssMetaData, getInitialFocusTraversable, getMenus, isUseSystemMenuBar, setUseSystemMenuBar, useSystemMenuBarProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Control

          +computeMaxHeight, computeMaxWidth, computeMinHeight, computeMinWidth, computePrefHeight, computePrefWidth, contextMenuProperty, executeAccessibleAction, getBaselineOffset, getContextMenu, getCssMetaData, getSkin, getTooltip, isResizable, layoutChildren, queryAccessibleAttribute, setContextMenu, setSkin, setTooltip, skinProperty, tooltipProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.layout.Region

          +backgroundProperty, borderProperty, cacheShapeProperty, centerShapeProperty, getBackground, getBorder, getHeight, getInsets, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getOpaqueInsets, getPadding, getPrefHeight, getPrefWidth, getShape, getUserAgentStylesheet, getWidth, heightProperty, insetsProperty, isCacheShape, isCenterShape, isScaleShape, isSnapToPixel, layoutInArea, layoutInArea, layoutInArea, layoutInArea, maxHeight, maxHeightProperty, maxWidth, maxWidthProperty, minHeight, minHeightProperty, minWidth, minWidthProperty, opaqueInsetsProperty, paddingProperty, positionInArea, positionInArea, prefHeight, prefHeightProperty, prefWidth, prefWidthProperty, resize, scaleShapeProperty, setBackground, setBorder, setCacheShape, setCenterShape, setHeight, setMaxHeight, setMaxSize, setMaxWidth, setMinHeight, setMinSize, setMinWidth, setOpaqueInsets, setPadding, setPrefHeight, setPrefSize, setPrefWidth, setScaleShape, setShape, setSnapToPixel, setWidth, shapeProperty, snappedBottomInset, snappedLeftInset, snappedRightInset, snappedTopInset, snapPosition, snapPositionX, snapPositionY, snapSize, snapSizeX, snapSizeY, snapSpace, snapSpaceX, snapSpaceY, snapToPixelProperty, widthProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Parent

          +getChildren, getChildrenUnmodifiable, getManagedChildren, getStylesheets, isNeedsLayout, layout, lookup, needsLayoutProperty, requestLayout, requestParentLayout, setNeedsLayout, updateBounds
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Node

          +accessibleHelpProperty, accessibleRoleDescriptionProperty, accessibleRoleProperty, accessibleTextProperty, addEventFilter, addEventHandler, applyCss, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen, contains, contains, cursorProperty, depthTestProperty, disabledProperty, disableProperty, effectiveNodeOrientationProperty, effectProperty, eventDispatcherProperty, fireEvent, focusedProperty, focusTraversableProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getContentBias, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInitialCursor, getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY, getLocalToParentTransform, getLocalToSceneTransform, getNodeOrientation, getOnContextMenuRequested, getOnDragDetected, getOnDragDone, getOnDragDropped, getOnDragEntered, getOnDragExited, getOnDragOver, getOnInputMethodTextChanged, getOnKeyPressed, getOnKeyReleased, getOnKeyTyped, getOnMouseClicked, getOnMouseDragEntered, getOnMouseDragExited, getOnMouseDragged, getOnMouseDragOver, getOnMouseDragReleased, getOnMouseEntered, getOnMouseExited, getOnMouseMoved, getOnMousePressed, getOnMouseReleased, getOnRotate, getOnRotationFinished, getOnRotationStarted, getOnScroll, getOnScrollFinished, getOnScrollStarted, getOnSwipeDown, getOnSwipeLeft, getOnSwipeRight, getOnSwipeUp, getOnTouchMoved, getOnTouchPressed, getOnTouchReleased, getOnTouchStationary, getOnZoom, getOnZoomFinished, getOnZoomStarted, getOpacity, getParent, getProperties, getPseudoClassStates, getRotate, getRotationAxis, getScaleX, getScaleY, getScaleZ, getScene, getStyle, getStyleableParent, getStyleClass, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getTypeSelector, getUserData, getViewOrder, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, isVisible, layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent, localToParent, localToParent, localToParent, localToParent, localToParentTransformProperty, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToSceneTransformProperty, localToScreen, localToScreen, localToScreen, localToScreen, localToScreen, lookupAll, managedProperty, mouseTransparentProperty, nodeOrientationProperty, notifyAccessibleAttributeChanged, onContextMenuRequestedProperty, onDragDetectedProperty, onDragDoneProperty, onDragDroppedProperty, onDragEnteredProperty, onDragExitedProperty, onDragOverProperty, onInputMethodTextChangedProperty, onKeyPressedProperty, onKeyReleasedProperty, onKeyTypedProperty, onMouseClickedProperty, onMouseDragEnteredProperty, onMouseDragExitedProperty, onMouseDraggedProperty, onMouseDragOverProperty, onMouseDragReleasedProperty, onMouseEnteredProperty, onMouseExitedProperty, onMouseMovedProperty, onMousePressedProperty, onMouseReleasedProperty, onRotateProperty, onRotationFinishedProperty, onRotationStartedProperty, onScrollFinishedProperty, onScrollProperty, onScrollStartedProperty, onSwipeDownProperty, onSwipeLeftProperty, onSwipeRightProperty, onSwipeUpProperty, onTouchMovedProperty, onTouchPressedProperty, onTouchReleasedProperty, onTouchStationaryProperty, onZoomFinishedProperty, onZoomProperty, onZoomStartedProperty, opacityProperty, parentProperty, parentToLocal, parentToLocal, parentToLocal, parentToLocal, parentToLocal, pickOnBoundsProperty, pressedProperty, pseudoClassStateChanged, relocate, removeEventFilter, removeEventHandler, requestFocus, resizeRelocate, rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty, scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, screenToLocal, screenToLocal, screenToLocal, setAccessibleHelp, setAccessibleRole, setAccessibleRoleDescription, setAccessibleText, setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest, setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler, setFocused, setFocusTraversable, setHover, setId, setInputMethodRequests, setLayoutX, setLayoutY, setManaged, setMouseTransparent, setNodeOrientation, setOnContextMenuRequested, setOnDragDetected, setOnDragDone, setOnDragDropped, setOnDragEntered, setOnDragExited, setOnDragOver, setOnInputMethodTextChanged, setOnKeyPressed, setOnKeyReleased, setOnKeyTyped, setOnMouseClicked, setOnMouseDragEntered, setOnMouseDragExited, setOnMouseDragged, setOnMouseDragOver, setOnMouseDragReleased, setOnMouseEntered, setOnMouseExited, setOnMouseMoved, setOnMousePressed, setOnMouseReleased, setOnRotate, setOnRotationFinished, setOnRotationStarted, setOnScroll, setOnScrollFinished, setOnScrollStarted, setOnSwipeDown, setOnSwipeLeft, setOnSwipeRight, setOnSwipeUp, setOnTouchMoved, setOnTouchPressed, setOnTouchReleased, setOnTouchStationary, setOnZoom, setOnZoomFinished, setOnZoomStarted, setOpacity, setPickOnBounds, setPressed, setRotate, setRotationAxis, setScaleX, setScaleY, setScaleZ, setStyle, setTranslateX, setTranslateY, setTranslateZ, setUserData, setViewOrder, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, toString, translateXProperty, translateYProperty, translateZProperty, usesMirroring, viewOrderProperty, visibleProperty
        • +
        + +
          +
        • + + +

          Methods inherited from interface javafx.css.Styleable

          +getStyleableNode
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + + + + + +
          +
        • +

          OPTIONS_MENU_KEY

          +
          public static final String OPTIONS_MENU_KEY
          +
          Schlüsselwort, mit dem das Menu "Optionen" in der Map menuItemMap abgelegt ist
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + + + + + + + + + +
          +
        • +

          MODUS_CONVERTER_ITEM_KEY

          +
          public static final String MODUS_CONVERTER_ITEM_KEY
          +
          Schlüsselwort, mit dem das MenuItem "Umrechner" in der Map menuItemMap abgelegt ist
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          MODUS_IEEE_ITEM_KEY

          +
          public static final String MODUS_IEEE_ITEM_KEY
          +
          Schlüsselwort, mit dem das MenuItem "IEEE" in der Map menuItemMap abgelegt ist
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          MODUS_CALCULATOR_ITEM_KEY

          +
          public static final String MODUS_CALCULATOR_ITEM_KEY
          +
          Schlüsselwort, mit dem das MenuItem "Berechnungen" in der Map menuItemMap abgelegt ist
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          VIEW_STYLE_MENU_KEY

          +
          public static final String VIEW_STYLE_MENU_KEY
          +
          Schlüsselwort, mit dem das Menu "Stil" in der Map menuItemMap abgelegt ist
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          VIEW_STYLE_LIGHT_ITEM_KEY

          +
          public static final String VIEW_STYLE_LIGHT_ITEM_KEY
          +
          Schlüsselwort, mit dem das MenuItem "Hell" in der Map menuItemMap abgelegt ist
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          VIEW_STYLE_DARK_ITEM_KEY

          +
          public static final String VIEW_STYLE_DARK_ITEM_KEY
          +
          Schlüsselwort, mit dem das MenuItem "Dunkel" in der Map menuItemMap abgelegt ist
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          VIEW_MOVE_TO_SCREEN_ITEM_KEY

          +
          public static final String VIEW_MOVE_TO_SCREEN_ITEM_KEY
          +
          Schlüsselwort, mit dem das MenuItem "Auf Monitor bewegen" in der Map menuItemMap abgelegt ist
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          VIEW_SHOW_FULLSCREEN_ITEM_KEY

          +
          public static final String VIEW_SHOW_FULLSCREEN_ITEM_KEY
          +
          Schlüsselwort, mit dem das CheckMenuItem "Vollbild" in der Map menuItemMap abgelegt ist
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          HELP_ABOUT_ITEM_KEY

          +
          public static final String HELP_ABOUT_ITEM_KEY
          +
          Schlüsselwort, mit dem das MenuItem "Über" in der Map menuItemMap abgelegt ist
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          HELP_VERSION_ITEM_KEY

          +
          public static final String HELP_VERSION_ITEM_KEY
          +
          Schlüsselwort, mit dem das MenuItem "Version" in der Map menuItemMap abgelegt ist
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          HELP_RESET_PREFS_ITEM_KEY

          +
          public static final String HELP_RESET_PREFS_ITEM_KEY
          +
          Schlüsselwort, mit dem das MenuItem "Einstellungen zurücksetzen" in der Map menuItemMap abgelegt ist
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          menuItemMap

          +
          public final HashMap<String,​javafx.scene.control.MenuItem> menuItemMap
          +
          Map, in der alle vom Controller benötigten MenuItems mit einem eindeutigen Schlüssel abgelegt werden
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          BasicMenuBar

          +
          public BasicMenuBar()
          +
          Erzeugt eine neue BasicMenuBar mit allen MenuItems. Die einzige bereitgestellte Funktion ist + die Änderung des CommaProperty in Preferences.getPrefs() zu englisch oder deutsch.
          +
        • +
        + + + +
          +
        • +

          BasicMenuBar

          +
          public BasicMenuBar​(ControllableApplication controllableApp)
          +             throws NullPointerException
          +
          Erzeugt eine neue BasicMenuBar mit allen MenuItems, die bereits mit den Basisfunktionen belegt sind.
          +
          +
          Parameters:
          +
          controllableApp - Anwendungsklasse, mit der die Basisfunktionen verknüpft werden
          +
          Throws:
          +
          NullPointerException - wenn der Parameter controllableApp null ist
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTextFieldMap

          +
          public Map<String,​javafx.scene.control.TextField> getTextFieldMap()
          +
          Gibt eine Map mit allen Textfelder der View zurück. Jedes Textfeld ist einem eindeutigen Schlüsselwort zugeordnet, + mit dem es aus der Map herausgesucht werden kann. +

          + Jedes Schlüsselwort sollte einen Sinnvollen Bezug zum Einsatz des Textfeldes haben! +

          +
          +
          Specified by:
          +
          getTextFieldMap in interface Controllable
          +
          Returns:
          +
          Map, die alle Textfelder einer View enthält
          +
          +
        • +
        + + + +
          +
        • +

          getButtonMap

          +
          public Map<String,​javafx.scene.control.Button> getButtonMap()
          +
          Gibt eine Map mit allen Buttons der View zurück. Jeder Button ist einem eindeutigen Schlüsselwort zugeordnet, + mit dem er aus der Map herausgesucht werden kann. +

          + Jedes Schlüsselwort sollte einen Sinnvollen Bezug zum Einsatz des Buttons haben! +

          +
          +
          Specified by:
          +
          getButtonMap in interface Controllable
          +
          Returns:
          +
          Map, die alle Buttons einer View enthält
          +
          +
        • +
        + + + +
          +
        • +

          getNodeMap

          +
          public Map<String,​javafx.scene.Node> getNodeMap()
          +
          Gibt eine Map mit allen Elemente (Nodes) der View zurück, die keine Buttons oder Textfelder sind und im Controller benötigt werden. + Jedes Element ist einem eindeutigen Schlüsselwort zugeordnet, mit dem es aus der Map herausgesucht werden kann. +

          + Jedes Schlüsselwort sollte einen Sinnvollen Bezug zum Einsatz des Elements haben! +

          +
          +
          Specified by:
          +
          getNodeMap in interface Controllable
          +
          Returns:
          +
          Map, die alle Elemente einer View enthält, die keine Buttons oder Textfelder sind und im Controller benötigt werden
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controls/ConverterMenuBar.html b/doc/0.1.4/de_public/bitchanger/gui/controls/ConverterMenuBar.html new file mode 100644 index 0000000..d976bdb --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controls/ConverterMenuBar.html @@ -0,0 +1,447 @@ + + + + + +ConverterMenuBar + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class ConverterMenuBar

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • javafx.scene.Node
      • +
      • +
          +
        • javafx.scene.Parent
        • +
        • +
            +
          • javafx.scene.layout.Region
          • +
          • + +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Controllable, javafx.css.Styleable, javafx.event.EventTarget, javafx.scene.control.Skinnable
      +
      +
      +
      public class ConverterMenuBar
      +extends BasicMenuBar
      +
    • +
    +
    +
    +
      +
    • + +
      + +
      + +
      + +
      + +
      +
        +
      • + + +

        Method Summary

        + +
          +
        • + + +

          Methods inherited from class javafx.scene.control.MenuBar

          +createDefaultSkin, getClassCssMetaData, getControlCssMetaData, getInitialFocusTraversable, getMenus, isUseSystemMenuBar, setUseSystemMenuBar, useSystemMenuBarProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Control

          +computeMaxHeight, computeMaxWidth, computeMinHeight, computeMinWidth, computePrefHeight, computePrefWidth, contextMenuProperty, executeAccessibleAction, getBaselineOffset, getContextMenu, getCssMetaData, getSkin, getTooltip, isResizable, layoutChildren, queryAccessibleAttribute, setContextMenu, setSkin, setTooltip, skinProperty, tooltipProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.layout.Region

          +backgroundProperty, borderProperty, cacheShapeProperty, centerShapeProperty, getBackground, getBorder, getHeight, getInsets, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getOpaqueInsets, getPadding, getPrefHeight, getPrefWidth, getShape, getUserAgentStylesheet, getWidth, heightProperty, insetsProperty, isCacheShape, isCenterShape, isScaleShape, isSnapToPixel, layoutInArea, layoutInArea, layoutInArea, layoutInArea, maxHeight, maxHeightProperty, maxWidth, maxWidthProperty, minHeight, minHeightProperty, minWidth, minWidthProperty, opaqueInsetsProperty, paddingProperty, positionInArea, positionInArea, prefHeight, prefHeightProperty, prefWidth, prefWidthProperty, resize, scaleShapeProperty, setBackground, setBorder, setCacheShape, setCenterShape, setHeight, setMaxHeight, setMaxSize, setMaxWidth, setMinHeight, setMinSize, setMinWidth, setOpaqueInsets, setPadding, setPrefHeight, setPrefSize, setPrefWidth, setScaleShape, setShape, setSnapToPixel, setWidth, shapeProperty, snappedBottomInset, snappedLeftInset, snappedRightInset, snappedTopInset, snapPosition, snapPositionX, snapPositionY, snapSize, snapSizeX, snapSizeY, snapSpace, snapSpaceX, snapSpaceY, snapToPixelProperty, widthProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Parent

          +getChildren, getChildrenUnmodifiable, getManagedChildren, getStylesheets, isNeedsLayout, layout, lookup, needsLayoutProperty, requestLayout, requestParentLayout, setNeedsLayout, updateBounds
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Node

          +accessibleHelpProperty, accessibleRoleDescriptionProperty, accessibleRoleProperty, accessibleTextProperty, addEventFilter, addEventHandler, applyCss, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen, contains, contains, cursorProperty, depthTestProperty, disabledProperty, disableProperty, effectiveNodeOrientationProperty, effectProperty, eventDispatcherProperty, fireEvent, focusedProperty, focusTraversableProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getContentBias, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInitialCursor, getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY, getLocalToParentTransform, getLocalToSceneTransform, getNodeOrientation, getOnContextMenuRequested, getOnDragDetected, getOnDragDone, getOnDragDropped, getOnDragEntered, getOnDragExited, getOnDragOver, getOnInputMethodTextChanged, getOnKeyPressed, getOnKeyReleased, getOnKeyTyped, getOnMouseClicked, getOnMouseDragEntered, getOnMouseDragExited, getOnMouseDragged, getOnMouseDragOver, getOnMouseDragReleased, getOnMouseEntered, getOnMouseExited, getOnMouseMoved, getOnMousePressed, getOnMouseReleased, getOnRotate, getOnRotationFinished, getOnRotationStarted, getOnScroll, getOnScrollFinished, getOnScrollStarted, getOnSwipeDown, getOnSwipeLeft, getOnSwipeRight, getOnSwipeUp, getOnTouchMoved, getOnTouchPressed, getOnTouchReleased, getOnTouchStationary, getOnZoom, getOnZoomFinished, getOnZoomStarted, getOpacity, getParent, getProperties, getPseudoClassStates, getRotate, getRotationAxis, getScaleX, getScaleY, getScaleZ, getScene, getStyle, getStyleableParent, getStyleClass, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getTypeSelector, getUserData, getViewOrder, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, isVisible, layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent, localToParent, localToParent, localToParent, localToParent, localToParentTransformProperty, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToSceneTransformProperty, localToScreen, localToScreen, localToScreen, localToScreen, localToScreen, lookupAll, managedProperty, mouseTransparentProperty, nodeOrientationProperty, notifyAccessibleAttributeChanged, onContextMenuRequestedProperty, onDragDetectedProperty, onDragDoneProperty, onDragDroppedProperty, onDragEnteredProperty, onDragExitedProperty, onDragOverProperty, onInputMethodTextChangedProperty, onKeyPressedProperty, onKeyReleasedProperty, onKeyTypedProperty, onMouseClickedProperty, onMouseDragEnteredProperty, onMouseDragExitedProperty, onMouseDraggedProperty, onMouseDragOverProperty, onMouseDragReleasedProperty, onMouseEnteredProperty, onMouseExitedProperty, onMouseMovedProperty, onMousePressedProperty, onMouseReleasedProperty, onRotateProperty, onRotationFinishedProperty, onRotationStartedProperty, onScrollFinishedProperty, onScrollProperty, onScrollStartedProperty, onSwipeDownProperty, onSwipeLeftProperty, onSwipeRightProperty, onSwipeUpProperty, onTouchMovedProperty, onTouchPressedProperty, onTouchReleasedProperty, onTouchStationaryProperty, onZoomFinishedProperty, onZoomProperty, onZoomStartedProperty, opacityProperty, parentProperty, parentToLocal, parentToLocal, parentToLocal, parentToLocal, parentToLocal, pickOnBoundsProperty, pressedProperty, pseudoClassStateChanged, relocate, removeEventFilter, removeEventHandler, requestFocus, resizeRelocate, rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty, scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, screenToLocal, screenToLocal, screenToLocal, setAccessibleHelp, setAccessibleRole, setAccessibleRoleDescription, setAccessibleText, setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest, setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler, setFocused, setFocusTraversable, setHover, setId, setInputMethodRequests, setLayoutX, setLayoutY, setManaged, setMouseTransparent, setNodeOrientation, setOnContextMenuRequested, setOnDragDetected, setOnDragDone, setOnDragDropped, setOnDragEntered, setOnDragExited, setOnDragOver, setOnInputMethodTextChanged, setOnKeyPressed, setOnKeyReleased, setOnKeyTyped, setOnMouseClicked, setOnMouseDragEntered, setOnMouseDragExited, setOnMouseDragged, setOnMouseDragOver, setOnMouseDragReleased, setOnMouseEntered, setOnMouseExited, setOnMouseMoved, setOnMousePressed, setOnMouseReleased, setOnRotate, setOnRotationFinished, setOnRotationStarted, setOnScroll, setOnScrollFinished, setOnScrollStarted, setOnSwipeDown, setOnSwipeLeft, setOnSwipeRight, setOnSwipeUp, setOnTouchMoved, setOnTouchPressed, setOnTouchReleased, setOnTouchStationary, setOnZoom, setOnZoomFinished, setOnZoomStarted, setOpacity, setPickOnBounds, setPressed, setRotate, setRotationAxis, setScaleX, setScaleY, setScaleZ, setStyle, setTranslateX, setTranslateY, setTranslateZ, setUserData, setViewOrder, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, toString, translateXProperty, translateYProperty, translateZProperty, usesMirroring, viewOrderProperty, visibleProperty
        • +
        + +
          +
        • + + +

          Methods inherited from interface javafx.css.Styleable

          +getStyleableNode
        • +
        +
      • +
      +
      +
    • +
    +
    +
    + +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controls/InformationDialog.InformationType.html b/doc/0.1.4/de_public/bitchanger/gui/controls/InformationDialog.InformationType.html new file mode 100644 index 0000000..a6bc6d5 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controls/InformationDialog.InformationType.html @@ -0,0 +1,396 @@ + + + + + +InformationDialog.InformationType + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Enum InformationDialog.InformationType

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      + +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          values

          +
          public static InformationDialog.InformationType[] values()
          +
          Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
          +for (InformationDialog.InformationType c : InformationDialog.InformationType.values())
          +    System.out.println(c);
          +
          +
          +
          Returns:
          +
          an array containing the constants of this enum type, in the order they are declared
          +
          +
        • +
        + + + +
          +
        • +

          valueOf

          +
          public static InformationDialog.InformationType valueOf​(String name)
          +
          Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
          +
          +
          Parameters:
          +
          name - the name of the enum constant to be returned.
          +
          Returns:
          +
          the enum constant with the specified name
          +
          Throws:
          +
          IllegalArgumentException - if this enum type has no constant with the specified name
          +
          NullPointerException - if the argument is null
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controls/InformationDialog.html b/doc/0.1.4/de_public/bitchanger/gui/controls/InformationDialog.html new file mode 100644 index 0000000..0559a95 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controls/InformationDialog.html @@ -0,0 +1,340 @@ + + + + + +InformationDialog + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class InformationDialog

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • javafx.scene.control.Dialog<javafx.scene.control.ButtonType>
      • +
      • +
          +
        • javafx.scene.control.Alert
        • +
        • +
            +
          • bitchanger.gui.controls.InformationDialog
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      javafx.event.EventTarget
      +
      +
      +
      public class InformationDialog
      +extends javafx.scene.control.Alert
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Nested Class Summary

        + + + + + + + + + + + + +
        Nested Classes 
        Modifier and TypeClassDescription
        static class InformationDialog.InformationType 
        +
          +
        • + + +

          Nested classes/interfaces inherited from class javafx.scene.control.Alert

          +javafx.scene.control.Alert.AlertType
        • +
        +
      • +
      +
      + +
      + +
      + +
      +
        +
      • + + +

        Method Summary

        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Alert

          +alertTypeProperty, getAlertType, getButtonTypes, setAlertType
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Dialog

          +buildEventDispatchChain, close, contentTextProperty, dialogPaneProperty, getContentText, getDialogPane, getGraphic, getHeaderText, getHeight, getModality, getOnCloseRequest, getOnHidden, getOnHiding, getOnShowing, getOnShown, getOwner, getResult, getResultConverter, getTitle, getWidth, getX, getY, graphicProperty, headerTextProperty, heightProperty, hide, initModality, initOwner, initStyle, isResizable, isShowing, onCloseRequestProperty, onHiddenProperty, onHidingProperty, onShowingProperty, onShownProperty, resizableProperty, resultConverterProperty, resultProperty, setContentText, setDialogPane, setGraphic, setHeaderText, setHeight, setOnCloseRequest, setOnHidden, setOnHiding, setOnShowing, setOnShown, setResizable, setResult, setResultConverter, setTitle, setWidth, setX, setY, show, showAndWait, showingProperty, titleProperty, widthProperty, xProperty, yProperty
        • +
        + +
      • +
      +
      +
    • +
    +
    +
    + +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controls/SVGIcon.html b/doc/0.1.4/de_public/bitchanger/gui/controls/SVGIcon.html new file mode 100644 index 0000000..d8c0111 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controls/SVGIcon.html @@ -0,0 +1,411 @@ + + + + + +SVGIcon + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class SVGIcon

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • javafx.scene.Node
      • +
      • +
          +
        • javafx.scene.shape.Shape
        • +
        • +
            +
          • javafx.scene.shape.SVGPath
          • +
          • +
              +
            • bitchanger.gui.controls.SVGIcon
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      javafx.css.Styleable, javafx.event.EventTarget
      +
      +
      +
      public class SVGIcon
      +extends javafx.scene.shape.SVGPath
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Summary

        +
          +
        • + + +

          Fields inherited from class javafx.scene.Node

          +BASELINE_OFFSET_SAME_AS_HEIGHT
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + + + + + + + + + +
        Constructors 
        ConstructorDescription
        SVGIcon() 
        SVGIcon​(File svgFile) 
        SVGIcon​(javafx.scene.shape.SVGPath svgPath) 
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethodDescription
        booleanhasPath() 
        voidsetSVG​(javafx.scene.shape.SVGPath svgPath) 
        +
          +
        • + + +

          Methods inherited from class javafx.scene.shape.SVGPath

          +contentProperty, fillRuleProperty, getContent, getFillRule, setContent, setFillRule, toString
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.shape.Shape

          +fillProperty, getClassCssMetaData, getCssMetaData, getFill, getStroke, getStrokeDashArray, getStrokeDashOffset, getStrokeLineCap, getStrokeLineJoin, getStrokeMiterLimit, getStrokeType, getStrokeWidth, intersect, isSmooth, setFill, setSmooth, setStroke, setStrokeDashOffset, setStrokeLineCap, setStrokeLineJoin, setStrokeMiterLimit, setStrokeType, setStrokeWidth, smoothProperty, strokeDashOffsetProperty, strokeLineCapProperty, strokeLineJoinProperty, strokeMiterLimitProperty, strokeProperty, strokeTypeProperty, strokeWidthProperty, subtract, union
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Node

          +accessibleHelpProperty, accessibleRoleDescriptionProperty, accessibleRoleProperty, accessibleTextProperty, addEventFilter, addEventHandler, applyCss, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen, contains, contains, cursorProperty, depthTestProperty, disabledProperty, disableProperty, effectiveNodeOrientationProperty, effectProperty, eventDispatcherProperty, executeAccessibleAction, fireEvent, focusedProperty, focusTraversableProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBaselineOffset, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getContentBias, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInitialCursor, getInitialFocusTraversable, getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY, getLocalToParentTransform, getLocalToSceneTransform, getNodeOrientation, getOnContextMenuRequested, getOnDragDetected, getOnDragDone, getOnDragDropped, getOnDragEntered, getOnDragExited, getOnDragOver, getOnInputMethodTextChanged, getOnKeyPressed, getOnKeyReleased, getOnKeyTyped, getOnMouseClicked, getOnMouseDragEntered, getOnMouseDragExited, getOnMouseDragged, getOnMouseDragOver, getOnMouseDragReleased, getOnMouseEntered, getOnMouseExited, getOnMouseMoved, getOnMousePressed, getOnMouseReleased, getOnRotate, getOnRotationFinished, getOnRotationStarted, getOnScroll, getOnScrollFinished, getOnScrollStarted, getOnSwipeDown, getOnSwipeLeft, getOnSwipeRight, getOnSwipeUp, getOnTouchMoved, getOnTouchPressed, getOnTouchReleased, getOnTouchStationary, getOnZoom, getOnZoomFinished, getOnZoomStarted, getOpacity, getParent, getProperties, getPseudoClassStates, getRotate, getRotationAxis, getScaleX, getScaleY, getScaleZ, getScene, getStyle, getStyleableParent, getStyleClass, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getTypeSelector, getUserData, getViewOrder, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, isResizable, isVisible, layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent, localToParent, localToParent, localToParent, localToParent, localToParentTransformProperty, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToSceneTransformProperty, localToScreen, localToScreen, localToScreen, localToScreen, localToScreen, lookup, lookupAll, managedProperty, maxHeight, maxWidth, minHeight, minWidth, mouseTransparentProperty, nodeOrientationProperty, notifyAccessibleAttributeChanged, onContextMenuRequestedProperty, onDragDetectedProperty, onDragDoneProperty, onDragDroppedProperty, onDragEnteredProperty, onDragExitedProperty, onDragOverProperty, onInputMethodTextChangedProperty, onKeyPressedProperty, onKeyReleasedProperty, onKeyTypedProperty, onMouseClickedProperty, onMouseDragEnteredProperty, onMouseDragExitedProperty, onMouseDraggedProperty, onMouseDragOverProperty, onMouseDragReleasedProperty, onMouseEnteredProperty, onMouseExitedProperty, onMouseMovedProperty, onMousePressedProperty, onMouseReleasedProperty, onRotateProperty, onRotationFinishedProperty, onRotationStartedProperty, onScrollFinishedProperty, onScrollProperty, onScrollStartedProperty, onSwipeDownProperty, onSwipeLeftProperty, onSwipeRightProperty, onSwipeUpProperty, onTouchMovedProperty, onTouchPressedProperty, onTouchReleasedProperty, onTouchStationaryProperty, onZoomFinishedProperty, onZoomProperty, onZoomStartedProperty, opacityProperty, parentProperty, parentToLocal, parentToLocal, parentToLocal, parentToLocal, parentToLocal, pickOnBoundsProperty, prefHeight, prefWidth, pressedProperty, pseudoClassStateChanged, queryAccessibleAttribute, relocate, removeEventFilter, removeEventHandler, requestFocus, resize, resizeRelocate, rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty, scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, screenToLocal, screenToLocal, screenToLocal, setAccessibleHelp, setAccessibleRole, setAccessibleRoleDescription, setAccessibleText, setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest, setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler, setFocused, setFocusTraversable, setHover, setId, setInputMethodRequests, setLayoutX, setLayoutY, setManaged, setMouseTransparent, setNodeOrientation, setOnContextMenuRequested, setOnDragDetected, setOnDragDone, setOnDragDropped, setOnDragEntered, setOnDragExited, setOnDragOver, setOnInputMethodTextChanged, setOnKeyPressed, setOnKeyReleased, setOnKeyTyped, setOnMouseClicked, setOnMouseDragEntered, setOnMouseDragExited, setOnMouseDragged, setOnMouseDragOver, setOnMouseDragReleased, setOnMouseEntered, setOnMouseExited, setOnMouseMoved, setOnMousePressed, setOnMouseReleased, setOnRotate, setOnRotationFinished, setOnRotationStarted, setOnScroll, setOnScrollFinished, setOnScrollStarted, setOnSwipeDown, setOnSwipeLeft, setOnSwipeRight, setOnSwipeUp, setOnTouchMoved, setOnTouchPressed, setOnTouchReleased, setOnTouchStationary, setOnZoom, setOnZoomFinished, setOnZoomStarted, setOpacity, setPickOnBounds, setPressed, setRotate, setRotationAxis, setScaleX, setScaleY, setScaleZ, setStyle, setTranslateX, setTranslateY, setTranslateZ, setUserData, setViewOrder, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, translateXProperty, translateYProperty, translateZProperty, usesMirroring, viewOrderProperty, visibleProperty
        • +
        + +
          +
        • + + +

          Methods inherited from interface javafx.css.Styleable

          +getStyleableNode
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          SVGIcon

          +
          public SVGIcon()
          +
        • +
        + + + +
          +
        • +

          SVGIcon

          +
          public SVGIcon​(File svgFile)
          +
        • +
        + + + +
          +
        • +

          SVGIcon

          +
          public SVGIcon​(javafx.scene.shape.SVGPath svgPath)
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          setSVG

          +
          public void setSVG​(javafx.scene.shape.SVGPath svgPath)
          +
        • +
        + + + +
          +
        • +

          hasPath

          +
          public boolean hasPath()
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controls/UnfocusedButton.html b/doc/0.1.4/de_public/bitchanger/gui/controls/UnfocusedButton.html new file mode 100644 index 0000000..0c14915 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controls/UnfocusedButton.html @@ -0,0 +1,534 @@ + + + + + +UnfocusedButton + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class UnfocusedButton

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • javafx.scene.Node
      • +
      • +
          +
        • javafx.scene.Parent
        • +
        • +
            +
          • javafx.scene.layout.Region
          • +
          • +
              +
            • javafx.scene.control.Control
            • +
            • +
                +
              • javafx.scene.control.Labeled
              • +
              • +
                  +
                • javafx.scene.control.ButtonBase
                • +
                • +
                    +
                  • javafx.scene.control.Button
                  • +
                  • +
                      +
                    • bitchanger.gui.controls.UnfocusedButton
                    • +
                    +
                  • +
                  +
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      javafx.css.Styleable, javafx.event.EventTarget, javafx.scene.control.Skinnable
      +
      +
      +
      Direct Known Subclasses:
      +
      ValueButton
      +
      +
      +
      public class UnfocusedButton
      +extends javafx.scene.control.Button
      +
      Button, der beim Klick nicht den Fokus erhält und als Grundform ein Rechteck ohne abgerundete Ecken besitzt.
      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + +
        Fields 
        Modifier and TypeFieldDescription
        static doubleDEFAULT_GRAPHIC_SCALE_FACTOR 
        +
          +
        • + + +

          Fields inherited from class javafx.scene.layout.Region

          +USE_COMPUTED_SIZE, USE_PREF_SIZE
        • +
        +
          +
        • + + +

          Fields inherited from class javafx.scene.Node

          +BASELINE_OFFSET_SAME_AS_HEIGHT
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + + + + + + + + + + + + + +
        Constructors 
        ConstructorDescription
        UnfocusedButton() +
        Erstellt einen UnfocusedButton mit einem leeren String als Beschriftung
        +
        UnfocusedButton​(String text) +
        Erstellt einen UnfocusedButton mit einem spezifischen String als Beschriftung
        +
        UnfocusedButton​(String text, + javafx.scene.Node graphic) +
        Erstellt einen UnfocusedButton mit einem spezifischen String und einem Icon als Beschriftung
        +
        UnfocusedButton​(javafx.scene.Node graphic) 
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethodDescription
        voidsetGraphicScaleFactor​(Double factor) 
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Button

          +cancelButtonProperty, createDefaultSkin, defaultButtonProperty, fire, isCancelButton, isDefaultButton, setCancelButton, setDefaultButton
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.ButtonBase

          +arm, armedProperty, disarm, executeAccessibleAction, getOnAction, isArmed, onActionProperty, setOnAction
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Labeled

          +alignmentProperty, contentDisplayProperty, ellipsisStringProperty, fontProperty, getAlignment, getClassCssMetaData, getContentBias, getContentDisplay, getControlCssMetaData, getEllipsisString, getFont, getGraphic, getGraphicTextGap, getInitialAlignment, getLabelPadding, getLineSpacing, getText, getTextAlignment, getTextFill, getTextOverrun, graphicProperty, graphicTextGapProperty, isMnemonicParsing, isUnderline, isWrapText, labelPaddingProperty, lineSpacingProperty, mnemonicParsingProperty, setAlignment, setContentDisplay, setEllipsisString, setFont, setGraphic, setGraphicTextGap, setLineSpacing, setMnemonicParsing, setText, setTextAlignment, setTextFill, setTextOverrun, setUnderline, setWrapText, textAlignmentProperty, textFillProperty, textOverrunProperty, textProperty, toString, underlineProperty, wrapTextProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Control

          +computeMaxHeight, computeMaxWidth, computeMinHeight, computeMinWidth, computePrefHeight, computePrefWidth, contextMenuProperty, getBaselineOffset, getContextMenu, getCssMetaData, getInitialFocusTraversable, getSkin, getTooltip, isResizable, layoutChildren, queryAccessibleAttribute, setContextMenu, setSkin, setTooltip, skinProperty, tooltipProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.layout.Region

          +backgroundProperty, borderProperty, cacheShapeProperty, centerShapeProperty, getBackground, getBorder, getHeight, getInsets, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getOpaqueInsets, getPadding, getPrefHeight, getPrefWidth, getShape, getUserAgentStylesheet, getWidth, heightProperty, insetsProperty, isCacheShape, isCenterShape, isScaleShape, isSnapToPixel, layoutInArea, layoutInArea, layoutInArea, layoutInArea, maxHeight, maxHeightProperty, maxWidth, maxWidthProperty, minHeight, minHeightProperty, minWidth, minWidthProperty, opaqueInsetsProperty, paddingProperty, positionInArea, positionInArea, prefHeight, prefHeightProperty, prefWidth, prefWidthProperty, resize, scaleShapeProperty, setBackground, setBorder, setCacheShape, setCenterShape, setHeight, setMaxHeight, setMaxSize, setMaxWidth, setMinHeight, setMinSize, setMinWidth, setOpaqueInsets, setPadding, setPrefHeight, setPrefSize, setPrefWidth, setScaleShape, setShape, setSnapToPixel, setWidth, shapeProperty, snappedBottomInset, snappedLeftInset, snappedRightInset, snappedTopInset, snapPosition, snapPositionX, snapPositionY, snapSize, snapSizeX, snapSizeY, snapSpace, snapSpaceX, snapSpaceY, snapToPixelProperty, widthProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Parent

          +getChildren, getChildrenUnmodifiable, getManagedChildren, getStylesheets, isNeedsLayout, layout, lookup, needsLayoutProperty, requestLayout, requestParentLayout, setNeedsLayout, updateBounds
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Node

          +accessibleHelpProperty, accessibleRoleDescriptionProperty, accessibleRoleProperty, accessibleTextProperty, addEventFilter, addEventHandler, applyCss, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen, contains, contains, cursorProperty, depthTestProperty, disabledProperty, disableProperty, effectiveNodeOrientationProperty, effectProperty, eventDispatcherProperty, fireEvent, focusedProperty, focusTraversableProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInitialCursor, getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY, getLocalToParentTransform, getLocalToSceneTransform, getNodeOrientation, getOnContextMenuRequested, getOnDragDetected, getOnDragDone, getOnDragDropped, getOnDragEntered, getOnDragExited, getOnDragOver, getOnInputMethodTextChanged, getOnKeyPressed, getOnKeyReleased, getOnKeyTyped, getOnMouseClicked, getOnMouseDragEntered, getOnMouseDragExited, getOnMouseDragged, getOnMouseDragOver, getOnMouseDragReleased, getOnMouseEntered, getOnMouseExited, getOnMouseMoved, getOnMousePressed, getOnMouseReleased, getOnRotate, getOnRotationFinished, getOnRotationStarted, getOnScroll, getOnScrollFinished, getOnScrollStarted, getOnSwipeDown, getOnSwipeLeft, getOnSwipeRight, getOnSwipeUp, getOnTouchMoved, getOnTouchPressed, getOnTouchReleased, getOnTouchStationary, getOnZoom, getOnZoomFinished, getOnZoomStarted, getOpacity, getParent, getProperties, getPseudoClassStates, getRotate, getRotationAxis, getScaleX, getScaleY, getScaleZ, getScene, getStyle, getStyleableParent, getStyleClass, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getTypeSelector, getUserData, getViewOrder, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, isVisible, layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent, localToParent, localToParent, localToParent, localToParent, localToParentTransformProperty, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToSceneTransformProperty, localToScreen, localToScreen, localToScreen, localToScreen, localToScreen, lookupAll, managedProperty, mouseTransparentProperty, nodeOrientationProperty, notifyAccessibleAttributeChanged, onContextMenuRequestedProperty, onDragDetectedProperty, onDragDoneProperty, onDragDroppedProperty, onDragEnteredProperty, onDragExitedProperty, onDragOverProperty, onInputMethodTextChangedProperty, onKeyPressedProperty, onKeyReleasedProperty, onKeyTypedProperty, onMouseClickedProperty, onMouseDragEnteredProperty, onMouseDragExitedProperty, onMouseDraggedProperty, onMouseDragOverProperty, onMouseDragReleasedProperty, onMouseEnteredProperty, onMouseExitedProperty, onMouseMovedProperty, onMousePressedProperty, onMouseReleasedProperty, onRotateProperty, onRotationFinishedProperty, onRotationStartedProperty, onScrollFinishedProperty, onScrollProperty, onScrollStartedProperty, onSwipeDownProperty, onSwipeLeftProperty, onSwipeRightProperty, onSwipeUpProperty, onTouchMovedProperty, onTouchPressedProperty, onTouchReleasedProperty, onTouchStationaryProperty, onZoomFinishedProperty, onZoomProperty, onZoomStartedProperty, opacityProperty, parentProperty, parentToLocal, parentToLocal, parentToLocal, parentToLocal, parentToLocal, pickOnBoundsProperty, pressedProperty, pseudoClassStateChanged, relocate, removeEventFilter, removeEventHandler, requestFocus, resizeRelocate, rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty, scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, screenToLocal, screenToLocal, screenToLocal, setAccessibleHelp, setAccessibleRole, setAccessibleRoleDescription, setAccessibleText, setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest, setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler, setFocused, setFocusTraversable, setHover, setId, setInputMethodRequests, setLayoutX, setLayoutY, setManaged, setMouseTransparent, setNodeOrientation, setOnContextMenuRequested, setOnDragDetected, setOnDragDone, setOnDragDropped, setOnDragEntered, setOnDragExited, setOnDragOver, setOnInputMethodTextChanged, setOnKeyPressed, setOnKeyReleased, setOnKeyTyped, setOnMouseClicked, setOnMouseDragEntered, setOnMouseDragExited, setOnMouseDragged, setOnMouseDragOver, setOnMouseDragReleased, setOnMouseEntered, setOnMouseExited, setOnMouseMoved, setOnMousePressed, setOnMouseReleased, setOnRotate, setOnRotationFinished, setOnRotationStarted, setOnScroll, setOnScrollFinished, setOnScrollStarted, setOnSwipeDown, setOnSwipeLeft, setOnSwipeRight, setOnSwipeUp, setOnTouchMoved, setOnTouchPressed, setOnTouchReleased, setOnTouchStationary, setOnZoom, setOnZoomFinished, setOnZoomStarted, setOpacity, setPickOnBounds, setPressed, setRotate, setRotationAxis, setScaleX, setScaleY, setScaleZ, setStyle, setTranslateX, setTranslateY, setTranslateZ, setUserData, setViewOrder, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, translateXProperty, translateYProperty, translateZProperty, usesMirroring, viewOrderProperty, visibleProperty
        • +
        + +
          +
        • + + +

          Methods inherited from interface javafx.css.Styleable

          +getStyleableNode
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          DEFAULT_GRAPHIC_SCALE_FACTOR

          +
          public static final double DEFAULT_GRAPHIC_SCALE_FACTOR
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          UnfocusedButton

          +
          public UnfocusedButton()
          +
          Erstellt einen UnfocusedButton mit einem leeren String als Beschriftung
          +
        • +
        + + + +
          +
        • +

          UnfocusedButton

          +
          public UnfocusedButton​(javafx.scene.Node graphic)
          +
        • +
        + + + +
          +
        • +

          UnfocusedButton

          +
          public UnfocusedButton​(String text,
          +                       javafx.scene.Node graphic)
          +
          Erstellt einen UnfocusedButton mit einem spezifischen String und einem Icon als Beschriftung
          +
          +
          Parameters:
          +
          text - Text für die Beschriftung dieses Buttons
          +
          graphic - Icon für die Beschriftung dieses Buttons
          +
          +
        • +
        + + + +
          +
        • +

          UnfocusedButton

          +
          public UnfocusedButton​(String text)
          +
          Erstellt einen UnfocusedButton mit einem spezifischen String als Beschriftung
          +
          +
          Parameters:
          +
          text - Text für die Beschriftung dieses Buttons
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          setGraphicScaleFactor

          +
          public void setGraphicScaleFactor​(Double factor)
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controls/ValueButton.html b/doc/0.1.4/de_public/bitchanger/gui/controls/ValueButton.html new file mode 100644 index 0000000..c3a16a7 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controls/ValueButton.html @@ -0,0 +1,531 @@ + + + + + +ValueButton + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class ValueButton

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • javafx.scene.Node
      • +
      • +
          +
        • javafx.scene.Parent
        • +
        • +
            +
          • javafx.scene.layout.Region
          • +
          • +
              +
            • javafx.scene.control.Control
            • +
            • +
                +
              • javafx.scene.control.Labeled
              • +
              • + +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      javafx.css.Styleable, javafx.event.EventTarget, javafx.scene.control.Skinnable
      +
      +
      +
      public class ValueButton
      +extends UnfocusedButton
      +
      UnfocusedButton mit einer zusätzlichen Property für die Einstellung einer Basis. + Wenn der Wert, den dieser Button repräsentiert, nicht zu der eingestellten Basis passt, + deaktiviert sich dieser Button selbst. Ändert sich die Basis wieder so, dass der Wert + wieder gültig ist, wird dieser Button automatisch aktiviert.
      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Summary

        + +
          +
        • + + +

          Fields inherited from class javafx.scene.layout.Region

          +USE_COMPUTED_SIZE, USE_PREF_SIZE
        • +
        +
          +
        • + + +

          Fields inherited from class javafx.scene.Node

          +BASELINE_OFFSET_SAME_AS_HEIGHT
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + + + + + + + + + +
        Constructors 
        ConstructorDescription
        ValueButton() +
        Erstellt einen ValueButton mit einem leeren String als Beschriftung
        +
        ValueButton​(String text) +
        Erstellt einen ValueButton mit einem spezifischen String als Beschriftung
        +
        ValueButton​(String text, + javafx.scene.Node graphic) +
        Erstellt einen ValueButton mit einem spezifischen String und einem Icon als Beschriftung
        +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethodDescription
        javafx.beans.property.IntegerPropertygetBaseProperty() +
        Gibt den Wert der baseProperty zurück
        +
        voidsetBase​(int base) +
        Setzt den Wert für die Basis
        +
        + +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Button

          +cancelButtonProperty, createDefaultSkin, defaultButtonProperty, fire, isCancelButton, isDefaultButton, setCancelButton, setDefaultButton
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.ButtonBase

          +arm, armedProperty, disarm, executeAccessibleAction, getOnAction, isArmed, onActionProperty, setOnAction
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Labeled

          +alignmentProperty, contentDisplayProperty, ellipsisStringProperty, fontProperty, getAlignment, getClassCssMetaData, getContentBias, getContentDisplay, getControlCssMetaData, getEllipsisString, getFont, getGraphic, getGraphicTextGap, getInitialAlignment, getLabelPadding, getLineSpacing, getText, getTextAlignment, getTextFill, getTextOverrun, graphicProperty, graphicTextGapProperty, isMnemonicParsing, isUnderline, isWrapText, labelPaddingProperty, lineSpacingProperty, mnemonicParsingProperty, setAlignment, setContentDisplay, setEllipsisString, setFont, setGraphic, setGraphicTextGap, setLineSpacing, setMnemonicParsing, setText, setTextAlignment, setTextFill, setTextOverrun, setUnderline, setWrapText, textAlignmentProperty, textFillProperty, textOverrunProperty, textProperty, toString, underlineProperty, wrapTextProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Control

          +computeMaxHeight, computeMaxWidth, computeMinHeight, computeMinWidth, computePrefHeight, computePrefWidth, contextMenuProperty, getBaselineOffset, getContextMenu, getCssMetaData, getInitialFocusTraversable, getSkin, getTooltip, isResizable, layoutChildren, queryAccessibleAttribute, setContextMenu, setSkin, setTooltip, skinProperty, tooltipProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.layout.Region

          +backgroundProperty, borderProperty, cacheShapeProperty, centerShapeProperty, getBackground, getBorder, getHeight, getInsets, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getOpaqueInsets, getPadding, getPrefHeight, getPrefWidth, getShape, getUserAgentStylesheet, getWidth, heightProperty, insetsProperty, isCacheShape, isCenterShape, isScaleShape, isSnapToPixel, layoutInArea, layoutInArea, layoutInArea, layoutInArea, maxHeight, maxHeightProperty, maxWidth, maxWidthProperty, minHeight, minHeightProperty, minWidth, minWidthProperty, opaqueInsetsProperty, paddingProperty, positionInArea, positionInArea, prefHeight, prefHeightProperty, prefWidth, prefWidthProperty, resize, scaleShapeProperty, setBackground, setBorder, setCacheShape, setCenterShape, setHeight, setMaxHeight, setMaxSize, setMaxWidth, setMinHeight, setMinSize, setMinWidth, setOpaqueInsets, setPadding, setPrefHeight, setPrefSize, setPrefWidth, setScaleShape, setShape, setSnapToPixel, setWidth, shapeProperty, snappedBottomInset, snappedLeftInset, snappedRightInset, snappedTopInset, snapPosition, snapPositionX, snapPositionY, snapSize, snapSizeX, snapSizeY, snapSpace, snapSpaceX, snapSpaceY, snapToPixelProperty, widthProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Parent

          +getChildren, getChildrenUnmodifiable, getManagedChildren, getStylesheets, isNeedsLayout, layout, lookup, needsLayoutProperty, requestLayout, requestParentLayout, setNeedsLayout, updateBounds
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Node

          +accessibleHelpProperty, accessibleRoleDescriptionProperty, accessibleRoleProperty, accessibleTextProperty, addEventFilter, addEventHandler, applyCss, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen, contains, contains, cursorProperty, depthTestProperty, disabledProperty, disableProperty, effectiveNodeOrientationProperty, effectProperty, eventDispatcherProperty, fireEvent, focusedProperty, focusTraversableProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInitialCursor, getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY, getLocalToParentTransform, getLocalToSceneTransform, getNodeOrientation, getOnContextMenuRequested, getOnDragDetected, getOnDragDone, getOnDragDropped, getOnDragEntered, getOnDragExited, getOnDragOver, getOnInputMethodTextChanged, getOnKeyPressed, getOnKeyReleased, getOnKeyTyped, getOnMouseClicked, getOnMouseDragEntered, getOnMouseDragExited, getOnMouseDragged, getOnMouseDragOver, getOnMouseDragReleased, getOnMouseEntered, getOnMouseExited, getOnMouseMoved, getOnMousePressed, getOnMouseReleased, getOnRotate, getOnRotationFinished, getOnRotationStarted, getOnScroll, getOnScrollFinished, getOnScrollStarted, getOnSwipeDown, getOnSwipeLeft, getOnSwipeRight, getOnSwipeUp, getOnTouchMoved, getOnTouchPressed, getOnTouchReleased, getOnTouchStationary, getOnZoom, getOnZoomFinished, getOnZoomStarted, getOpacity, getParent, getProperties, getPseudoClassStates, getRotate, getRotationAxis, getScaleX, getScaleY, getScaleZ, getScene, getStyle, getStyleableParent, getStyleClass, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getTypeSelector, getUserData, getViewOrder, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, isVisible, layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent, localToParent, localToParent, localToParent, localToParent, localToParentTransformProperty, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToSceneTransformProperty, localToScreen, localToScreen, localToScreen, localToScreen, localToScreen, lookupAll, managedProperty, mouseTransparentProperty, nodeOrientationProperty, notifyAccessibleAttributeChanged, onContextMenuRequestedProperty, onDragDetectedProperty, onDragDoneProperty, onDragDroppedProperty, onDragEnteredProperty, onDragExitedProperty, onDragOverProperty, onInputMethodTextChangedProperty, onKeyPressedProperty, onKeyReleasedProperty, onKeyTypedProperty, onMouseClickedProperty, onMouseDragEnteredProperty, onMouseDragExitedProperty, onMouseDraggedProperty, onMouseDragOverProperty, onMouseDragReleasedProperty, onMouseEnteredProperty, onMouseExitedProperty, onMouseMovedProperty, onMousePressedProperty, onMouseReleasedProperty, onRotateProperty, onRotationFinishedProperty, onRotationStartedProperty, onScrollFinishedProperty, onScrollProperty, onScrollStartedProperty, onSwipeDownProperty, onSwipeLeftProperty, onSwipeRightProperty, onSwipeUpProperty, onTouchMovedProperty, onTouchPressedProperty, onTouchReleasedProperty, onTouchStationaryProperty, onZoomFinishedProperty, onZoomProperty, onZoomStartedProperty, opacityProperty, parentProperty, parentToLocal, parentToLocal, parentToLocal, parentToLocal, parentToLocal, pickOnBoundsProperty, pressedProperty, pseudoClassStateChanged, relocate, removeEventFilter, removeEventHandler, requestFocus, resizeRelocate, rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty, scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, screenToLocal, screenToLocal, screenToLocal, setAccessibleHelp, setAccessibleRole, setAccessibleRoleDescription, setAccessibleText, setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest, setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler, setFocused, setFocusTraversable, setHover, setId, setInputMethodRequests, setLayoutX, setLayoutY, setManaged, setMouseTransparent, setNodeOrientation, setOnContextMenuRequested, setOnDragDetected, setOnDragDone, setOnDragDropped, setOnDragEntered, setOnDragExited, setOnDragOver, setOnInputMethodTextChanged, setOnKeyPressed, setOnKeyReleased, setOnKeyTyped, setOnMouseClicked, setOnMouseDragEntered, setOnMouseDragExited, setOnMouseDragged, setOnMouseDragOver, setOnMouseDragReleased, setOnMouseEntered, setOnMouseExited, setOnMouseMoved, setOnMousePressed, setOnMouseReleased, setOnRotate, setOnRotationFinished, setOnRotationStarted, setOnScroll, setOnScrollFinished, setOnScrollStarted, setOnSwipeDown, setOnSwipeLeft, setOnSwipeRight, setOnSwipeUp, setOnTouchMoved, setOnTouchPressed, setOnTouchReleased, setOnTouchStationary, setOnZoom, setOnZoomFinished, setOnZoomStarted, setOpacity, setPickOnBounds, setPressed, setRotate, setRotationAxis, setScaleX, setScaleY, setScaleZ, setStyle, setTranslateX, setTranslateY, setTranslateZ, setUserData, setViewOrder, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, translateXProperty, translateYProperty, translateZProperty, usesMirroring, viewOrderProperty, visibleProperty
        • +
        + +
          +
        • + + +

          Methods inherited from interface javafx.css.Styleable

          +getStyleableNode
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ValueButton

          +
          public ValueButton()
          +
          Erstellt einen ValueButton mit einem leeren String als Beschriftung
          +
        • +
        + + + +
          +
        • +

          ValueButton

          +
          public ValueButton​(String text,
          +                   javafx.scene.Node graphic)
          +
          Erstellt einen ValueButton mit einem spezifischen String und einem Icon als Beschriftung
          +
          +
          Parameters:
          +
          text - Text für die Beschriftung dieses Buttons
          +
          graphic - Icon für die Beschriftung dieses Buttons
          +
          +
        • +
        + + + +
          +
        • +

          ValueButton

          +
          public ValueButton​(String text)
          +
          Erstellt einen ValueButton mit einem spezifischen String als Beschriftung
          +
          +
          Parameters:
          +
          text - Text für die Beschriftung dieses Buttons
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          setBase

          +
          public void setBase​(int base)
          +
          Setzt den Wert für die Basis
          +
          +
          Parameters:
          +
          base - neue Basis
          +
          +
        • +
        + + + +
          +
        • +

          getBaseProperty

          +
          public javafx.beans.property.IntegerProperty getBaseProperty()
          +
          Gibt den Wert der baseProperty zurück
          +
          +
          Returns:
          +
          baseProperty dieses ValueButtons
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controls/ValueField.html b/doc/0.1.4/de_public/bitchanger/gui/controls/ValueField.html new file mode 100644 index 0000000..01a769d --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controls/ValueField.html @@ -0,0 +1,599 @@ + + + + + +ValueField + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class ValueField

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • javafx.scene.Node
      • +
      • +
          +
        • javafx.scene.Parent
        • +
        • +
            +
          • javafx.scene.layout.Region
          • +
          • +
              +
            • javafx.scene.control.Control
            • +
            • +
                +
              • javafx.scene.control.TextInputControl
              • +
              • +
                  +
                • javafx.scene.control.TextField
                • +
                • +
                    +
                  • bitchanger.gui.controls.ValueField
                  • +
                  +
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      javafx.css.Styleable, javafx.event.EventTarget, javafx.scene.control.Skinnable
      +
      +
      +
      public class ValueField
      +extends javafx.scene.control.TextField
      +
      TextFeld, in dem eine Zahl zu einem bestimmten Zahlensystem eingegeben werden kann. + Es können nur Zeichen eingegeben werden, die in dem eingestellten Zahlensystem erlaubt sind. + Als einzige Ausnahme ist auch die Eingabe von Leerzeichen (beispielsweise zur Tausendertrennung) möglich. + Die aktuelle Basis wird über die baseProperty eingestellt. + Die Grundform ist ein Rechteck ohne abgerundete Ecken. + +

      + Als Zusatzfunktion wird die Eingabe in Blöcke aufgeteilt, wenn es sich bei dem eingestellten Zahlensystem + um das Binärsystem handelt. +

      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Nested Class Summary

        +
          +
        • + + +

          Nested classes/interfaces inherited from class javafx.scene.control.TextInputControl

          +javafx.scene.control.TextInputControl.Content
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Field Summary

        +
          +
        • + + +

          Fields inherited from class javafx.scene.control.TextField

          +DEFAULT_PREF_COLUMN_COUNT
        • +
        +
          +
        • + + +

          Fields inherited from class javafx.scene.layout.Region

          +USE_COMPUTED_SIZE, USE_PREF_SIZE
        • +
        +
          +
        • + + +

          Fields inherited from class javafx.scene.Node

          +BASELINE_OFFSET_SAME_AS_HEIGHT
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + + + + + + + + + + + + + +
        Constructors 
        ConstructorDescription
        ValueField() +
        Erzeugt ein neues ValueField mit leerem Text und der Basis 10
        +
        ValueField​(int base) +
        Erzeugt ein neues ValueField mit leerem Text und der übergebenen Basis
        +
        ValueField​(String text) +
        Erzeugt ein neues ValueField mit dem übergebenen Text als Inhalt und der Basis 10
        +
        ValueField​(String text, + int base) +
        Erzeugt ein neues ValueField mit dem übergebenen Text als Inhalt und der übergebenen Basis
        +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethodDescription
        intgetBase() +
        Gibt den Wert der baseProperty zurück
        +
        javafx.beans.property.IntegerPropertygetBaseProperty() +
        Gibt die baseProperty dieses ValueFields zurück
        +
        voidsetBase​(int base) +
        Setzt den Wert der baseProperty
        +
        voidstoreCaretPosition​(javafx.beans.value.ObservableValue<? extends Number> observable, + Number oldValue, + Number newValue) +
        Speichert die letzte bekannte CaretPosition, um diese zurücksetzen zu können.
        +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.TextField

          +alignmentProperty, createDefaultSkin, getAlignment, getCharacters, getClassCssMetaData, getControlCssMetaData, getOnAction, getPrefColumnCount, onActionProperty, prefColumnCountProperty, setAlignment, setOnAction, setPrefColumnCount
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.TextInputControl

          +anchorProperty, appendText, backward, cancelEdit, caretPositionProperty, clear, commitValue, copy, cut, deleteNextChar, deletePreviousChar, deleteText, deleteText, deselect, editableProperty, end, endOfNextWord, executeAccessibleAction, extendSelection, fontProperty, forward, getAnchor, getCaretPosition, getContent, getFont, getLength, getPromptText, getSelectedText, getSelection, getText, getText, getTextFormatter, home, insertText, isEditable, isRedoable, isUndoable, lengthProperty, nextWord, paste, positionCaret, previousWord, promptTextProperty, queryAccessibleAttribute, redo, redoableProperty, replaceSelection, replaceText, replaceText, selectAll, selectBackward, selectedTextProperty, selectEnd, selectEndOfNextWord, selectForward, selectHome, selectionProperty, selectNextWord, selectPositionCaret, selectPreviousWord, selectRange, setEditable, setFont, setPromptText, setText, setTextFormatter, textFormatterProperty, textProperty, undo, undoableProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Control

          +computeMaxHeight, computeMaxWidth, computeMinHeight, computeMinWidth, computePrefHeight, computePrefWidth, contextMenuProperty, getBaselineOffset, getContextMenu, getCssMetaData, getInitialFocusTraversable, getSkin, getTooltip, isResizable, layoutChildren, setContextMenu, setSkin, setTooltip, skinProperty, tooltipProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.layout.Region

          +backgroundProperty, borderProperty, cacheShapeProperty, centerShapeProperty, getBackground, getBorder, getHeight, getInsets, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getOpaqueInsets, getPadding, getPrefHeight, getPrefWidth, getShape, getUserAgentStylesheet, getWidth, heightProperty, insetsProperty, isCacheShape, isCenterShape, isScaleShape, isSnapToPixel, layoutInArea, layoutInArea, layoutInArea, layoutInArea, maxHeight, maxHeightProperty, maxWidth, maxWidthProperty, minHeight, minHeightProperty, minWidth, minWidthProperty, opaqueInsetsProperty, paddingProperty, positionInArea, positionInArea, prefHeight, prefHeightProperty, prefWidth, prefWidthProperty, resize, scaleShapeProperty, setBackground, setBorder, setCacheShape, setCenterShape, setHeight, setMaxHeight, setMaxSize, setMaxWidth, setMinHeight, setMinSize, setMinWidth, setOpaqueInsets, setPadding, setPrefHeight, setPrefSize, setPrefWidth, setScaleShape, setShape, setSnapToPixel, setWidth, shapeProperty, snappedBottomInset, snappedLeftInset, snappedRightInset, snappedTopInset, snapPosition, snapPositionX, snapPositionY, snapSize, snapSizeX, snapSizeY, snapSpace, snapSpaceX, snapSpaceY, snapToPixelProperty, widthProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Parent

          +getChildren, getChildrenUnmodifiable, getManagedChildren, getStylesheets, isNeedsLayout, layout, lookup, needsLayoutProperty, requestLayout, requestParentLayout, setNeedsLayout, updateBounds
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Node

          +accessibleHelpProperty, accessibleRoleDescriptionProperty, accessibleRoleProperty, accessibleTextProperty, addEventFilter, addEventHandler, applyCss, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen, contains, contains, cursorProperty, depthTestProperty, disabledProperty, disableProperty, effectiveNodeOrientationProperty, effectProperty, eventDispatcherProperty, fireEvent, focusedProperty, focusTraversableProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getContentBias, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInitialCursor, getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY, getLocalToParentTransform, getLocalToSceneTransform, getNodeOrientation, getOnContextMenuRequested, getOnDragDetected, getOnDragDone, getOnDragDropped, getOnDragEntered, getOnDragExited, getOnDragOver, getOnInputMethodTextChanged, getOnKeyPressed, getOnKeyReleased, getOnKeyTyped, getOnMouseClicked, getOnMouseDragEntered, getOnMouseDragExited, getOnMouseDragged, getOnMouseDragOver, getOnMouseDragReleased, getOnMouseEntered, getOnMouseExited, getOnMouseMoved, getOnMousePressed, getOnMouseReleased, getOnRotate, getOnRotationFinished, getOnRotationStarted, getOnScroll, getOnScrollFinished, getOnScrollStarted, getOnSwipeDown, getOnSwipeLeft, getOnSwipeRight, getOnSwipeUp, getOnTouchMoved, getOnTouchPressed, getOnTouchReleased, getOnTouchStationary, getOnZoom, getOnZoomFinished, getOnZoomStarted, getOpacity, getParent, getProperties, getPseudoClassStates, getRotate, getRotationAxis, getScaleX, getScaleY, getScaleZ, getScene, getStyle, getStyleableParent, getStyleClass, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getTypeSelector, getUserData, getViewOrder, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, isVisible, layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent, localToParent, localToParent, localToParent, localToParent, localToParentTransformProperty, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToSceneTransformProperty, localToScreen, localToScreen, localToScreen, localToScreen, localToScreen, lookupAll, managedProperty, mouseTransparentProperty, nodeOrientationProperty, notifyAccessibleAttributeChanged, onContextMenuRequestedProperty, onDragDetectedProperty, onDragDoneProperty, onDragDroppedProperty, onDragEnteredProperty, onDragExitedProperty, onDragOverProperty, onInputMethodTextChangedProperty, onKeyPressedProperty, onKeyReleasedProperty, onKeyTypedProperty, onMouseClickedProperty, onMouseDragEnteredProperty, onMouseDragExitedProperty, onMouseDraggedProperty, onMouseDragOverProperty, onMouseDragReleasedProperty, onMouseEnteredProperty, onMouseExitedProperty, onMouseMovedProperty, onMousePressedProperty, onMouseReleasedProperty, onRotateProperty, onRotationFinishedProperty, onRotationStartedProperty, onScrollFinishedProperty, onScrollProperty, onScrollStartedProperty, onSwipeDownProperty, onSwipeLeftProperty, onSwipeRightProperty, onSwipeUpProperty, onTouchMovedProperty, onTouchPressedProperty, onTouchReleasedProperty, onTouchStationaryProperty, onZoomFinishedProperty, onZoomProperty, onZoomStartedProperty, opacityProperty, parentProperty, parentToLocal, parentToLocal, parentToLocal, parentToLocal, parentToLocal, pickOnBoundsProperty, pressedProperty, pseudoClassStateChanged, relocate, removeEventFilter, removeEventHandler, requestFocus, resizeRelocate, rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty, scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, screenToLocal, screenToLocal, screenToLocal, setAccessibleHelp, setAccessibleRole, setAccessibleRoleDescription, setAccessibleText, setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest, setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler, setFocused, setFocusTraversable, setHover, setId, setInputMethodRequests, setLayoutX, setLayoutY, setManaged, setMouseTransparent, setNodeOrientation, setOnContextMenuRequested, setOnDragDetected, setOnDragDone, setOnDragDropped, setOnDragEntered, setOnDragExited, setOnDragOver, setOnInputMethodTextChanged, setOnKeyPressed, setOnKeyReleased, setOnKeyTyped, setOnMouseClicked, setOnMouseDragEntered, setOnMouseDragExited, setOnMouseDragged, setOnMouseDragOver, setOnMouseDragReleased, setOnMouseEntered, setOnMouseExited, setOnMouseMoved, setOnMousePressed, setOnMouseReleased, setOnRotate, setOnRotationFinished, setOnRotationStarted, setOnScroll, setOnScrollFinished, setOnScrollStarted, setOnSwipeDown, setOnSwipeLeft, setOnSwipeRight, setOnSwipeUp, setOnTouchMoved, setOnTouchPressed, setOnTouchReleased, setOnTouchStationary, setOnZoom, setOnZoomFinished, setOnZoomStarted, setOpacity, setPickOnBounds, setPressed, setRotate, setRotationAxis, setScaleX, setScaleY, setScaleZ, setStyle, setTranslateX, setTranslateY, setTranslateZ, setUserData, setViewOrder, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, toString, translateXProperty, translateYProperty, translateZProperty, usesMirroring, viewOrderProperty, visibleProperty
        • +
        + +
          +
        • + + +

          Methods inherited from interface javafx.css.Styleable

          +getStyleableNode
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ValueField

          +
          public ValueField()
          +
          Erzeugt ein neues ValueField mit leerem Text und der Basis 10
          +
        • +
        + + + +
          +
        • +

          ValueField

          +
          public ValueField​(String text)
          +
          Erzeugt ein neues ValueField mit dem übergebenen Text als Inhalt und der Basis 10
          +
          +
          Parameters:
          +
          text - Textinhalt für dieses Textfeld
          +
          +
        • +
        + + + +
          +
        • +

          ValueField

          +
          public ValueField​(int base)
          +
          Erzeugt ein neues ValueField mit leerem Text und der übergebenen Basis
          +
          +
          Parameters:
          +
          base - Wert für die baseProperty
          +
          +
        • +
        + + + +
          +
        • +

          ValueField

          +
          public ValueField​(String text,
          +                  int base)
          +
          Erzeugt ein neues ValueField mit dem übergebenen Text als Inhalt und der übergebenen Basis
          +
          +
          Parameters:
          +
          text - Textinhalt für dieses Textfeld
          +
          base - Wert für die baseProperty
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          setBase

          +
          public void setBase​(int base)
          +
          Setzt den Wert der baseProperty
          +
          +
          Parameters:
          +
          base - neue Basis
          +
          +
        • +
        + + + + + + + +
          +
        • +

          getBaseProperty

          +
          public javafx.beans.property.IntegerProperty getBaseProperty()
          +
          Gibt die baseProperty dieses ValueFields zurück
          +
          +
          Returns:
          +
          baseProperty dieses ValueFields
          +
          +
        • +
        + + + +
          +
        • +

          storeCaretPosition

          +
          public void storeCaretPosition​(javafx.beans.value.ObservableValue<? extends Number> observable,
          +                               Number oldValue,
          +                               Number newValue)
          +
          Speichert die letzte bekannte CaretPosition, um diese zurücksetzen zu können. + Kann als Methoden-Referenz für einen ChangeListener eingesetzt werden.
          +
          +
          Parameters:
          +
          observable - ObservableValue, dessen Wert sich ändert
          +
          oldValue - alter Wert
          +
          newValue - neuer Wert
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controls/class-use/AlphaNumGrid.html b/doc/0.1.4/de_public/bitchanger/gui/controls/class-use/AlphaNumGrid.html new file mode 100644 index 0000000..6d27f23 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controls/class-use/AlphaNumGrid.html @@ -0,0 +1,193 @@ + + + + + +Uses of Class bitchanger.gui.controls.AlphaNumGrid + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controls.AlphaNumGrid

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controls/class-use/AlphaNumKeys.html b/doc/0.1.4/de_public/bitchanger/gui/controls/class-use/AlphaNumKeys.html new file mode 100644 index 0000000..5c0573f --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controls/class-use/AlphaNumKeys.html @@ -0,0 +1,226 @@ + + + + + +Uses of Class bitchanger.gui.controls.AlphaNumKeys + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controls.AlphaNumKeys

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controls/class-use/BaseSpinner.html b/doc/0.1.4/de_public/bitchanger/gui/controls/class-use/BaseSpinner.html new file mode 100644 index 0000000..170447a --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controls/class-use/BaseSpinner.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controls.BaseSpinner + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controls.BaseSpinner

    +
    +
    No usage of bitchanger.gui.controls.BaseSpinner
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controls/class-use/BasicMenuBar.html b/doc/0.1.4/de_public/bitchanger/gui/controls/class-use/BasicMenuBar.html new file mode 100644 index 0000000..26a7fcd --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controls/class-use/BasicMenuBar.html @@ -0,0 +1,274 @@ + + + + + +Uses of Class bitchanger.gui.controls.BasicMenuBar + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controls.BasicMenuBar

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controls/class-use/ConverterMenuBar.html b/doc/0.1.4/de_public/bitchanger/gui/controls/class-use/ConverterMenuBar.html new file mode 100644 index 0000000..40b7abc --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controls/class-use/ConverterMenuBar.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controls.ConverterMenuBar + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controls.ConverterMenuBar

    +
    +
    No usage of bitchanger.gui.controls.ConverterMenuBar
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controls/class-use/InformationDialog.InformationType.html b/doc/0.1.4/de_public/bitchanger/gui/controls/class-use/InformationDialog.InformationType.html new file mode 100644 index 0000000..a4ca18a --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controls/class-use/InformationDialog.InformationType.html @@ -0,0 +1,218 @@ + + + + + +Uses of Class bitchanger.gui.controls.InformationDialog.InformationType + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controls.InformationDialog.InformationType

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controls/class-use/InformationDialog.html b/doc/0.1.4/de_public/bitchanger/gui/controls/class-use/InformationDialog.html new file mode 100644 index 0000000..f9413a5 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controls/class-use/InformationDialog.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controls.InformationDialog + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controls.InformationDialog

    +
    +
    No usage of bitchanger.gui.controls.InformationDialog
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controls/class-use/SVGIcon.html b/doc/0.1.4/de_public/bitchanger/gui/controls/class-use/SVGIcon.html new file mode 100644 index 0000000..bde6273 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controls/class-use/SVGIcon.html @@ -0,0 +1,240 @@ + + + + + +Uses of Class bitchanger.gui.controls.SVGIcon + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controls.SVGIcon

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controls/class-use/UnfocusedButton.html b/doc/0.1.4/de_public/bitchanger/gui/controls/class-use/UnfocusedButton.html new file mode 100644 index 0000000..b4f5a85 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controls/class-use/UnfocusedButton.html @@ -0,0 +1,197 @@ + + + + + +Uses of Class bitchanger.gui.controls.UnfocusedButton + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controls.UnfocusedButton

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controls/class-use/ValueButton.html b/doc/0.1.4/de_public/bitchanger/gui/controls/class-use/ValueButton.html new file mode 100644 index 0000000..113a3ac --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controls/class-use/ValueButton.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controls.ValueButton + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controls.ValueButton

    +
    +
    No usage of bitchanger.gui.controls.ValueButton
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controls/class-use/ValueField.html b/doc/0.1.4/de_public/bitchanger/gui/controls/class-use/ValueField.html new file mode 100644 index 0000000..707a755 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controls/class-use/ValueField.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controls.ValueField + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controls.ValueField

    +
    +
    No usage of bitchanger.gui.controls.ValueField
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controls/package-summary.html b/doc/0.1.4/de_public/bitchanger/gui/controls/package-summary.html new file mode 100644 index 0000000..712f75f --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controls/package-summary.html @@ -0,0 +1,231 @@ + + + + + +bitchanger.gui.controls + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package bitchanger.gui.controls

    +
    +
    +
    + + +
    Stellt angepasste Bedienelemente und Funktionen für die Benutzeroberfläche zur Verfügung
    +
    +
      +
    • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Class Summary 
      ClassDescription
      AlphaNumKeys +
      AlphaNumKeys stellt ein Tastaturlayout als 4x5 Matrix bereit.
      +
      BaseSpinner +
      Spinner, mit dem die Basis für ein Zahlensystem ausgewählt werden kann.
      +
      BasicMenuBar +
      Basis Menüleiste, die die allgemein benötigten Menüpunkte enthält.
      +
      ConverterMenuBar 
      InformationDialog 
      SVGIcon 
      UnfocusedButton +
      Button, der beim Klick nicht den Fokus erhält und als Grundform ein Rechteck ohne abgerundete Ecken besitzt.
      +
      ValueButton +
      UnfocusedButton mit einer zusätzlichen Property für die Einstellung einer Basis.
      +
      ValueField +
      TextFeld, in dem eine Zahl zu einem bestimmten Zahlensystem eingegeben werden kann.
      +
      +
    • +
    • + + + + + + + + + + + + +
      Enum Summary 
      EnumDescription
      InformationDialog.InformationType 
      +
    • +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controls/package-tree.html b/doc/0.1.4/de_public/bitchanger/gui/controls/package-tree.html new file mode 100644 index 0000000..29bfc28 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controls/package-tree.html @@ -0,0 +1,252 @@ + + + + + +bitchanger.gui.controls Class Hierarchy + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package bitchanger.gui.controls

    +Package Hierarchies: + +
    +
    +
    +

    Class Hierarchy

    +
      +
    • java.lang.Object +
        +
      • bitchanger.gui.controls.AlphaNumKeys (implements bitchanger.gui.controller.Controllable)
      • +
      • javafx.scene.control.Dialog<R> (implements javafx.event.EventTarget) + +
      • +
      • javafx.scene.Node (implements javafx.event.EventTarget, javafx.css.Styleable) +
          +
        • javafx.scene.Parent +
            +
          • javafx.scene.layout.Region +
              +
            • javafx.scene.control.Control (implements javafx.scene.control.Skinnable) +
                +
              • javafx.scene.control.Labeled +
                  +
                • javafx.scene.control.ButtonBase + +
                • +
                +
              • +
              • javafx.scene.control.MenuBar + +
              • +
              • javafx.scene.control.Spinner<T> + +
              • +
              • javafx.scene.control.TextInputControl +
                  +
                • javafx.scene.control.TextField + +
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        • javafx.scene.shape.Shape +
            +
          • javafx.scene.shape.SVGPath +
              +
            • bitchanger.gui.controls.SVGIcon
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    +

    Enum Hierarchy

    + +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/controls/package-use.html b/doc/0.1.4/de_public/bitchanger/gui/controls/package-use.html new file mode 100644 index 0000000..96f605e --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/controls/package-use.html @@ -0,0 +1,283 @@ + + + + + +Uses of Package bitchanger.gui.controls + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    bitchanger.gui.controls

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/package-summary.html b/doc/0.1.4/de_public/bitchanger/gui/package-summary.html new file mode 100644 index 0000000..b9c5a87 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/package-summary.html @@ -0,0 +1,155 @@ + + + + + +bitchanger.gui + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package bitchanger.gui

    +
    +
    +
    + + +
    Enthält alle Komponenten für die grafische Oberfläche, die mit JavaFX realisiert wird.
    +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/package-tree.html b/doc/0.1.4/de_public/bitchanger/gui/package-tree.html new file mode 100644 index 0000000..f3732fa --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/package-tree.html @@ -0,0 +1,152 @@ + + + + + +bitchanger.gui Class Hierarchy + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package bitchanger.gui

    +Package Hierarchies: + +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/package-use.html b/doc/0.1.4/de_public/bitchanger/gui/package-use.html new file mode 100644 index 0000000..7cb564a --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/package-use.html @@ -0,0 +1,149 @@ + + + + + +Uses of Package bitchanger.gui + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    bitchanger.gui

    +
    +
    No usage of bitchanger.gui
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/views/AlphaNumGridView.ConstraintType.html b/doc/0.1.4/de_public/bitchanger/gui/views/AlphaNumGridView.ConstraintType.html new file mode 100644 index 0000000..0976ebd --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/views/AlphaNumGridView.ConstraintType.html @@ -0,0 +1,446 @@ + + + + + +AlphaNumGridView.ConstraintType + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Enum AlphaNumGridView.ConstraintType

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      + +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          values

          +
          public static AlphaNumGridView.ConstraintType[] values()
          +
          Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
          +for (AlphaNumGridView.ConstraintType c : AlphaNumGridView.ConstraintType.values())
          +    System.out.println(c);
          +
          +
          +
          Returns:
          +
          an array containing the constants of this enum type, in the order they are declared
          +
          +
        • +
        + + + +
          +
        • +

          valueOf

          +
          public static AlphaNumGridView.ConstraintType valueOf​(String name)
          +
          Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
          +
          +
          Parameters:
          +
          name - the name of the enum constant to be returned.
          +
          Returns:
          +
          the enum constant with the specified name
          +
          Throws:
          +
          IllegalArgumentException - if this enum type has no constant with the specified name
          +
          NullPointerException - if the argument is null
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/views/AlphaNumGridView.html b/doc/0.1.4/de_public/bitchanger/gui/views/AlphaNumGridView.html new file mode 100644 index 0000000..085bf69 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/views/AlphaNumGridView.html @@ -0,0 +1,1486 @@ + + + + + +AlphaNumGridView + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class AlphaNumGridView

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Controllable, Viewable
      +
      +
      +
      Direct Known Subclasses:
      +
      CalculatorView, ConverterView, IEEEView
      +
      +
      +
      public class AlphaNumGridView
      +extends ViewBase<javafx.scene.layout.BorderPane>
      +
      View, die die Basis Scene für eine Tabelle aus einer Spalte mit Labels, einer Spalte mit Textfeldern + und einer Tastaturmatrix aus AlphaNumKeys erstellt. +

      + Die Position der Labels und Textfelder werden über die Attribute labelColumn, firstLabelRow, + tfColumn und firstTFRow festgelegt. Die Anzahl der Labels und Textfelder wird über die Arrays + labelTexts und tfKeys festgelegt. Alle Labels werden in der definierten Spalte untereinander + in die Zeilen der GridPane center positioniert. Analog gilt das selbe für die Textfelder. + Alle Textfelder sind eine Instanz von ValueField. +

      +

      + Zudem wird eine funktionsfähige Tastaturmatrix aus AlphaNumKeys in der Tabelle eingefügt. Die Position + des ersten Buttons dieser Matrix ist durch die Attribut firstKeyBtnColumn und firstKeyBtnRow + 1 + definiert. Hat das Attribut useClearAndBackBtn zum Zeitpunkt des Aufrufes der Methode createScenegraph() + den Wert true werden in der Zeile oberhalb der Tastaturmatrix die Buttons clearBtnKey und + backspaceBtnKey positioniert. Unabhängig davon werden diese beiden Buttons in jedem Fall vollständig initialisiert + und zur Map ViewBase.getButtonMap() hinzugefügt und können somit auch manuell in der GridPane positioniert werden. + Alle Buttons werden als Instanz von UnfocusedButton angelegt. +

      +

      + Die Textfelder wachsen in vertikale Richtung mit den Spalten der GridPane, die Buttons der Tastaturmatrix + wachsen sowohl mit den Spalten als auch mit den Zeilen der GridPane. +

      +

      + Wenn das Attribut setTFColumnSpan zum Zeitpunkt des Aufrufes der Methode createScenegraph() den Wert true hat, + werden die Textfelder über die Anzahl der Spalten verteilt, die die Tastaturmatrix einnimmt! +

      +

      + Der Scenegraph dieser View muss erst von einer Subklasse mit der Methode createScenegraph() erstellt werden, + bevor diese View dargestellt werden kann. +

      +
      +
      Since:
      +
      Bitchanger 0.1.4
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Nested Class Summary

        + + + + + + + + + + + + +
        Nested Classes 
        Modifier and TypeClassDescription
        protected static class AlphaNumGridView.ConstraintType +
        Aufzählung von möglichen Typen für Constraints einer GridPane
        +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeFieldDescription
        String[]alphaKeys +
        Array, das die Schlüsselwörter für die Buchstaben-Buttons definiert
        +
        protected AlphaNumKeysalphaNum +
        Buttons, die als alpha-numerische Tastatur dienen, die für verschiedene Zahlensysteme ausgelegt ist.
        +
        StringbackspaceBtnKey +
        Schlüsselwort, mit dem der Backspace-Button in der Map btnMap gespeichert wird
        +
        protected javafx.beans.property.DoublePropertybtnMaxHeigthProperty +
        Property für die maximale Höhe der Buttons in dieser View
        +
        protected javafx.beans.property.DoublePropertybtnMaxWidthProperty +
        Property für die maximale Breite der Buttons in dieser View
        +
        protected javafx.beans.property.DoublePropertybtnMinHeigthProperty +
        Property für die minimale Höhe der Buttons in dieser View
        +
        protected javafx.beans.property.DoublePropertybtnMinWidthProperty +
        Property für die minimale Breite der Buttons in dieser View
        +
        protected javafx.beans.property.DoublePropertybtnSpacingProperty +
        Property für den Abstand der Buttons in der GridPane
        +
        protected javafx.scene.layout.GridPanecenter +
        Tabelle im Center von root, in der alle Controls positioniert werden
        +
        StringclearBtnKey +
        Schlüsselwort, mit dem der Löschen-Button (AC) in der Map btnMap gespeichert wird
        +
        StringcommaBtnKey +
        Schlüsselwort für den Komma-Button
        +
        protected javafx.beans.property.DoublePropertyfirstColumnWidthProperty +
        Property für die Breite der ersten Spalte mit den Labels enthält.
        +
        protected intfirstKeyBtnColumn +
        Konstante, die die erste Spalte der GridPane definiert, in der die Tastatur-Buttons positioniert werden
        +
        protected intfirstKeyBtnRow +
        Konstante, die die erste Zeile der GridPane definiert, in der die Tastatur-Buttons positioniert werden
        +
        protected intfirstLabelRow +
        Konstante, die die erste Zeile der GridPane definiert, in der die Labels positioniert werden
        +
        protected intfirstTFRow +
        Konstante, die die erste Zeile der GridPane definiert, in der die Textfelder positioniert werden
        +
        protected javafx.beans.property.DoublePropertyhgapProperty +
        Property für den horizontalen Abstand der GridPane im Center
        +
        StringkeyboardBtnKey +
        Schlüsselwort für den Button zum Umschalten des Tastaturlayouts
        +
        protected intlabelColumn +
        Konstante, die die Spalte der GridPane definiert, in der die Labels positioniert werden
        +
        String[]labelTexts +
        Array, das die Beschriftungen für die Labels vor den Textfeldern definiert
        +
        StringnextBtnKey +
        Schlüsselwort für den Button zum Weiterscrollen durch die Tastatur
        +
        String[]numKeys +
        Array, das die Schlüsselwörter für die Zahlen-Buttons definiert
        +
        protected javafx.beans.property.DoublePropertypaddingBottomProperty +
        Property für den Abstand am unteren Rand der GridPane im Center
        +
        protected javafx.beans.property.DoublePropertypaddingLeftProperty +
        Property für den Abstand am linken Rand der GridPane im Center
        +
        protected javafx.beans.property.DoublePropertypaddingRigthProperty +
        Property für den Abstand am rechten Rand der GridPane im Center
        +
        protected javafx.beans.property.DoublePropertypaddingTopProperty +
        Property für den Abstand am oberen Rand der GridPane im Center
        +
        StringpreviousBtnKey +
        Schlüsselwort für den Button zum Rückwärtsscrollen durch die Tastatur
        +
        protected booleansetTFColumnSpan +
        true, wenn die Textfelder über die Anzahl der Spalten von der Tastatur verteilt werden sollen.
        +
        StringsignBtnKey +
        Schlüsselwort für den Button zum Vorzeichenwechsel
        +
        protected inttfColumn +
        Konstante, die die Spalte der GridPane definiert, in der die Textfelder positioniert werden
        +
        String[]tfKeys +
        Array, das die Schlüsselwörter definiert, mit denen die Textfelder in der Map tfMap gespeichert werden
        +
        protected javafx.beans.property.DoublePropertytfMaxHeightProperty +
        Property für die maximale Höhe der Textfelder in dieser View
        +
        protected javafx.beans.property.DoublePropertytfMinHeightProperty +
        Property für die minimale Höhe der Textfelder in dieser View
        +
        protected booleanuseClearAndBackBtn +
        true, wenn die Buttons clearBtnKey und backspaceBtnKey in der Zeile + firstKeyBtnRow über der Tastaturmatrix in der GridPane positioniert werden sollen.
        +
        protected javafx.beans.property.DoublePropertyvgapProperty +
        Property für den vertikalen Abstand der GridPane im Center
        +
        protected javafx.beans.property.DoublePropertywhiteSpaceHeigthProperty +
        Property für die Höhe der Zeilen zwischen den Textfeldern und Buttons
        +
        StringzeroBtnKey +
        Schlüsselwort für den Button, der die Null repräsentiert
        +
        + + +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Constructors 
        ConstructorDescription
        AlphaNumGridView​(int firstKeyBtnRow, + int firstKeyBtnColumn) +
        Erzeugt eine neue AlphaNumGridView, die keine Labels und keine Textfelder enthält.
        +
        AlphaNumGridView​(int firstLabelRow, + int labelColumn, + int firstTFRow, + int tfColumn, + int firstKeyBtnRow, + int firstKeyBtnColumn, + String[] labelTexts, + String... tfKeys) +
        Erzeugt eine neue AlphaNumGridView, die ihre Labels, Textfelder und die Tastaturmatrix nach den übergebenen Parametern + positioniert.
        +
        AlphaNumGridView​(int firstLabelRow, + int labelColumn, + int firstTFRow, + int tfColumn, + int firstKeyBtnRow, + int firstKeyBtnColumn, + String[] labelTexts, + String[] tfKeys, + double tfHeight, + double btnMaxSize, + double btnMinSize, + double whiteSpaceHeigth, + double firstColumnWidth, + double paddingTopRigthBottomLeft, + double spacing) +
        Erzeugt eine neue AlphaNumGridView, die ihre Labels, Textfelder und die Tastaturmatrix nach den übergebenen Parametern + positioniert.
        +
        AlphaNumGridView​(int firstLabelRow, + int labelColumn, + int firstTFRow, + int tfColumn, + int firstKeyBtnRow, + int firstKeyBtnColumn, + String[] labelTexts, + String[] tfKeys, + double tfMaxHeight, + double tfMinHeight, + double btnMaxHeigth, + double btnMinHeigth, + double btnMaxWidth, + double btnMinWidth, + double whiteSpaceHeigth, + double firstColumnWidth, + double paddingTop, + double paddingRigth, + double paddingBottom, + double paddingLeft, + double btnSpacing, + double hgap, + double vgap) +
        Erzeugt eine neue AlphaNumGridView, die ihre Labels, Textfelder und die Tastaturmatrix nach den übergebenen Parametern + positioniert.
        +
        AlphaNumGridView​(String[] labelTexts, + String... tfKeys) +
        Erzeugt eine neue AlphaNumGridView, die ihre Labels in der Spalte 0 ab Zeile 0 und ihre Textfelder in der Spalte 1 + ab Zeile 0 positioniert.
        +
        +
      • +
      +
      + +
      + +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          tfKeys

          +
          public final String[] tfKeys
          +
          Array, das die Schlüsselwörter definiert, mit denen die Textfelder in der Map tfMap gespeichert werden
          +
        • +
        + + + +
          +
        • +

          clearBtnKey

          +
          public final String clearBtnKey
          +
          Schlüsselwort, mit dem der Löschen-Button (AC) in der Map btnMap gespeichert wird
          +
        • +
        + + + +
          +
        • +

          backspaceBtnKey

          +
          public final String backspaceBtnKey
          +
          Schlüsselwort, mit dem der Backspace-Button in der Map btnMap gespeichert wird
          +
        • +
        + + + +
          +
        • +

          signBtnKey

          +
          public final String signBtnKey
          +
          Schlüsselwort für den Button zum Vorzeichenwechsel
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          zeroBtnKey

          +
          public final String zeroBtnKey
          +
          Schlüsselwort für den Button, der die Null repräsentiert
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + + + + + +
          +
        • +

          keyboardBtnKey

          +
          public final String keyboardBtnKey
          +
          Schlüsselwort für den Button zum Umschalten des Tastaturlayouts
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          nextBtnKey

          +
          public final String nextBtnKey
          +
          Schlüsselwort für den Button zum Weiterscrollen durch die Tastatur
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          previousBtnKey

          +
          public final String previousBtnKey
          +
          Schlüsselwort für den Button zum Rückwärtsscrollen durch die Tastatur
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          alphaKeys

          +
          public final String[] alphaKeys
          +
          Array, das die Schlüsselwörter für die Buchstaben-Buttons definiert
          +
        • +
        + + + +
          +
        • +

          numKeys

          +
          public final String[] numKeys
          +
          Array, das die Schlüsselwörter für die Zahlen-Buttons definiert
          +
        • +
        + + + +
          +
        • +

          labelTexts

          +
          public final String[] labelTexts
          +
          Array, das die Beschriftungen für die Labels vor den Textfeldern definiert
          +
        • +
        + + + +
          +
        • +

          setTFColumnSpan

          +
          protected boolean setTFColumnSpan
          +
          true, wenn die Textfelder über die Anzahl der Spalten von der Tastatur verteilt werden sollen. + Subklassen können dieses Attribut vor dem Aufruf der Methode createScenegraph() auf false + setzen, um die Textfelder nur in eine einzige Spalte zu legen.
          +
        • +
        + + + +
          +
        • +

          useClearAndBackBtn

          +
          protected boolean useClearAndBackBtn
          +
          true, wenn die Buttons clearBtnKey und backspaceBtnKey in der Zeile + firstKeyBtnRow über der Tastaturmatrix in der GridPane positioniert werden sollen. + Subklassen können dieses Attribut vor dem Aufruf der Methode createScenegraph() auf false + setzen, um die Buttons nicht in der GridPane zu positionieren. +

          + Unabhängig von diesem Attribut werden die beiden Buttons vollständig initialisiert und in der Map + ViewBase.getButtonMap() eingefügt! +

          +
        • +
        + + + +
          +
        • +

          tfMaxHeightProperty

          +
          protected final javafx.beans.property.DoubleProperty tfMaxHeightProperty
          +
          Property für die maximale Höhe der Textfelder in dieser View
          +
        • +
        + + + +
          +
        • +

          tfMinHeightProperty

          +
          protected final javafx.beans.property.DoubleProperty tfMinHeightProperty
          +
          Property für die minimale Höhe der Textfelder in dieser View
          +
        • +
        + + + +
          +
        • +

          btnMaxHeigthProperty

          +
          protected final javafx.beans.property.DoubleProperty btnMaxHeigthProperty
          +
          Property für die maximale Höhe der Buttons in dieser View
          +
        • +
        + + + +
          +
        • +

          btnMinHeigthProperty

          +
          protected final javafx.beans.property.DoubleProperty btnMinHeigthProperty
          +
          Property für die minimale Höhe der Buttons in dieser View
          +
        • +
        + + + +
          +
        • +

          btnMaxWidthProperty

          +
          protected final javafx.beans.property.DoubleProperty btnMaxWidthProperty
          +
          Property für die maximale Breite der Buttons in dieser View
          +
        • +
        + + + +
          +
        • +

          btnMinWidthProperty

          +
          protected final javafx.beans.property.DoubleProperty btnMinWidthProperty
          +
          Property für die minimale Breite der Buttons in dieser View
          +
        • +
        + + + +
          +
        • +

          whiteSpaceHeigthProperty

          +
          protected final javafx.beans.property.DoubleProperty whiteSpaceHeigthProperty
          +
          Property für die Höhe der Zeilen zwischen den Textfeldern und Buttons
          +
        • +
        + + + +
          +
        • +

          firstColumnWidthProperty

          +
          protected final javafx.beans.property.DoubleProperty firstColumnWidthProperty
          +
          Property für die Breite der ersten Spalte mit den Labels enthält. Wird benötigt, um symmetrisch Weißraum auf der rechten Seite hinzuzufügen.
          +
        • +
        + + + +
          +
        • +

          paddingTopProperty

          +
          protected final javafx.beans.property.DoubleProperty paddingTopProperty
          +
          Property für den Abstand am oberen Rand der GridPane im Center
          +
        • +
        + + + +
          +
        • +

          paddingRigthProperty

          +
          protected final javafx.beans.property.DoubleProperty paddingRigthProperty
          +
          Property für den Abstand am rechten Rand der GridPane im Center
          +
        • +
        + + + +
          +
        • +

          paddingBottomProperty

          +
          protected final javafx.beans.property.DoubleProperty paddingBottomProperty
          +
          Property für den Abstand am unteren Rand der GridPane im Center
          +
        • +
        + + + +
          +
        • +

          paddingLeftProperty

          +
          protected final javafx.beans.property.DoubleProperty paddingLeftProperty
          +
          Property für den Abstand am linken Rand der GridPane im Center
          +
        • +
        + + + +
          +
        • +

          btnSpacingProperty

          +
          protected final javafx.beans.property.DoubleProperty btnSpacingProperty
          +
          Property für den Abstand der Buttons in der GridPane
          +
        • +
        + + + +
          +
        • +

          hgapProperty

          +
          protected final javafx.beans.property.DoubleProperty hgapProperty
          +
          Property für den horizontalen Abstand der GridPane im Center
          +
        • +
        + + + +
          +
        • +

          vgapProperty

          +
          protected final javafx.beans.property.DoubleProperty vgapProperty
          +
          Property für den vertikalen Abstand der GridPane im Center
          +
        • +
        + + + +
          +
        • +

          firstTFRow

          +
          protected final int firstTFRow
          +
          Konstante, die die erste Zeile der GridPane definiert, in der die Textfelder positioniert werden
          +
        • +
        + + + +
          +
        • +

          tfColumn

          +
          protected final int tfColumn
          +
          Konstante, die die Spalte der GridPane definiert, in der die Textfelder positioniert werden
          +
        • +
        + + + +
          +
        • +

          firstLabelRow

          +
          protected final int firstLabelRow
          +
          Konstante, die die erste Zeile der GridPane definiert, in der die Labels positioniert werden
          +
        • +
        + + + +
          +
        • +

          labelColumn

          +
          protected final int labelColumn
          +
          Konstante, die die Spalte der GridPane definiert, in der die Labels positioniert werden
          +
        • +
        + + + +
          +
        • +

          firstKeyBtnRow

          +
          protected final int firstKeyBtnRow
          +
          Konstante, die die erste Zeile der GridPane definiert, in der die Tastatur-Buttons positioniert werden
          +
        • +
        + + + +
          +
        • +

          firstKeyBtnColumn

          +
          protected final int firstKeyBtnColumn
          +
          Konstante, die die erste Spalte der GridPane definiert, in der die Tastatur-Buttons positioniert werden
          +
        • +
        + + + +
          +
        • +

          center

          +
          protected final javafx.scene.layout.GridPane center
          +
          Tabelle im Center von root, in der alle Controls positioniert werden
          +
        • +
        + + + +
          +
        • +

          alphaNum

          +
          protected final AlphaNumKeys alphaNum
          +
          Buttons, die als alpha-numerische Tastatur dienen, die für verschiedene Zahlensysteme ausgelegt ist.
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          AlphaNumGridView

          +
          public AlphaNumGridView​(int firstKeyBtnRow,
          +                        int firstKeyBtnColumn)
          +
          Erzeugt eine neue AlphaNumGridView, die keine Labels und keine Textfelder enthält. + Der Scenegraph wird nicht automatisch erstellt.
          +
          +
          Parameters:
          +
          firstKeyBtnRow - erste Zeile in der GridPane, in der die Tastatur-Buttons positioniert werden
          +
          firstKeyBtnColumn - erste Spalte in der GridPane, in der die Tastatur-Buttons positioniert werden
          +
          +
        • +
        + + + +
          +
        • +

          AlphaNumGridView

          +
          public AlphaNumGridView​(String[] labelTexts,
          +                        String... tfKeys)
          +
          Erzeugt eine neue AlphaNumGridView, die ihre Labels in der Spalte 0 ab Zeile 0 und ihre Textfelder in der Spalte 1 + ab Zeile 0 positioniert. Der Scenegraph wird nicht automatisch erstellt. + Die Labels in der Spalte 0 und die Textfelder in der Spalte 1 werden aus den Arrays labelTexts und + tfKeys generiert. Nach den Textfeldern wird automatisch eine Zeile frei gelassen, bevor die erste Zeile + mit den Buttons beginnt. Die Buttons beginnen in der Spalte 1.
          +
          +
          Parameters:
          +
          labelTexts - Beschriftungen für die Labels vor den Textfeldern
          +
          tfKeys - Schlüsselwörter, mit denen die generierten Textfelder in der Map tfMap gespeichert werden
          +
          +
        • +
        + + + +
          +
        • +

          AlphaNumGridView

          +
          public AlphaNumGridView​(int firstLabelRow,
          +                        int labelColumn,
          +                        int firstTFRow,
          +                        int tfColumn,
          +                        int firstKeyBtnRow,
          +                        int firstKeyBtnColumn,
          +                        String[] labelTexts,
          +                        String... tfKeys)
          +
          Erzeugt eine neue AlphaNumGridView, die ihre Labels, Textfelder und die Tastaturmatrix nach den übergebenen Parametern + positioniert. Der Scenegraph wird nicht automatisch erstellt. + Die Labels und die Textfelder werden aus den Arrays labelTexts und tfKeys generiert.
          +
          +
          Parameters:
          +
          firstLabelRow - erste Zeile in der GridPane, in der die Labels positioniert werden
          +
          labelColumn - Spalte in der GridPane, in der die Labels positioniert werden
          +
          firstTFRow - erste Zeile in der GridPane, in der die Textfelder positioniert werden
          +
          tfColumn - Spalte in der GridPane, in der die Textfelder positioniert werden
          +
          firstKeyBtnRow - erste Zeile in der GridPane, in der die Tastatur-Buttons positioniert werden
          +
          firstKeyBtnColumn - erste Spalte in der GridPane, in der die Tastatur-Buttons positioniert werden
          +
          labelTexts - Beschriftungen für die Labels vor den Textfeldern
          +
          tfKeys - Schlüsselwörter, mit denen die generierten Textfelder in der Map tfMap gespeichert werden
          +
          +
        • +
        + + + +
          +
        • +

          AlphaNumGridView

          +
          public AlphaNumGridView​(int firstLabelRow,
          +                        int labelColumn,
          +                        int firstTFRow,
          +                        int tfColumn,
          +                        int firstKeyBtnRow,
          +                        int firstKeyBtnColumn,
          +                        String[] labelTexts,
          +                        String[] tfKeys,
          +                        double tfHeight,
          +                        double btnMaxSize,
          +                        double btnMinSize,
          +                        double whiteSpaceHeigth,
          +                        double firstColumnWidth,
          +                        double paddingTopRigthBottomLeft,
          +                        double spacing)
          +
          Erzeugt eine neue AlphaNumGridView, die ihre Labels, Textfelder und die Tastaturmatrix nach den übergebenen Parametern + positioniert. Der Scenegraph wird nicht automatisch erstellt. + Die Labels und die Textfelder werden aus den Arrays labelTexts und tfKeys generiert.
          +
          +
          Parameters:
          +
          firstLabelRow - erste Zeile in der GridPane, in der die Labels positioniert werden
          +
          labelColumn - Spalte in der GridPane, in der die Labels positioniert werden
          +
          firstTFRow - erste Zeile in der GridPane, in der die Textfelder positioniert werden
          +
          tfColumn - Spalte in der GridPane, in der die Textfelder positioniert werden
          +
          firstKeyBtnRow - erste Zeile in der GridPane, in der die Tastatur-Buttons positioniert werden
          +
          firstKeyBtnColumn - erste Spalte in der GridPane, in der die Tastatur-Buttons positioniert werden
          +
          labelTexts - Beschriftungen für die Labels vor den Textfeldern
          +
          tfKeys - Schlüsselwörter, mit denen die generierten Textfelder in der Map tfMap gespeichert werden
          +
          tfHeight - Höhe, die für alle Textfelder in den Properties tfMaxHeightProperty und tfMinHeightProperty eingestellt wird
          +
          btnMaxSize - Größe, die für alle Buttons in den Properties btnMaxHeigthProperty und btnMaxWidthProperty eingestellt wird
          +
          btnMinSize - Größe, die für alle Buttons in den Properties btnMinHeigthProperty und btnMinWidthProperty eingestellt wird
          +
          whiteSpaceHeigth - Höhe, die für die Property whiteSpaceHeigthProperty eingestellt wird
          +
          firstColumnWidth - Breite, die für die Property firstColumnWidthProperty eingestellt wird
          +
          paddingTopRigthBottomLeft - Größe, die für die Properties paddingTopProperty, paddingRigthProperty, paddingBottomProperty und paddingLeftProperty eingestellt wird
          +
          spacing - Größe, die für die Properties btnSpacingProperty, hgapProperty und vgapProperty eingestellt wird
          +
          +
        • +
        + + + +
          +
        • +

          AlphaNumGridView

          +
          public AlphaNumGridView​(int firstLabelRow,
          +                        int labelColumn,
          +                        int firstTFRow,
          +                        int tfColumn,
          +                        int firstKeyBtnRow,
          +                        int firstKeyBtnColumn,
          +                        String[] labelTexts,
          +                        String[] tfKeys,
          +                        double tfMaxHeight,
          +                        double tfMinHeight,
          +                        double btnMaxHeigth,
          +                        double btnMinHeigth,
          +                        double btnMaxWidth,
          +                        double btnMinWidth,
          +                        double whiteSpaceHeigth,
          +                        double firstColumnWidth,
          +                        double paddingTop,
          +                        double paddingRigth,
          +                        double paddingBottom,
          +                        double paddingLeft,
          +                        double btnSpacing,
          +                        double hgap,
          +                        double vgap)
          +
          Erzeugt eine neue AlphaNumGridView, die ihre Labels, Textfelder und die Tastaturmatrix nach den übergebenen Parametern + positioniert. Der Scenegraph wird nicht automatisch erstellt. + Die Labels und die Textfelder werden aus den Arrays labelTexts und tfKeys generiert.
          +
          +
          Parameters:
          +
          firstLabelRow - erste Zeile in der GridPane, in der die Labels positioniert werden
          +
          labelColumn - Spalte in der GridPane, in der die Labels positioniert werden
          +
          firstTFRow - erste Zeile in der GridPane, in der die Textfelder positioniert werden
          +
          tfColumn - Spalte in der GridPane, in der die Textfelder positioniert werden
          +
          firstKeyBtnRow - erste Zeile in der GridPane, in der die Tastatur-Buttons positioniert werden
          +
          firstKeyBtnColumn - erste Spalte in der GridPane, in der die Tastatur-Buttons positioniert werden
          +
          labelTexts - Beschriftungen für die Labels vor den Textfeldern
          +
          tfKeys - Schlüsselwörter, mit denen die generierten Textfelder in der Map tfMap gespeichert werden
          +
          tfMaxHeight - Höhe, die für alle Textfelder in der Property tfMaxHeightProperty eingestellt wird
          +
          tfMinHeight - Höhe, die für alle Textfelder in der Property tfMinHeightProperty eingestellt wird
          +
          btnMaxHeigth - Höhe, die für alle Buttons in der Property btnMaxHeigthProperty eingestellt wird
          +
          btnMinHeigth - Höhe, die für alle Buttons in der Property btnMinHeigthProperty eingestellt wird
          +
          btnMaxWidth - Breite, die für alle Buttons in der Property btnMaxWidthProperty eingestellt wird
          +
          btnMinWidth - Breite, die für alle Buttons in der Property btnMinWidthProperty eingestellt wird
          +
          whiteSpaceHeigth - Höhe, die für die Property whiteSpaceHeigthProperty eingestellt wird
          +
          firstColumnWidth - Breite, die für die Property firstColumnWidthProperty eingestellt wird
          +
          paddingTop - Größe, die für die Property paddingTopProperty eingestellt wird
          +
          paddingRigth - Größe, die für die Property paddingRigthProperty eingestellt wird
          +
          paddingBottom - Größe, die für die Property paddingBottomProperty eingestellt wird
          +
          paddingLeft - Größe, die für die Property paddingLeftProperty eingestellt wird
          +
          btnSpacing - Größe, die für die Property btnSpacingProperty eingestellt wird
          +
          hgap - Größe, die für die Property hgapProperty eingestellt wird
          +
          vgap - Größe, die für die Property vgapProperty eingestellt wird
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getMaxHeigth

          +
          public double getMaxHeigth()
          +
          Gibt die maximale Höhe der View an
          +
          +
          Returns:
          +
          maximale Höhe der View
          +
          +
        • +
        + + + +
          +
        • +

          getMaxWidth

          +
          public double getMaxWidth()
          +
          Gibt die maximale Breite der View an
          +
          +
          Returns:
          +
          maximale Breite der View
          +
          +
        • +
        + + + +
          +
        • +

          getMinHeigth

          +
          public double getMinHeigth()
          +
          Gibt die minimale Höhe der View an
          +
          +
          Returns:
          +
          minimale Höhe der View
          +
          +
        • +
        + + + +
          +
        • +

          getMinWidth

          +
          public double getMinWidth()
          +
          Gibt die minimale Breite der View an
          +
          +
          Returns:
          +
          minimale Breite der View
          +
          +
        • +
        + + + +
          +
        • +

          createScenegraph

          +
          protected void createScenegraph()
          +
          Erstellt den Scenegraphen und fügt diesen dem Wurzelknoten hinzu. + Subklassen können diese Methode überschreiben, um nach der Erstellung des Scenegraphen in dieser + Klasse weitere Bedienelemente hinzuzufügen.
          +
          +
          Specified by:
          +
          createScenegraph in class ViewBase<javafx.scene.layout.BorderPane>
          +
          +
        • +
        + + + +
          +
        • +

          addRowConstraint

          +
          protected void addRowConstraint​(int rowIndex,
          +                                AlphaNumGridView.ConstraintType type)
          +
          Erstellt neue RowConstraints für die Zeile mit dem Index rowIndex, die an den ConstraintType angepasst sind. + Der ConstraintType bestimmt, ob sich in der Zeile Textfelder, Buttons oder Weißraum befindet, um Valignment und Vgrow + anzupassen und die Properties maxHeightProperty und minHeightProperty mit den passenden Properties dieser AlphaNumGridView + bidirektional zu verbinden.
          +
          +
          Parameters:
          +
          rowIndex - Index der Zeile, für die neue RowConstraints hinzugefügt werden
          +
          type - Typ der Zeile
          +
          +
        • +
        + + + +
          +
        • +

          addColumnConstraint

          +
          protected void addColumnConstraint​(int columnIndex,
          +                                   AlphaNumGridView.ConstraintType type)
          +
          Erstellt neue ColumnConstraints für die Spalte mit dem Index columnIndex, die an den ConstraintType angepasst sind. + Der ConstraintType bestimmt, ob es sich um die erste Spalte oder um eine Spalte mit Buttons handelt, um Hgrow + anzupassen und die Properties maxWidthProperty und minWidthProperty mit den passenden Properties dieser AlphaNumGridView + bidirektional zu verbinden.
          +
          +
          Parameters:
          +
          columnIndex - Index der Spalte, für die neue RowConstraints hinzugefügt werden
          +
          type - Typ der Spalte
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/views/CalculatorView.html b/doc/0.1.4/de_public/bitchanger/gui/views/CalculatorView.html new file mode 100644 index 0000000..c7a95f8 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/views/CalculatorView.html @@ -0,0 +1,352 @@ + + + + + +CalculatorView + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class CalculatorView

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          CalculatorView

          +
          public CalculatorView()
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/views/Controllable.html b/doc/0.1.4/de_public/bitchanger/gui/views/Controllable.html new file mode 100644 index 0000000..6a986fe --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/views/Controllable.html @@ -0,0 +1,328 @@ + + + + + +Controllable + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface Controllable

    +
    +
    +
    +
      +
    • +
      +
      All Known Implementing Classes:
      +
      AlphaNumGrid, ConverterView, ViewBase
      +
      +
      +
      public interface Controllable
      +
      Schnittstelle, die Methoden definiert, um eine View mit einem Controller zu verbinden
      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      See Also:
      +
      Viewable, +ControllerBase
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Abstract Methods 
        Modifier and TypeMethodDescription
        HashMap<String,​javafx.scene.control.Button>getButtons() +
        Gibt eine Map mit allen Buttons der View zurück.
        +
        HashMap<String,​javafx.scene.Node>getNodes() +
        Gibt eine Map mit allen Elemente (Nodes) der View zurück, die keine Buttons oder Textfelder sind und im Controller benötigt werden.
        +
        HashMap<String,​javafx.scene.control.TextField>getTextFields() +
        Gibt eine Map mit allen Textfelder der View zurück.
        +
        +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTextFields

          +
          HashMap<String,​javafx.scene.control.TextField> getTextFields()
          +
          Gibt eine Map mit allen Textfelder der View zurück. Jedes Textfeld ist einem eindeutigen Schlüsselwort zugeordnet, + mit dem es aus der Map herausgesucht werden kann. +

          + Jedes Schlüsselwort sollte einen Sinnvollen Bezug zum Einsatz des Textfeldes haben! +

          +
          +
          Returns:
          +
          Map, die alle Textfelder einer View enthält
          +
          +
        • +
        + + + +
          +
        • +

          getButtons

          +
          HashMap<String,​javafx.scene.control.Button> getButtons()
          +
          Gibt eine Map mit allen Buttons der View zurück. Jeder Button ist einem eindeutigen Schlüsselwort zugeordnet, + mit dem er aus der Map herausgesucht werden kann. +

          + Jedes Schlüsselwort sollte einen Sinnvollen Bezug zum Einsatz des Buttons haben! +

          +
          +
          Returns:
          +
          Map, die alle Buttons einer View enthält
          +
          +
        • +
        + + + +
          +
        • +

          getNodes

          +
          HashMap<String,​javafx.scene.Node> getNodes()
          +
          Gibt eine Map mit allen Elemente (Nodes) der View zurück, die keine Buttons oder Textfelder sind und im Controller benötigt werden. + Jedes Element ist einem eindeutigen Schlüsselwort zugeordnet, mit dem es aus der Map herausgesucht werden kann. +

          + Jedes Schlüsselwort sollte einen Sinnvollen Bezug zum Einsatz des Elements haben! +

          +
          +
          Returns:
          +
          Map, die alle Elemente einer View enthält, die keine Buttons oder Textfelder sind und im Controller benötigt werden
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +
    + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/views/ConverterView.html b/doc/0.1.4/de_public/bitchanger/gui/views/ConverterView.html new file mode 100644 index 0000000..0b71eec --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/views/ConverterView.html @@ -0,0 +1,699 @@ + + + + + +ConverterView + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class ConverterView

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Controllable, Viewable
      +
      +
      +
      public class ConverterView
      +extends AlphaNumGridView
      +
      View, die die Scene für die Umwandlung von Zahlensystemen enthält. +

      + Für diese View-Klasse wird der Controller ConverterController registriert. +

      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      See Also:
      +
      ConverterController
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          TF_HEX_KEY

          +
          public static final String TF_HEX_KEY
          +
          Schlüsselwort, mit das Textfeld für die hexadezimale Darstellung in der Map tfMap gespeichert wird
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          TF_DEC_KEY

          +
          public static final String TF_DEC_KEY
          +
          Schlüsselwort, mit das Textfeld für die dezimale Darstellung in der Map tfMap gespeichert wird
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          TF_OCT_KEY

          +
          public static final String TF_OCT_KEY
          +
          Schlüsselwort, mit das Textfeld für die oktale Darstellung in der Map tfMap gespeichert wird
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          TF_BIN_KEY

          +
          public static final String TF_BIN_KEY
          +
          Schlüsselwort, mit das Textfeld für die binäre Darstellung in der Map tfMap gespeichert wird
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          TF_ANY_KEY

          +
          public static final String TF_ANY_KEY
          +
          Schlüsselwort, mit das Textfeld für die Darstellung zu einer wählbaren Basis in der Map tfMap gespeichert wird
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          TF_KEYS

          +
          public static final String[] TF_KEYS
          +
          Array, das die Schlüsselwörter definiert, mit denen die Textfelder in der Map tfMap gespeichert werden
          +
        • +
        + + + +
          +
        • +

          tfHexKey

          +
          public final String tfHexKey
          +
          Schlüsselwort, mit das Textfeld für die hexadezimale Darstellung in der Map tfMap gespeichert wird
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          tfDecKey

          +
          public final String tfDecKey
          +
          Schlüsselwort, mit das Textfeld für die dezimale Darstellung in der Map tfMap gespeichert wird
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          tfOctKey

          +
          public final String tfOctKey
          +
          Schlüsselwort, mit das Textfeld für die oktale Darstellung in der Map tfMap gespeichert wird
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          tfBinKey

          +
          public final String tfBinKey
          +
          Schlüsselwort, mit das Textfeld für die binäre Darstellung in der Map tfMap gespeichert wird
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          tfAnyKey

          +
          public final String tfAnyKey
          +
          Schlüsselwort, mit das Textfeld für die Darstellung zu einer wählbaren Basis in der Map tfMap gespeichert wird
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          baseSpinnerKey

          +
          public final String baseSpinnerKey
          +
          Schlüsselwort, mit dem der Spinner für die beliebige Basis in der Map nodeMap gespeichert wird
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ConverterView

          +
          public ConverterView()
          +
          Erzeugt eine neue ConverterView mit vollständigem Scenegraphen und initialisiert die Funktionen + der Bedienelemente mit einem ConverterController.
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + + + + + +
          +
        • +

          generateMenuBar

          +
          public BasicMenuBar generateMenuBar()
          +
        • +
        + + + +
          +
        • +

          createScenegraph

          +
          protected void createScenegraph()
          +
          Erstellt den Scenegraphen und fügt diesen dem Wurzelknoten hinzu. + Subklassen können diese Methode überschreiben, um nach der Erstellung des Scenegraphen in dieser + Klasse weitere Bedienelemente hinzuzufügen.
          +
          +
          Overrides:
          +
          createScenegraph in class AlphaNumGridView
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/views/IEEEView.html b/doc/0.1.4/de_public/bitchanger/gui/views/IEEEView.html new file mode 100644 index 0000000..272e3ea --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/views/IEEEView.html @@ -0,0 +1,431 @@ + + + + + +IEEEView + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class IEEEView

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Controllable, Viewable
      +
      +
      +
      public class IEEEView
      +extends AlphaNumGridView
      +
      View, die die Scene für die Umwandlung zwischen dezimal Zahlen und der IEEE-Norm enthält. +

      + Für diese View-Klasse wird der Controller IEEEController registriert. +

      +
      +
      Since:
      +
      Bitchanger 0.1.4
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      See Also:
      +
      IEEEController
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          tfDecKey

          +
          public final String tfDecKey
          +
          Schlüsselwort, mit das Textfeld für die dezimale Darstellung in der Map tfMap gespeichert wird
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          tfIEEEKey

          +
          public final String tfIEEEKey
          +
          Schlüsselwort, mit das Textfeld für die IEEE Darstellung in der Map tfMap gespeichert wird
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          IEEEView

          +
          public IEEEView()
          +
          Erzeugt eine neue IEEEView mit vollständigem Scenegraphen und initialisiert die Funktionen + der Bedienelemente mit einem IEEEController.
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/views/ViewBase.html b/doc/0.1.4/de_public/bitchanger/gui/views/ViewBase.html new file mode 100644 index 0000000..5243cd2 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/views/ViewBase.html @@ -0,0 +1,694 @@ + + + + + +ViewBase + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class ViewBase<T extends javafx.scene.Parent>

    +
    +
    + +
    +
      +
    • +
      +
      Type Parameters:
      +
      T - Typ des Wurzelknotens im Scenegraphen
      +
      +
      +
      All Implemented Interfaces:
      +
      Controllable, Viewable
      +
      +
      +
      Direct Known Subclasses:
      +
      AlphaNumGridView
      +
      +
      +
      public abstract class ViewBase<T extends javafx.scene.Parent>
      +extends Object
      +implements Viewable
      +
      Basis-Klasse für alle View-Klassen, die das Interface Viewable implementieren und mit einem + Controller eine Funktion erhalten. +

      + Die grundlegenden Methoden der Schnittstellen Viewable und Controllable sind bereits implementiert. + Die dazugehörigen Attribute sind mit protected geschützt, damit diese direkt in Unterklassen verwendet werden können. +

      +

      + Es werden abstrakte Methoden definiert, die zur Erstellung des Scenegraphens benötigt werden. +

      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          scene

          +
          protected final javafx.scene.Scene scene
          +
          Szene, die von der View repräsentiert wird
          +
        • +
        + + + +
          +
        • +

          root

          +
          protected final T extends javafx.scene.Parent root
          +
          Wurzelknoten im Scenegraph
          +
        • +
        + + + +
          +
        • +

          controller

          +
          protected Controller controller
          +
          Controller, der die Funktion zu den Bedienelementen hinzufügt.
          +
        • +
        + + + +
          +
        • +

          menubar

          +
          protected javafx.scene.control.MenuBar menubar
          +
          MenuBar des Scenegraphen
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + + + +
          +
        • +

          ViewBase

          +
          public ViewBase​(T root)
          +
          Erzeugt eine neue View, die eine neue Scene mit dem übergebenen Wurzelknoten root kapselt. +

          + Nach der Initialisierung der Attribute werden nacheinander die Methoden init() und createScenegraph() + aufgerufen, um den Scenegraphen zu konstruieren und im Anschluss wird mit Hilfe eines Controllers die Funktion der Bedienelemente + hinzugefügt, wenn ein passender Controller registriert wurde. +

          +
          +
          Parameters:
          +
          root - Wurzelknoten des Scenegraphen
          +
          See Also:
          +
          init(), +createScenegraph(), +buildScenegraph()
          +
          +
        • +
        + + + + + +
          +
        • +

          ViewBase

          +
          public ViewBase​(T root,
          +                boolean buildScenegraph)
          +
          Erzeugt eine neue View, die eine neue Scene mit dem übergebenen Wurzelknoten root kapselt. +

          + Nach der Initialisierung der Attribute werden nacheinander die Methoden init() und ggf. buildScenegraph() + aufgerufen, um den Scenegraphen zu konstruieren und im Anschluss wird mit Hilfe eines Controllers die Funktion der Bedienelemente + hinzugefügt, wenn ein passender Controller registriert wurde. +

          +
          +
          Parameters:
          +
          root - Wurzelknoten des Scenegraphen
          +
          buildScenegraph - true, wenn der Scenegraph mit der Methode buildScenegraph() erstellt und ein Controller + erzeugt werden soll, sonst false
          +
          See Also:
          +
          buildScenegraph()
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getScene

          +
          public final javafx.scene.Scene getScene()
          +
          Gibt die repräsentierte Scene zurück
          +
          +
          Specified by:
          +
          getScene in interface Viewable
          +
          Returns:
          +
          von der View repräsentierte Scene
          +
          +
        • +
        + + + +
          +
        • +

          getTextFieldMap

          +
          public final Map<String,​javafx.scene.control.TextField> getTextFieldMap()
          +
          Gibt eine Map mit allen Textfelder der View zurück. Jedes Textfeld ist einem eindeutigen Schlüsselwort zugeordnet, + mit dem es aus der Map herausgesucht werden kann. +

          + Jedes Schlüsselwort sollte einen Sinnvollen Bezug zum Einsatz des Textfeldes haben! +

          +
          +
          Specified by:
          +
          getTextFieldMap in interface Controllable
          +
          Returns:
          +
          Map, die alle Textfelder einer View enthält
          +
          +
        • +
        + + + +
          +
        • +

          getButtonMap

          +
          public final Map<String,​javafx.scene.control.Button> getButtonMap()
          +
          Gibt eine Map mit allen Buttons der View zurück. Jeder Button ist einem eindeutigen Schlüsselwort zugeordnet, + mit dem er aus der Map herausgesucht werden kann. +

          + Jedes Schlüsselwort sollte einen Sinnvollen Bezug zum Einsatz des Buttons haben! +

          +
          +
          Specified by:
          +
          getButtonMap in interface Controllable
          +
          Returns:
          +
          Map, die alle Buttons einer View enthält
          +
          +
        • +
        + + + +
          +
        • +

          getNodeMap

          +
          public final Map<String,​javafx.scene.Node> getNodeMap()
          +
          Gibt eine Map mit allen Elemente (Nodes) der View zurück, die keine Buttons oder Textfelder sind und im Controller benötigt werden. + Jedes Element ist einem eindeutigen Schlüsselwort zugeordnet, mit dem es aus der Map herausgesucht werden kann. +

          + Jedes Schlüsselwort sollte einen Sinnvollen Bezug zum Einsatz des Elements haben! +

          +
          +
          Specified by:
          +
          getNodeMap in interface Controllable
          +
          Returns:
          +
          Map, die alle Elemente einer View enthält, die keine Buttons oder Textfelder sind und im Controller benötigt werden
          +
          +
        • +
        + + + + + +
          +
        • +

          setMenuBar

          +
          public <V extends javafx.scene.control.MenuBar> void setMenuBar​(V menubar)
          +
          Setzt die übergebene MenuBar in den Scenegraph der View. Eine eventuell vorhandene MenuBar + wird zuvor aus dem Scenegraph entfernt und ersetzt. Ist das Argument null wird nur + versucht die bereits vorhandene MenuBar aus dem Scenegraphen zu entfernen. + +

          + Wenn der Wurzelknoten dieser View eine Instanz von BorderPane ist, wird + die übergebene MenuBar in Top gelegt, ansonsten wird nur die alte MenuBar + entfernt. +

          +
          +
          Specified by:
          +
          setMenuBar in interface Viewable
          +
          Type Parameters:
          +
          V - Typ der MenuBar zur Laufzeit
          +
          Parameters:
          +
          menubar - MenuBar, die von dieser View verwendet werden soll. Darf null sein, um die aktuelle MenuBar zu entfernen
          +
          +
        • +
        + + + +
          +
        • +

          init

          +
          protected void init()
          +
          Initialisierungsmethode. + Diese Methode wird als erstes vom Konstruktor aufgerufen, nachdem die Attribute initialisiert wurden. +

          + Unterklassen können diese Methode überschreiben, um Attribute vor der Konstruktion des Scenegraphen zu initialisieren. +

          +

          + Die Implementierung der Methode in dieser Klasse hat keine Anweisungen. +

          +
        • +
        + + + + + + + +
          +
        • +

          createScenegraph

          +
          protected abstract void createScenegraph()
          +
          Methode, die den Scenegraphen konstruiert. Diese Methode wird aufgerufen, nachdem die init-Methode beendet wurde. +

          + In dieser Methode müssen alle Bedien- und Oberflächenelemente zum Scenegraphen hinzugefügt werden. Alle Elemente, die + auch im Controller benötigt werden, müssen zu der entsprechenden Map hinzugefügt werden: + btnMap, tfMap, nodeMap +

          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/views/Viewable.html b/doc/0.1.4/de_public/bitchanger/gui/views/Viewable.html new file mode 100644 index 0000000..484743f --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/views/Viewable.html @@ -0,0 +1,453 @@ + + + + + +Viewable + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface Viewable

    +
    +
    +
    +
      +
    • +
      +
      All Superinterfaces:
      +
      Controllable
      +
      +
      +
      All Known Implementing Classes:
      +
      AlphaNumGridView, CalculatorView, ConverterView, IEEEView, ViewBase
      +
      +
      +
      public interface Viewable
      +extends Controllable
      +
      Die Schnittstelle Viewable definiert die Basis für eine View. +

      + Eine View ist in einem JavaFX-Fenster (javafx.stage.Stage) darstellbar. Dazu kapselt die View eine Scene, die + in einer Stage präsentiert werden kann. +

      +

      + Der Scenegraph wird von der View konstruiert, dabei wird in der View nur das + Layout und keine Funktion festgelegt. +

      +

      + Jeder View kann ein Controller zugeordnet werden, um den Bedienelementen im Scenegraph eine Funktion zu geben. +

      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.0
      +
      Author:
      +
      Tim Mühle
      +
      See Also:
      +
      Controllable, +Controller
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          generateMenuBar

          +
          default BasicMenuBar generateMenuBar()
          +
        • +
        + + + + + + + +
          +
        • +

          getScene

          +
          javafx.scene.Scene getScene()
          +
          Gibt die repräsentierte Scene zurück
          +
          +
          Returns:
          +
          von der View repräsentierte Scene
          +
          +
        • +
        + + + +
          +
        • +

          getMaxHeigth

          +
          double getMaxHeigth()
          +
          Gibt die maximale Höhe der View an
          +
          +
          Returns:
          +
          maximale Höhe der View
          +
          +
        • +
        + + + +
          +
        • +

          getMaxWidth

          +
          double getMaxWidth()
          +
          Gibt die maximale Breite der View an
          +
          +
          Returns:
          +
          maximale Breite der View
          +
          +
        • +
        + + + +
          +
        • +

          getMinHeigth

          +
          double getMinHeigth()
          +
          Gibt die minimale Höhe der View an
          +
          +
          Returns:
          +
          minimale Höhe der View
          +
          +
        • +
        + + + +
          +
        • +

          getMinWidth

          +
          double getMinWidth()
          +
          Gibt die minimale Breite der View an
          +
          +
          Returns:
          +
          minimale Breite der View
          +
          +
        • +
        + + + + + +
          +
        • +

          setMenuBar

          +
          <T extends javafx.scene.control.MenuBar> void setMenuBar​(T menubar)
          +
          Setzt die übergebene MenuBar in den Scenegraph der View. Eine eventuell vorhandene MenuBar + wird zuvor aus dem Scenegraph entfernt und ersetzt. Ist das Argument null wird nur + versucht die bereits vorhandene MenuBar aus dem Scenegraphen zu entfernen.
          +
          +
          Type Parameters:
          +
          T - Typ der MenuBar zur Laufzeit
          +
          Parameters:
          +
          menubar - MenuBar, die von dieser View verwendet werden soll. Darf null sein, um die aktuelle MenuBar zu entfernen
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/views/class-use/AlphaNumGridView.ConstraintType.html b/doc/0.1.4/de_public/bitchanger/gui/views/class-use/AlphaNumGridView.ConstraintType.html new file mode 100644 index 0000000..76f4e84 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/views/class-use/AlphaNumGridView.ConstraintType.html @@ -0,0 +1,231 @@ + + + + + +Uses of Class bitchanger.gui.views.AlphaNumGridView.ConstraintType + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.views.AlphaNumGridView.ConstraintType

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/views/class-use/AlphaNumGridView.html b/doc/0.1.4/de_public/bitchanger/gui/views/class-use/AlphaNumGridView.html new file mode 100644 index 0000000..110f166 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/views/class-use/AlphaNumGridView.html @@ -0,0 +1,209 @@ + + + + + +Uses of Class bitchanger.gui.views.AlphaNumGridView + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.views.AlphaNumGridView

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/views/class-use/CalculatorView.html b/doc/0.1.4/de_public/bitchanger/gui/views/class-use/CalculatorView.html new file mode 100644 index 0000000..22392e9 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/views/class-use/CalculatorView.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.views.CalculatorView + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.views.CalculatorView

    +
    +
    No usage of bitchanger.gui.views.CalculatorView
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/views/class-use/Controllable.html b/doc/0.1.4/de_public/bitchanger/gui/views/class-use/Controllable.html new file mode 100644 index 0000000..94510ee --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/views/class-use/Controllable.html @@ -0,0 +1,259 @@ + + + + + +Uses of Interface bitchanger.gui.views.Controllable + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    bitchanger.gui.views.Controllable

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/views/class-use/ConverterView.html b/doc/0.1.4/de_public/bitchanger/gui/views/class-use/ConverterView.html new file mode 100644 index 0000000..8b7ab77 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/views/class-use/ConverterView.html @@ -0,0 +1,196 @@ + + + + + +Uses of Class bitchanger.gui.views.ConverterView + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.views.ConverterView

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/views/class-use/IEEEView.html b/doc/0.1.4/de_public/bitchanger/gui/views/class-use/IEEEView.html new file mode 100644 index 0000000..ad84b02 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/views/class-use/IEEEView.html @@ -0,0 +1,199 @@ + + + + + +Uses of Class bitchanger.gui.views.IEEEView + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.views.IEEEView

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/views/class-use/ViewBase.html b/doc/0.1.4/de_public/bitchanger/gui/views/class-use/ViewBase.html new file mode 100644 index 0000000..809c033 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/views/class-use/ViewBase.html @@ -0,0 +1,217 @@ + + + + + +Uses of Class bitchanger.gui.views.ViewBase + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.views.ViewBase

    +
    +
    +
      +
    • + + + + + + + + + + + + +
      Packages that use ViewBase 
      PackageDescription
      bitchanger.gui.views +
      Bietet verschiedene Views, die auf einer graphischen Oberfläche präsentiert werden können
      +
      +
    • +
    • + +
    • +
    +
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/views/class-use/Viewable.html b/doc/0.1.4/de_public/bitchanger/gui/views/class-use/Viewable.html new file mode 100644 index 0000000..633410e --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/views/class-use/Viewable.html @@ -0,0 +1,353 @@ + + + + + +Uses of Interface bitchanger.gui.views.Viewable + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    bitchanger.gui.views.Viewable

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/views/package-summary.html b/doc/0.1.4/de_public/bitchanger/gui/views/package-summary.html new file mode 100644 index 0000000..d2dbf4f --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/views/package-summary.html @@ -0,0 +1,232 @@ + + + + + +bitchanger.gui.views + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package bitchanger.gui.views

    +
    +
    +
    + + +
    Bietet verschiedene Views, die auf einer graphischen Oberfläche präsentiert werden können
    +
    +
      +
    • + + + + + + + + + + + + +
      Interface Summary 
      InterfaceDescription
      Viewable +
      Die Schnittstelle Viewable definiert die Basis für eine View.
      +
      +
    • +
    • + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Class Summary 
      ClassDescription
      AlphaNumGridView +
      View, die die Basis Scene für eine Tabelle aus einer Spalte mit Labels, einer Spalte mit Textfeldern + und einer Tastaturmatrix aus AlphaNumKeys erstellt.
      +
      CalculatorView 
      ConverterView +
      View, die die Scene für die Umwandlung von Zahlensystemen enthält.
      +
      IEEEView +
      View, die die Scene für die Umwandlung zwischen dezimal Zahlen und der IEEE-Norm enthält.
      +
      ViewBase<T extends javafx.scene.Parent> +
      Basis-Klasse für alle View-Klassen, die das Interface Viewable implementieren und mit einem + Controller eine Funktion erhalten.
      +
      +
    • +
    • + + + + + + + + + + + + +
      Enum Summary 
      EnumDescription
      AlphaNumGridView.ConstraintType +
      Aufzählung von möglichen Typen für Constraints einer GridPane
      +
      +
    • +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/views/package-tree.html b/doc/0.1.4/de_public/bitchanger/gui/views/package-tree.html new file mode 100644 index 0000000..967ca32 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/views/package-tree.html @@ -0,0 +1,198 @@ + + + + + +bitchanger.gui.views Class Hierarchy + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package bitchanger.gui.views

    +Package Hierarchies: + +
    +
    +
    +

    Class Hierarchy

    + +
    +
    +

    Interface Hierarchy

    + +
    +
    +

    Enum Hierarchy

    + +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/bitchanger/gui/views/package-use.html b/doc/0.1.4/de_public/bitchanger/gui/views/package-use.html new file mode 100644 index 0000000..407b5f4 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/gui/views/package-use.html @@ -0,0 +1,270 @@ + + + + + +Uses of Package bitchanger.gui.views + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    bitchanger.gui.views

    +
    +
    +
      +
    • + + + + + + + + + + + + + + + + + + + + +
      Packages that use bitchanger.gui.views 
      PackageDescription
      bitchanger.gui.controller +
      Stellt Controller bereit, die den Views eine Funktion geben.
      +
      bitchanger.gui.views +
      Bietet verschiedene Views, die auf einer graphischen Oberfläche präsentiert werden können
      +
      bitchanger.main +
      Beinhaltet den Launcher mit der Main-Methode und die JavaFX Applikation zum starten der grafischen Oberfläche.
      +
      +
    • +
    • + + + + + + + + + + + + + + + + + + + + + + +
      Classes in bitchanger.gui.views used by bitchanger.gui.controller 
      ClassDescription
      ConverterView +
      View, die die Scene für die Umwandlung von Zahlensystemen enthält.
      +
      IEEEView +
      View, die die Scene für die Umwandlung zwischen dezimal Zahlen und der IEEE-Norm enthält.
      +
      Viewable +
      Die Schnittstelle Viewable definiert die Basis für eine View.
      +
      +
    • +
    • + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Classes in bitchanger.gui.views used by bitchanger.gui.views 
      ClassDescription
      AlphaNumGridView +
      View, die die Basis Scene für eine Tabelle aus einer Spalte mit Labels, einer Spalte mit Textfeldern + und einer Tastaturmatrix aus AlphaNumKeys erstellt.
      +
      AlphaNumGridView.ConstraintType +
      Aufzählung von möglichen Typen für Constraints einer GridPane
      +
      Viewable +
      Die Schnittstelle Viewable definiert die Basis für eine View.
      +
      ViewBase +
      Basis-Klasse für alle View-Klassen, die das Interface Viewable implementieren und mit einem + Controller eine Funktion erhalten.
      +
      +
    • +
    • + + + + + + + + + + + + + + +
      Classes in bitchanger.gui.views used by bitchanger.main 
      ClassDescription
      Viewable +
      Die Schnittstelle Viewable definiert die Basis für eine View.
      +
      +
    • +
    +
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/main/BitchangerLauncher.html b/doc/0.1.4/de_public/bitchanger/main/BitchangerLauncher.html new file mode 100644 index 0000000..66b4da0 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/main/BitchangerLauncher.html @@ -0,0 +1,327 @@ + + + + + +BitchangerLauncher + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class BitchangerLauncher

    +
    +
    + +
    +
      +
    • +
      +
      public class BitchangerLauncher
      +extends Object
      +
      Diese Klasse enthält die Main-Methode, die der Einstiegspunkt für die Applikation ist.
      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          BitchangerLauncher

          +
          public BitchangerLauncher()
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          main

          +
          public static void main​(String[] args)
          +
          Die Main Methode startet die PrimaryFXApp der Anwendung und wartet, bis das Anwendungsfenster geschlossen wurde. + Danach werden zuerst alle Einstellungen aus Preferences gespeichert, bevor das Programm beendet wird.
          +
          +
          Parameters:
          +
          args - Argumente, die beim Programmstart übergeben werden. Die Argumente werden vom Programm ignoriert.
          +
          See Also:
          +
          Preferences, +PrimaryFXApp.launchFXApplication(String[])
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/main/PrimaryFXApp.html b/doc/0.1.4/de_public/bitchanger/main/PrimaryFXApp.html new file mode 100644 index 0000000..b26ccad --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/main/PrimaryFXApp.html @@ -0,0 +1,626 @@ + + + + + +PrimaryFXApp + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class PrimaryFXApp

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • javafx.application.Application
      • +
      • +
          +
        • bitchanger.main.PrimaryFXApp
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      ControllableApplication
      +
      +
      +
      public class PrimaryFXApp
      +extends javafx.application.Application
      +implements ControllableApplication
      +
      Hauptfenster der Applikation mit javaFX +

      + Das Fenster bietet verschiedene Szenen zum Rechnen und Umwandeln von verschiedenen Zahlensystemen. + Über eine Menüleiste kann zwischen den Szenen gewechselt werden, sowie die Programm-Einstellungen geöffnet werden. +

      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      See Also:
      +
      ConverterView, +ConverterController
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Nested Class Summary

        +
          +
        • + + +

          Nested classes/interfaces inherited from class javafx.application.Application

          +javafx.application.Application.Parameters
        • +
        +
      • +
      +
      + +
      + +
      + +
      +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + +
        Constructors 
        ConstructorDescription
        PrimaryFXApp() +
        Erzeugt eine neue PrimaryFXApp für den Bitchanger
        +
        +
      • +
      +
      + +
      + +
      +
    • +
    +
    +
    +
      +
    • + +
      + +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          PrimaryFXApp

          +
          public PrimaryFXApp()
          +
          Erzeugt eine neue PrimaryFXApp für den Bitchanger
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          launchFXApplication

          +
          public static void launchFXApplication​(String[] args)
          +
          Startet die Anwendung und öffnet das Applikationsfenster.
          +
          +
          Parameters:
          +
          args - Argumente, die beim Programmstart übergeben werden. Die Argumente werden an die Methode launch weitergegeben und ansonsten ignoriert.
          +
          See Also:
          +
          Application.launch(String...)
          +
          +
        • +
        + + + +
          +
        • +

          getPrimaryStage

          +
          public javafx.stage.Stage getPrimaryStage()
          +
          Returns the main application window
          +
          +
          Specified by:
          +
          getPrimaryStage in interface ControllableApplication
          +
          Returns:
          +
          main application window
          +
          +
        • +
        + + + +
          +
        • +

          getViewable

          +
          public Viewable getViewable​(String key)
          +
          Gibt die mit dem String key verknüpfte View zurück
          +
          +
          Specified by:
          +
          getViewable in interface ControllableApplication
          +
          Parameters:
          +
          key - Schlüsselwort für die View
          +
          Returns:
          +
          View, die dem Schlüssel zugeordnet ist oder null, wenn keine passende View gefunden wird
          +
          +
        • +
        + + + +
          +
        • +

          getCurrentViewProperty

          +
          public javafx.beans.property.ObjectProperty<Viewable> getCurrentViewProperty()
          +
          Gibt die CurrentViewProperty zurück
          +
          +
          Specified by:
          +
          getCurrentViewProperty in interface ControllableApplication
          +
          Returns:
          +
          CurrentViewProperty
          +
          +
        • +
        + + + +
          +
        • +

          start

          +
          public void start​(javafx.stage.Stage primaryStage)
          +           throws Exception
          +
          Diese Methode erstellt den Inhalt für das PrimaryFXApp und öffnet dieses. +

          + - Es wird eine Menübar erstellt, die in jeder Szene die Steuerung des Fensters erlaubt. +

          +

          + - Die verschiedenen Views für die unterschiedlichen Oberflächen werden erzeugt. +

          +

          + - Die zuletzt geöffnete Szene wird geladen. +

          +

          + - Das in den Einstellungen ausgewählte Stylesheet wird geladen. +

          +

          + - Das Fenster wird formatiert und geöffnet. +

          + + Diese Methode wird erst beendet, wenn das PrimaryFXApp geschlossen wurde
          +
          +
          Specified by:
          +
          start in class javafx.application.Application
          +
          Throws:
          +
          Exception
          +
          See Also:
          +
          ConverterView
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/main/class-use/BitchangerLauncher.html b/doc/0.1.4/de_public/bitchanger/main/class-use/BitchangerLauncher.html new file mode 100644 index 0000000..fc46e9d --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/main/class-use/BitchangerLauncher.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.main.BitchangerLauncher + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.main.BitchangerLauncher

    +
    +
    No usage of bitchanger.main.BitchangerLauncher
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/main/class-use/PrimaryFXApp.html b/doc/0.1.4/de_public/bitchanger/main/class-use/PrimaryFXApp.html new file mode 100644 index 0000000..aff63dd --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/main/class-use/PrimaryFXApp.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.main.PrimaryFXApp + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.main.PrimaryFXApp

    +
    +
    No usage of bitchanger.main.PrimaryFXApp
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/main/package-summary.html b/doc/0.1.4/de_public/bitchanger/main/package-summary.html new file mode 100644 index 0000000..628c715 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/main/package-summary.html @@ -0,0 +1,180 @@ + + + + + +bitchanger.main + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package bitchanger.main

    +
    +
    +
    + + +
    Beinhaltet den Launcher mit der Main-Methode und die JavaFX Applikation zum starten der grafischen Oberfläche.
    +
    +
      +
    • + + + + + + + + + + + + + + + + +
      Class Summary 
      ClassDescription
      BitchangerLauncher +
      Diese Klasse enthält die Main-Methode, die der Einstiegspunkt für die Applikation ist.
      +
      PrimaryFXApp +
      Hauptfenster der Applikation mit javaFX
      +
      +
    • +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/bitchanger/main/package-tree.html b/doc/0.1.4/de_public/bitchanger/main/package-tree.html new file mode 100644 index 0000000..2c71492 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/main/package-tree.html @@ -0,0 +1,169 @@ + + + + + +bitchanger.main Class Hierarchy + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package bitchanger.main

    +Package Hierarchies: + +
    +
    +
    +

    Class Hierarchy

    + +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/bitchanger/main/package-use.html b/doc/0.1.4/de_public/bitchanger/main/package-use.html new file mode 100644 index 0000000..0e94336 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/main/package-use.html @@ -0,0 +1,149 @@ + + + + + +Uses of Package bitchanger.main + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    bitchanger.main

    +
    +
    No usage of bitchanger.main
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/package-summary.html b/doc/0.1.4/de_public/bitchanger/package-summary.html new file mode 100644 index 0000000..18d9b40 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/package-summary.html @@ -0,0 +1,165 @@ + + + + + +bitchanger + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package bitchanger

    +
    +
    +
    + + +
    Bitchanger ist ein Programm zum umwandeln von diversen Zahlensystemen. Das Hauptmerkmal liegt bei der Umwandlung + von verschiedenen Zahlensystemen mit Nachkommastellen. Zusätzlich ist es möglich in unterschiedlichen Zahlensystemen + die Grundrechenarten und Bitoperationen durchzuführen. Auch die Umwandlung von Dezimalsystem zu IEEE-Norm (32-Bit oder + 16-Bit) ist möglich. +

    + Alle angebotenen Operationen werden über die graphische Benutzeroberfläche ausgeführt, die mit javaFX implementiert ist. +

    +

    + Das Programm wird mit dem Buildtool Maven in eine JAR-Datei inklusive aller Abhängigkeiten gepackt und im Anschluss über + das jpackage Kommandozeilentool mit der Java-Runtime als Installer für Windows, macOS und Linux zur Auslieferung bereitgestellt. +

    +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/bitchanger/package-tree.html b/doc/0.1.4/de_public/bitchanger/package-tree.html new file mode 100644 index 0000000..03dc2f3 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/package-tree.html @@ -0,0 +1,152 @@ + + + + + +bitchanger Class Hierarchy + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package bitchanger

    +Package Hierarchies: + +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/bitchanger/package-use.html b/doc/0.1.4/de_public/bitchanger/package-use.html new file mode 100644 index 0000000..f103684 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/package-use.html @@ -0,0 +1,149 @@ + + + + + +Uses of Package bitchanger + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    bitchanger

    +
    +
    No usage of bitchanger
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/preferences/Comma.html b/doc/0.1.4/de_public/bitchanger/preferences/Comma.html new file mode 100644 index 0000000..8929257 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/preferences/Comma.html @@ -0,0 +1,422 @@ + + + + + +Comma + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Enum Comma

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Enum Constant Detail

        + + + +
          +
        • +

          COMMA_DE

          +
          public static final Comma COMMA_DE
          +
          Konstante, die das deutsche Komma (',') repräsentiert
          +
        • +
        + + + +
          +
        • +

          COMMA_EN

          +
          public static final Comma COMMA_EN
          +
          Konstante, die das englische Komma ('.') repräsentiert
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          values

          +
          public static Comma[] values()
          +
          Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
          +for (Comma c : Comma.values())
          +    System.out.println(c);
          +
          +
          +
          Returns:
          +
          an array containing the constants of this enum type, in the order they are declared
          +
          +
        • +
        + + + +
          +
        • +

          valueOf

          +
          public static Comma valueOf​(String name)
          +
          Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
          +
          +
          Parameters:
          +
          name - the name of the enum constant to be returned.
          +
          Returns:
          +
          the enum constant with the specified name
          +
          Throws:
          +
          IllegalArgumentException - if this enum type has no constant with the specified name
          +
          NullPointerException - if the argument is null
          +
          +
        • +
        + + + +
          +
        • +

          get

          +
          public char get()
          +
          Gibt das repräsentierte Kommazeichen zurück
          +
          +
          Returns:
          +
          das repräsentierte Kommazeichen
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/preferences/Preferences.html b/doc/0.1.4/de_public/bitchanger/preferences/Preferences.html new file mode 100644 index 0000000..e582fb5 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/preferences/Preferences.html @@ -0,0 +1,557 @@ + + + + + +Preferences + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class Preferences

    +
    +
    + +
    +
      +
    • +
      +
      public class Preferences
      +extends Object
      +
      Preferences ist die globale Sammlung für alle möglichen Einstellungen, die am Bitchanger vorgenommen + werden können. Die Einstellungen können über die Methode getPrefs() aus allen anderen Klassen + abgefragt und geändert werden. + +

      + Zudem gibt es Methoden, mit denen alle Einstellungen dauerhaft abgespeichert und wieder geladen werden können. +

      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          commaProperty

          +
          public final javafx.beans.property.ObjectProperty<Comma> commaProperty
          +
          Property für das Kommazeichen
          +
        • +
        + + + +
          +
        • +

          indicateFractionalPrecisionProperty

          +
          public final javafx.beans.property.BooleanProperty indicateFractionalPrecisionProperty
          +
          Property für die Anzeige von abgebrochenen Nachkommastellen
          +
        • +
        + + + +
          +
        • +

          readOnlyStylesheetProperty

          +
          public final javafx.beans.property.ReadOnlyStringProperty readOnlyStylesheetProperty
          +
          ReadOnlyProperty für das gewählte Stylesheet
          +
        • +
        + + + +
          +
        • +

          readOnlyStyleProperty

          +
          public final javafx.beans.property.ReadOnlyObjectProperty<Style> readOnlyStyleProperty
          +
          ReadOnlyProperty für das gewählte Stylesheet
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getPrefs

          +
          public static Preferences getPrefs()
          +
          Gibt die aktuellen Einstellungen zurück
          +
          +
          Returns:
          +
          aktuelle Einstellungen
          +
          Since:
          +
          Bitchanger 0.1.4
          +
          +
        • +
        + + + + + + + + + + + + + + + +
          +
        • +

          getComma

          +
          public char getComma()
          +
          Gibt das eingestellte Kommazeichen zurück
          +
          +
          Returns:
          +
          eingestelltes Kommazeichen
          +
          Since:
          +
          Bitchanger 0.1.4
          +
          +
        • +
        + + + +
          +
        • +

          indicateFractionalPrecision

          +
          public boolean indicateFractionalPrecision()
          +
          Gibt den Wert der indicateFractionalPrecisionProperty zurück
          +
          +
          Returns:
          +
          true, wenn die Anzeige von abgebrochenen Nachkommastellen angeschaltet ist, sonst false
          +
          Since:
          +
          Bitchanger 0.1.4
          +
          +
        • +
        + + + +
          +
        • +

          setIndicateFractionalPrecision

          +
          public void setIndicateFractionalPrecision​(boolean b)
          +
          Schaltet die Anzeige von abgebrochenen Nachkommastellen ein und aus
          +
          +
          Parameters:
          +
          b - true zum Einschalten oder false zum Ausschalten
          +
          Since:
          +
          Bitchanger 0.1.4
          +
          +
        • +
        + + + +
          +
        • +

          setStylesheet

          +
          public boolean setStylesheet​(String path)
          +
          Searches for the resource with the given path and saves the location of the resource in the stylesheetProperty.
          +
          +
          Parameters:
          +
          path - Path to the Stylesheet
          +
          Returns:
          +
          true if the resource was found and saved in the property, false otherwise
          +
          Since:
          +
          Bitchanger 0.1.4
          +
          +
        • +
        + + + +
          +
        • +

          setStylesheet

          +
          public boolean setStylesheet​(Style style)
          +
          Saves the location of the Stylesheet with the given Style in the stylesheetProperty.
          +
          +
          Parameters:
          +
          style - Style of the Stylesheet to be set
          +
          Returns:
          +
          true if Style is not UNKNOWN if the Stylesheet was set, otherwise false
          +
          Since:
          +
          Bitchanger 0.1.4
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/preferences/Style.html b/doc/0.1.4/de_public/bitchanger/preferences/Style.html new file mode 100644 index 0000000..f2f64bf --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/preferences/Style.html @@ -0,0 +1,410 @@ + + + + + +Style + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Enum Style

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Serializable, Comparable<Style>
      +
      +
      +
      public enum Style
      +extends Enum<Style>
      +
      Aufzählung für verschiedene Stile, die als CSS Datei für javaFX verfügbar sind
      +
      +
      Since:
      +
      Bitchanger 0.1.4
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Enum Constant Detail

        + + + +
          +
        • +

          LIGHT

          +
          public static final Style LIGHT
          +
          Konstante für ein helles Layout
          +
        • +
        + + + +
          +
        • +

          DARK

          +
          public static final Style DARK
          +
          Konstante für ein dunkles Layout
          +
        • +
        + + + +
          +
        • +

          UNKNOWN

          +
          public static final Style UNKNOWN
          +
          Konstante für ein unbekanntes Layout
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          values

          +
          public static Style[] values()
          +
          Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
          +for (Style c : Style.values())
          +    System.out.println(c);
          +
          +
          +
          Returns:
          +
          an array containing the constants of this enum type, in the order they are declared
          +
          +
        • +
        + + + +
          +
        • +

          valueOf

          +
          public static Style valueOf​(String name)
          +
          Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
          +
          +
          Parameters:
          +
          name - the name of the enum constant to be returned.
          +
          Returns:
          +
          the enum constant with the specified name
          +
          Throws:
          +
          IllegalArgumentException - if this enum type has no constant with the specified name
          +
          NullPointerException - if the argument is null
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/preferences/class-use/Comma.html b/doc/0.1.4/de_public/bitchanger/preferences/class-use/Comma.html new file mode 100644 index 0000000..076151b --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/preferences/class-use/Comma.html @@ -0,0 +1,222 @@ + + + + + +Uses of Class bitchanger.preferences.Comma + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.preferences.Comma

    +
    +
    +
      +
    • + + + + + + + + + + + + +
      Packages that use Comma 
      PackageDescription
      bitchanger.preferences +
      Mit den Klassen aus diesem Package können alle Komponenten auf globale Einstellungen zugreifen und diese verändern.
      +
      +
    • +
    • + +
    • +
    +
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/preferences/class-use/Preferences.html b/doc/0.1.4/de_public/bitchanger/preferences/class-use/Preferences.html new file mode 100644 index 0000000..6617546 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/preferences/class-use/Preferences.html @@ -0,0 +1,197 @@ + + + + + +Uses of Class bitchanger.preferences.Preferences + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.preferences.Preferences

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/preferences/class-use/Style.html b/doc/0.1.4/de_public/bitchanger/preferences/class-use/Style.html new file mode 100644 index 0000000..b8e2bb1 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/preferences/class-use/Style.html @@ -0,0 +1,239 @@ + + + + + +Uses of Class bitchanger.preferences.Style + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.preferences.Style

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/preferences/package-summary.html b/doc/0.1.4/de_public/bitchanger/preferences/package-summary.html new file mode 100644 index 0000000..687b996 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/preferences/package-summary.html @@ -0,0 +1,200 @@ + + + + + +bitchanger.preferences + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package bitchanger.preferences

    +
    +
    +
    + + +
    Mit den Klassen aus diesem Package können alle Komponenten auf globale Einstellungen zugreifen und diese verändern. + Die Einstellungen betreffen die Optik und auch das Verhalten des Programms und können dauerhaft gespeichert werden, + um das Programm an eigene Bedürfnisse anzupassen. Zudem sind die Standardeinstellungen wiederherstellbar.
    +
    +
      +
    • + + + + + + + + + + + + +
      Class Summary 
      ClassDescription
      Preferences +
      Preferences ist die globale Sammlung für alle möglichen Einstellungen, die am Bitchanger vorgenommen + werden können.
      +
      +
    • +
    • + + + + + + + + + + + + + + + + +
      Enum Summary 
      EnumDescription
      Comma +
      Aufzählung der Wrapper-Klasse Comma, die das Zeichen für ein Komma repräsentiert.
      +
      Style +
      Aufzählung für verschiedene Stile, die als CSS Datei für javaFX verfügbar sind
      +
      +
    • +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/bitchanger/preferences/package-tree.html b/doc/0.1.4/de_public/bitchanger/preferences/package-tree.html new file mode 100644 index 0000000..ba0de8e --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/preferences/package-tree.html @@ -0,0 +1,179 @@ + + + + + +bitchanger.preferences Class Hierarchy + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package bitchanger.preferences

    +Package Hierarchies: + +
    +
    +
    +

    Class Hierarchy

    + +
    +
    +

    Enum Hierarchy

    + +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/bitchanger/preferences/package-use.html b/doc/0.1.4/de_public/bitchanger/preferences/package-use.html new file mode 100644 index 0000000..350d1a1 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/preferences/package-use.html @@ -0,0 +1,201 @@ + + + + + +Uses of Package bitchanger.preferences + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    bitchanger.preferences

    +
    +
    +
      +
    • + + + + + + + + + + + + +
      Packages that use bitchanger.preferences 
      PackageDescription
      bitchanger.preferences +
      Mit den Klassen aus diesem Package können alle Komponenten auf globale Einstellungen zugreifen und diese verändern.
      +
      +
    • +
    • + + + + + + + + + + + + + + + + + + + + + + +
      Classes in bitchanger.preferences used by bitchanger.preferences 
      ClassDescription
      Comma +
      Aufzählung der Wrapper-Klasse Comma, die das Zeichen für ein Komma repräsentiert.
      +
      Preferences +
      Preferences ist die globale Sammlung für alle möglichen Einstellungen, die am Bitchanger vorgenommen + werden können.
      +
      Style +
      Aufzählung für verschiedene Stile, die als CSS Datei für javaFX verfügbar sind
      +
      +
    • +
    +
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/util/ArrayUtils.html b/doc/0.1.4/de_public/bitchanger/util/ArrayUtils.html new file mode 100644 index 0000000..941ccf0 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/util/ArrayUtils.html @@ -0,0 +1,290 @@ + + + + + +ArrayUtils + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class ArrayUtils

    +
    +
    + +
    +
      +
    • +
      +
      public class ArrayUtils
      +extends Object
      +
      Klasse, die Werkzeug-Methoden für Arrays enthält.
      +
      +
      Since:
      +
      Bitchanger 0.1.4
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + + + +
          +
        • +

          arrayOf

          +
          @SafeVarargs
          +public static <T> T[] arrayOf​(T... values)
          +
          Wandelt eine Aufzählung von Objekten in ein Array um und gibt dieses zurück.
          +
          +
          Type Parameters:
          +
          T - Typ der Objekte und des zurückgegebenen Arrays
          +
          Parameters:
          +
          values - Objekte, aus denen das Array gebildet wird
          +
          Returns:
          +
          Array aus den übergebenen Objekten
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +
    + + diff --git a/doc/0.1.4/de_public/bitchanger/util/FXUtils.html b/doc/0.1.4/de_public/bitchanger/util/FXUtils.html new file mode 100644 index 0000000..f97445e --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/util/FXUtils.html @@ -0,0 +1,502 @@ + + + + + +FXUtils + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class FXUtils

    +
    +
    + +
    +
      +
    • +
      +
      public class FXUtils
      +extends Object
      +
      Utility-Klasse zur allgemeinen Verarbeitung von Objekten, die zur Oberfläche gehören.
      +
      +
      Since:
      +
      Bitchanger 0.1.4
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Static Methods Concrete Methods 
        Modifier and TypeMethodDescription
        static javafx.scene.shape.SVGPathloadSVG​(File svgFile) +
        Lädt ein Icon im svg-Format aus der übergebenen Datei und erstellt aus der Datei ein SVGPath Objekt, + das dem Scenegraph in javaFX hinzugefügt werden kann.
        +
        static <T extends javafx.scene.Node>
        void
        setGridConstraints​(int firstColumn, + int firstRow, + int columnCount, + int columnOffset, + Queue<T> controls) +
        Setzt die Constrains der Nodes in einer Schlange, um diese in einer GridPane zu positionieren.
        +
        static <T extends javafx.scene.Node>
        void
        setGridConstraints​(int firstColumn, + int firstRow, + int columnCount, + int columnOffset, + Queue<T> controls, + TriConsumer<javafx.scene.Node,​Integer,​Integer> consumer) +
        Arbeitet Nodes in einer Schlange als Tabelle ab.
        +
        static voidsetIconOrText​(javafx.scene.control.Labeled labeled, + SVGIcon icon) 
        static voidsetIconOrText​(javafx.scene.control.Labeled labeled, + SVGIcon icon, + String alternativeText) 
        static voidsetIconOrText​(javafx.scene.control.MenuItem menuItem, + SVGIcon icon) 
        static voidsetIconOrText​(javafx.scene.control.MenuItem menuItem, + SVGIcon icon, + String alternativeText) 
        static voidsetMaxSizes​(Iterable<? extends javafx.scene.Node> nodes, + double maxSize) +
        Setzt die maximale Größe aller Controls in einem Iterable auf den Wert maxSize.
        +
        static voidsetMaxSizes​(Iterable<? extends javafx.scene.Node> nodes, + double maxWidth, + double maxHeight) +
        Setzt die maximale Breite aller Controls in einem Iterable auf den Wert maxWidth und + die maximale Höhe auf den Wert maxHeight.
        +
        + +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          setGridConstraints

          +
          public static <T extends javafx.scene.Node> void setGridConstraints​(int firstColumn,
          +                                                                    int firstRow,
          +                                                                    int columnCount,
          +                                                                    int columnOffset,
          +                                                                    Queue<T> controls)
          +
          Setzt die Constrains der Nodes in einer Schlange, um diese in einer GridPane zu positionieren. +

          + Die erste Node wird an die Position gesetzt, die über die Parameter und firstColumn, + firstRow und columnOffset definiert ist. Die Matrix wird auf die Anzahl von + Spalten verteilt, die mit columnCount festgelegt ist und die Zeile automatisch umgebrochen. + Die Constraints werden solange gesetzt, wie es Elemente in der Queue gibt. +

          +

          + Die Nodes dürfen auch mehr als eine Spalte in der GridPane einnehmen. Die Spalte der darauffolgenden + Node wird entsprechend inkrementiert, um keine Elemente zu überlagern. +

          +
          +
          Type Parameters:
          +
          T - Der Typ, den die Elemente in der Schlange zur Laufzeit haben
          +
          Parameters:
          +
          firstColumn - Erste Spalte der resultierenden Tabelle
          +
          firstRow - Erste Zeile der resultierenden Tabelle
          +
          columnCount - Anzahl der Spalten in der Tabelle
          +
          columnOffset - Verschiebung der ersten Spalte (wird nur in der ersten Zeile angewendet)
          +
          controls - Elemente in der Tabelle, mit der Reihenfolge von oben links nach unten rechts (Spalten werden vor den Zeilen inkrementiert)
          +
          See Also:
          +
          setGridConstraints(int, int, int, int, Queue, TriConsumer)
          +
          +
        • +
        + + + +
          +
        • +

          setGridConstraints

          +
          public static <T extends javafx.scene.Node> void setGridConstraints​(int firstColumn,
          +                                                                    int firstRow,
          +                                                                    int columnCount,
          +                                                                    int columnOffset,
          +                                                                    Queue<T> controls,
          +                                                                    TriConsumer<javafx.scene.Node,​Integer,​Integer> consumer)
          +
          Arbeitet Nodes in einer Schlange als Tabelle ab. +

          + Für jede Node in der Schlange wir die Spalte inkrementiert. Wird die maximale Spaltenanzahl überschritten, + wird die Zeile inkrementiert und die Spalte auf den Startwert gesetzt. Die Node wird mit den Werten der Zeile + und Spalte an den TriConsumer übergeben, um diese Daten zu verarbeiten. +

          +

          + Die Nodes dürfen auch mehr als eine Spalte in der GridPane einnehmen. Die Spalte der darauffolgenden + Node wird entsprechend inkrementiert, um keine Elemente zu überlagern. +

          +
          +
          Type Parameters:
          +
          T - Der Typ, den die Elemente in der Schlange zur Laufzeit haben
          +
          Parameters:
          +
          firstColumn - Erste Spalte der resultierenden Tabelle
          +
          firstRow - Erste Zeile der resultierenden Tabelle
          +
          columnCount - Anzahl der Spalten in der Tabelle
          +
          columnOffset - Verschiebung der ersten Spalte (wird nur in der ersten Zeile angewendet)
          +
          controls - Elemente in der Tabelle, mit der Reihenfolge von oben links nach unten rechts (Spalten werden vor den Zeilen inkrementiert)
          +
          consumer - TriConsumer, der die Daten verarbeitet
          +
          +
        • +
        + + + +
          +
        • +

          setMaxSizes

          +
          public static void setMaxSizes​(Iterable<? extends javafx.scene.Node> nodes,
          +                               double maxSize)
          +
          Setzt die maximale Größe aller Controls in einem Iterable auf den Wert maxSize.
          +
          +
          Parameters:
          +
          nodes - Sammlung aller anzupassenden Controls, die auch in Layout-Containern liegen dürfen
          +
          maxSize - Maximale Größe der Controls
          +
          +
        • +
        + + + +
          +
        • +

          setMaxSizes

          +
          public static void setMaxSizes​(Iterable<? extends javafx.scene.Node> nodes,
          +                               double maxWidth,
          +                               double maxHeight)
          +
          Setzt die maximale Breite aller Controls in einem Iterable auf den Wert maxWidth und + die maximale Höhe auf den Wert maxHeight.
          +
          +
          Parameters:
          +
          nodes - Sammlung aller anzupassenden Controls, die auch in Layout-Containern liegen dürfen
          +
          maxWidth - maximale Breite aller Controls
          +
          maxHeight - maximale Höhe aller Controls
          +
          +
        • +
        + + + +
          +
        • +

          loadSVG

          +
          public static javafx.scene.shape.SVGPath loadSVG​(File svgFile)
          +
          Lädt ein Icon im svg-Format aus der übergebenen Datei und erstellt aus der Datei ein SVGPath Objekt, + das dem Scenegraph in javaFX hinzugefügt werden kann.
          +
          +
          Parameters:
          +
          svgFile - Icon als svg-Datei
          +
          Returns:
          +
          Eingelesenes Icon als SVGPath oder null, wenn die Datei nicht eingelesen werden konnte
          +
          +
        • +
        + + + +
          +
        • +

          setIconOrText

          +
          public static void setIconOrText​(javafx.scene.control.MenuItem menuItem,
          +                                 SVGIcon icon,
          +                                 String alternativeText)
          +
        • +
        + + + +
          +
        • +

          setIconOrText

          +
          public static void setIconOrText​(javafx.scene.control.MenuItem menuItem,
          +                                 SVGIcon icon)
          +
        • +
        + + + +
          +
        • +

          setIconOrText

          +
          public static void setIconOrText​(javafx.scene.control.Labeled labeled,
          +                                 SVGIcon icon,
          +                                 String alternativeText)
          +
        • +
        + + + +
          +
        • +

          setIconOrText

          +
          public static void setIconOrText​(javafx.scene.control.Labeled labeled,
          +                                 SVGIcon icon)
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +
    + + diff --git a/doc/0.1.4/de_public/bitchanger/util/IconFactory.html b/doc/0.1.4/de_public/bitchanger/util/IconFactory.html new file mode 100644 index 0000000..13a83ff --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/util/IconFactory.html @@ -0,0 +1,304 @@ + + + + + +IconFactory + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class IconFactory

    +
    +
    + +
    +
      +
    • +
      +
      public class IconFactory
      +extends Object
      +
      Factory Klasse für das Erstellen von SVGIcons
      +
      +
      Since:
      +
      Bitchanger 0.1.4
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          styleBindIcon

          +
          public static SVGIcon styleBindIcon​(File lightIconFile,
          +                                    File darkIconFile)
          +
          Erzeugt ein neues SVGIcon, das je nach eingestelltem Style in Preferences.readOnlyStyleProperty der svg-Datei + lightIconFile oder darkIconFile entspricht und sich automatisch bei Änderung des Styles anpasst.
          +
          +
          Parameters:
          +
          lightIconFile - svg-Datei für den Style Style.LIGHT
          +
          darkIconFile - svg-Datei für den Style Style.DARK
          +
          Returns:
          +
          neues SVGIcon, generiert aus den Files lightIconFile und darkIconFile oder null, wenn die Dateien nicht gelesen werden konnten
          +
          +
        • +
        + + + +
          +
        • +

          ofSVGFile

          +
          public static SVGIcon ofSVGFile​(File file)
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +
    + + diff --git a/doc/0.1.4/de_public/bitchanger/util/Resources.html b/doc/0.1.4/de_public/bitchanger/util/Resources.html new file mode 100644 index 0000000..b90976c --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/util/Resources.html @@ -0,0 +1,2295 @@ + + + + + +Resources + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class Resources

    +
    +
    + +
    +
      +
    • +
      +
      public class Resources
      +extends Object
      +
      Enthält alle benötigten Ressourcen, wie Pfade zu den CSS Dateien oder den Icons
      +
      +
      Since:
      +
      Bitchanger 0.1.4
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeFieldDescription
        static FileABC_BRICKS_FILLED_ICON +
        Speicherort des Icons mit ABC-Würfeln, gefüllt oder null, wenn das Icon nicht gefunden wurde
        +
        static FileABC_BRICKS_ICON +
        Speicherort des Icons mit ABC-Würfeln oder null, wenn das Icon nicht gefunden wurde
        +
        static FileANGEL_DOWN_CIRCLE_THIN_ICON +
        Speicherort des Icons eines nach unten zeigenden Pfeils in einem Kreis im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
        +
        static FileANGEL_DOWN_THIN_ICON +
        Speicherort des Icons eines nach unten zeigenden Pfeils im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
        +
        static FileANGEL_LEFT_CIRCLE_THIN_ICON +
        Speicherort des Icons eines nach links zeigenden Pfeils in einem Kreis im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
        +
        static FileANGEL_LEFT_THIN_ICON +
        Speicherort des Icons eines nach links zeigenden Pfeils im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
        +
        static FileANGEL_RIGHT_CIRCLE_THIN_ICON +
        Speicherort des Icons eines nach rechts zeigenden Pfeils in einem Kreis im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
        +
        static FileANGEL_RIGHT_THIN_ICON +
        Speicherort des Icons eines nach rechts zeigenden Pfeils im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
        +
        static FileANGEL_UP_CIRCLE_THIN_ICON +
        Speicherort des Icons eines nach oben zeigenden Pfeils in einem Kreis im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
        +
        static FileANGEL_UP_THIN_ICON +
        Speicherort des Icons eines nach oben zeigenden Pfeils im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
        +
        static FileARROW_DOWN_CIRCLE_FILLED_ICON +
        Speicherort des Icons eines nach unten zeigenden Pfeils in einem gefüllten Kreis oder null, wenn das Icon nicht gefunden wurde
        +
        static FileARROW_DOWN_ICON +
        Speicherort des Icons eines nach unten zeigenden Pfeils oder null, wenn das Icon nicht gefunden wurde
        +
        static FileARROW_LEFT_CIRCLE_FILLED_ICON +
        Speicherort des Icons eines nach links zeigenden Pfeils in einem gefüllten Kreis oder null, wenn das Icon nicht gefunden wurde
        +
        static FileARROW_LEFT_ICON +
        Speicherort des Icons eines nach links zeigenden Pfeils oder null, wenn das Icon nicht gefunden wurde
        +
        static FileARROW_RIGHT_CIRCLE_FILLED_ICON +
        Speicherort des Icons eines nach rechts zeigenden Pfeils in einem gefüllten Kreis oder null, wenn das Icon nicht gefunden wurde
        +
        static FileARROW_RIGHT_ICON +
        Speicherort des Icons eines nach rechts zeigenden Pfeils oder null, wenn das Icon nicht gefunden wurde
        +
        static FileARROW_UP_CIRCLE_FILLED_ICON +
        Speicherort des Icons eines nach oben zeigenden Pfeils in einem gefüllten Kreis oder null, wenn das Icon nicht gefunden wurde
        +
        static FileARROW_UP_ICON +
        Speicherort des Icons eines nach oben zeigenden Pfeils oder null, wenn das Icon nicht gefunden wurde
        +
        static FileCALCULATOR_FILLED_ICON +
        Speicherort des Icons eines Taschenrechners, gefüllt oder null, wenn das Icon nicht gefunden wurde
        +
        static FileCALCULATOR_ICON +
        Speicherort des Icons eines Taschenrechners oder null, wenn das Icon nicht gefunden wurde
        +
        static FileCALCULATOR_SYMBOLS_FILLED_ICON +
        Speicherort des Icons mit Rechensymbolen, gefüllt oder null, wenn das Icon nicht gefunden wurde
        +
        static FileCALCULATOR_SYMBOLS_ICON +
        Speicherort des Icons mit Rechensymbolen oder null, wenn das Icon nicht gefunden wurde
        +
        static FileCOPYRIGHT_FILLED_ICON +
        Speicherort des Icons mit dem Copyright-Symbol, gefüllt oder null, wenn das Icon nicht gefunden wurde
        +
        static FileCOPYRIGHT_ICON +
        Speicherort des Icons mit dem Copyright-Symbol oder null, wenn das Icon nicht gefunden wurde
        +
        static FileCUSTOM_PREFERENCES +
        Speicherort der Benutzereinstellungen beim letzten Schließen des Programms oder null, wenn die Datei nicht gefunden wurde
        +
        static StringDARK_CSS +
        Pfad zum Stylesheet für die dunkle Darstellung oder null, wenn das CSS nicht gefunden wurde
        +
        static FileDEFAULT_PREFERENCES +
        Speicherort der Standardeinstellungen des Programms oder null, wenn die Datei nicht gefunden wurde
        +
        static FileENTER_FULLSCREEN_ICON +
        Speicherort des Icons zum Aktivieren des Vollbilds oder null, wenn das Icon nicht gefunden wurde
        +
        static FileERASER_FILLED_ICON +
        Speicherort des Icons eines gefüllten Radiergummis oder null, wenn das Icon nicht gefunden wurde
        +
        static FileERASER_ICON +
        Speicherort des Icons eines Radiergummis oder null, wenn das Icon nicht gefunden wurde
        +
        static FileEXIT_FULLSCREEN_ICON +
        Speicherort des Icons zum Deaktivieren des Vollbilds oder null, wenn das Icon nicht gefunden wurde
        +
        static FileFULLSCREEN_THIN_ICON +
        Speicherort des Icons zum Wechseln des Vollbilds in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
        +
        static LinkedList<File>ICON_LIST +
        Liste, die Speicherorte aller in dieser Klasse definierten Icons enthält
        +
        static FileIDEA_FILLED_ICON +
        Speicherort des gefüllten Idee Icons ("Glühbirne") oder null, wenn das Icon nicht gefunden wurde
        +
        static FileIDEA_ICON +
        Speicherort des Idee Icons ("Glühbirne") oder null, wenn das Icon nicht gefunden wurde
        +
        static FileIDEA_SPEECH_BUBBLE_FILLED_ICON +
        Speicherort des Idee Icons in einer gefüllten Sprechblase oder null, wenn das Icon nicht gefunden wurde
        +
        static FileIDEA_SPEECH_BUBBLE_ICON +
        Speicherort des Idee Icons in einer Sprechblase oder null, wenn das Icon nicht gefunden wurde
        +
        static FileINFO_CIRCLE_FILLED_ICON +
        Speicherort des gefüllten Info Icons oder null, wenn das Icon nicht gefunden wurde
        +
        static FileINFO_CIRCLE_ICON +
        Speicherort des Info Icons oder null, wenn das Icon nicht gefunden wurde
        +
        static FileINFO_CIRCLE_SIMPLE_FILLED_ICON +
        Speicherort des einfachen gefüllten Info Icons mit schlichtem 'i' oder null, wenn das Icon nicht gefunden wurde
        +
        static FileINFO_CIRCLE_SIMPLE_ICON +
        Speicherort des Info Icons mit schlichtem 'i' oder null, wenn das Icon nicht gefunden wurde
        +
        static FileINFO_CIRCLE_THIN_ICON +
        Speicherort des Info Icons mit schlichtem 'i' in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
        +
        static FileINFO_SPEECH_BOX_FILLED_ICON +
        Speicherort des Info Icons in einer gefüllten "Sprechbox" oder null, wenn das Icon nicht gefunden wurde
        +
        static FileINFO_SPEECH_BOX_ICON +
        Speicherort des Info Icons in einer "Sprechbox" oder null, wenn das Icon nicht gefunden wurde
        +
        static FileKEYBORD_CLOSE_FILLED_ICON +
        Speicherort des gefüllten Icons mit schließender Tastatur oder null, wenn das Icon nicht gefunden wurde
        +
        static FileKEYBORD_CLOSE_ICON +
        Speicherort des Icons mit schließender Tastatur oder null, wenn das Icon nicht gefunden wurde
        +
        static FileKEYBORD_COMPACT_FILLED_ICON +
        Speicherort des gefüllten Icons mit kompakter Tastatur oder null, wenn das Icon nicht gefunden wurde
        +
        static FileKEYBORD_COMPACT_ICON +
        Speicherort des Icons mit kompakter Tastatur oder null, wenn das Icon nicht gefunden wurde
        +
        static FileKEYBORD_FILLED_ICON +
        Speicherort des gefüllten Tastatur Icons oder null, wenn das Icon nicht gefunden wurde
        +
        static FileKEYBORD_ICON +
        Speicherort des Tastatur Icons oder null, wenn das Icon nicht gefunden wurde
        +
        static FileKEYBORD_OPEN_FILLED_ICON +
        Speicherort des gefüllten Icons mit öffnender Tastatur oder null, wenn das Icon nicht gefunden wurde
        +
        static FileKEYBORD_OPEN_ICON +
        Speicherort des Icons mit öffnender Tastatur oder null, wenn das Icon nicht gefunden wurde
        +
        static StringLAYOUT_CSS +
        Pfad zum Stylesheet für das allgemeine Layout oder null, wenn das CSS nicht gefunden wurde
        +
        static FileLIGHT_BULB_1_ICON +
        Speicherort des Icons einer "Glühbirne" mit Draht oder null, wenn das Icon nicht gefunden wurde
        +
        static FileLIGHT_BULB_2_FILLED_ICON +
        Speicherort des Icons einer gefüllten "Glühbirne" oder null, wenn das Icon nicht gefunden wurde
        +
        static FileLIGHT_BULB_2_ICON +
        Speicherort des Icons einer "Glühbirne" oder null, wenn das Icon nicht gefunden wurde
        +
        static FileLIGHT_BULB_3_FILLED_ICON +
        Speicherort des Icons einer leuchtenden gefüllten "Glühbirne" oder null, wenn das Icon nicht gefunden wurde
        +
        static FileLIGHT_BULB_3_ICON +
        Speicherort des Icons einer leuchtenden "Glühbirne" oder null, wenn das Icon nicht gefunden wurde
        +
        static StringLIGHT_CSS +
        Pfad zum Stylesheet für die helle Darstellung oder null, wenn das CSS nicht gefunden wurde
        +
        static FileMAGIC_1_ICON +
        Speicherort des Icons eines Zauberstabs oder null, wenn das Icon nicht gefunden wurde
        +
        static FileMAGIC_2_ICON +
        Speicherort des Icons eines Zauberstabs mit Blatt oder null, wenn das Icon nicht gefunden wurde
        +
        static FileMENU_DOTS_HORIZONTAL_FILLED_ICON +
        Speicherort des Menü Icons mit drei horizontalen gefüllten Punkten oder null, wenn das Icon nicht gefunden wurde
        +
        static FileMENU_DOTS_HORIZONTAL_ICON +
        Speicherort des Menü Icons mit drei horizontalen Punkten oder null, wenn das Icon nicht gefunden wurde
        +
        static FileMENU_DOTS_VERTICAL_FILLED_ICON +
        Speicherort des Menü Icons mit drei vertikalen gefüllten Punkten oder null, wenn das Icon nicht gefunden wurde
        +
        static FileMENU_DOTS_VERTICAL_ICON +
        Speicherort des Menü Icons mit drei vertikalen Punkten oder null, wenn das Icon nicht gefunden wurde
        +
        static FileMENU_ICON +
        Speicherort des Menü Icons oder null, wenn das Icon nicht gefunden wurde
        +
        static FileMENU_THIN_ICON +
        Speicherort des Menü Icons in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
        +
        static FileMONITOR_FILLED_ICON +
        Speicherort des gefüllten Monitor Icons oder null, wenn das Icon nicht gefunden wurde
        +
        static FileMONITOR_ICON +
        Speicherort des Monitor Icons oder null, wenn das Icon nicht gefunden wurde
        +
        static FilePAINT_BRUSH_BUCKET_FILLED_ICON +
        Speicherort des gefüllten Icons eines Farbeimers mit Pinsel oder null, wenn das Icon nicht gefunden wurde
        +
        static FilePAINT_BRUSH_BUCKET_ICON +
        Speicherort des Icons eines Farbeimers mit Pinsel oder null, wenn das Icon nicht gefunden wurde
        +
        static FilePAINT_BRUSH_FILLED_ICON +
        Speicherort des gefüllten Pinsel Icons oder null, wenn das Icon nicht gefunden wurde
        +
        static FilePAINT_BRUSH_ICON +
        Speicherort des Pinsel Icons oder null, wenn das Icon nicht gefunden wurde
        +
        static FilePAINT_BRUSH_WINDOW_ICON +
        Speicherort des Icons mit einem Fenster und Pinsel oder null, wenn das Icon nicht gefunden wurde
        +
        static FilePREFERENCES_GEAR_1_ICON +
        Speicherort des Icons eines gefüllten Zahnrades oder null, wenn das Icon nicht gefunden wurde
        +
        static FilePREFERENCES_GEAR_2_ICON +
        Speicherort des Icons mit zwei gefüllten Zahnrädern oder null, wenn das Icon nicht gefunden wurde
        +
        static FilePREFERENCES_GEAR_3_ICON +
        Speicherort des Icons mit drei gefüllten Zahnrädern oder null, wenn das Icon nicht gefunden wurde
        +
        static FilePREFERENCES_GEAR_THIN_ICON +
        Speicherort des Icons eines Zahnrades im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
        +
        static FilePREFERENCES_WRENCH_ICON +
        Speicherort des Icons eines Schraubenschlüssels oder null, wenn das Icon nicht gefunden wurde
        +
        static FilePREFERENCES_WRENCH_RESET_ICON +
        Speicherort des Icons eines Schraubenschlüssels mit Rückgängig-Pfeil oder null, wenn das Icon nicht gefunden wurde
        +
        static FileQUESTION_CIRCLE_FILLED_ICON +
        Speicherort des gefüllten Frage Icons oder null, wenn das Icon nicht gefunden wurde
        +
        static FileQUESTION_CIRCLE_ICON +
        Speicherort des Frage Icons oder null, wenn das Icon nicht gefunden wurde
        +
        static FileQUESTION_SPEECH_BUBBLE_FILLED_ICON +
        Speicherort des Frage Icons in einer gefüllten Sprechblase oder null, wenn das Icon nicht gefunden wurde
        +
        static FileQUESTION_SPEECH_BUBBLE_ICON +
        Speicherort des Frage Icons in einer Sprechblase oder null, wenn das Icon nicht gefunden wurde
        +
        static FileQUESTION_THIN_ICON +
        Speicherort des Frage Icons in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
        +
        static FileSUN_FILLED_ICON +
        Speicherort des gefüllten Icons einer Sonne oder null, wenn das Icon nicht gefunden wurde
        +
        static FileSUN_ICON +
        Speicherort des Icons einer Sonne oder null, wenn das Icon nicht gefunden wurde
        +
        static FileSYNC_1_ICON +
        Speicherort des Icons mit zwei runden Pfeilen gegen den Uhrzeigersinn oder null, wenn das Icon nicht gefunden wurde
        +
        static FileSYNC_2_ICON +
        Speicherort des Icons mit drei runden Pfeilen gegen den Uhrzeigersinn oder null, wenn das Icon nicht gefunden wurde
        +
        static FileTEXTFIELD_1_ICON +
        Speicherort des Icons eines Textfeldes mit drei Punkten und einem Unterstrich oder null, wenn das Icon nicht gefunden wurde
        +
        static FileTEXTFIELD_ICON +
        Speicherort des Icons eines Textfeldes mit vier Punkten oder null, wenn das Icon nicht gefunden wurde
        +
        static FileTRASH_FILLED_ICON +
        Speicherort des Icons eines gefüllten Mülleimers oder null, wenn das Icon nicht gefunden wurde
        +
        static FileTRASH_ICON +
        Speicherort des Icons eines Mülleimers oder null, wenn das Icon nicht gefunden wurde
        +
        static FileTRASH_THIN_ICON +
        Speicherort des Icons eines Mülleimers in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
        +
        static FileTRASH_X_FILLED_ICON +
        Speicherort des Icons eines gefüllten Mülleimers mit 'X'-Symbol oder null, wenn das Icon nicht gefunden wurde
        +
        static FileTRASH_X_ICON +
        Speicherort des Icons eines Mülleimers mit 'X'-Symbol oder null, wenn das Icon nicht gefunden wurde
        +
        static FileWINDOW_ICON +
        Speicherort des Icons eines Programmfensters oder null, wenn das Icon nicht gefunden wurde
        +
        static FileWINDOW_THIN_2_ICON +
        Speicherort des Icons mit zwei Programmfenstern im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
        +
        static FileWINDOW_THIN_ICON +
        Speicherort des Icons eines Programmfensters in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
        +
        static FileX_MARK_1_ICON +
        Speicherort des Icons eines 'X'-Symbols oder null, wenn das Icon nicht gefunden wurde
        +
        static FileX_MARK_2_ICON +
        Speicherort des Icons eines 'X'-Symbols in einem gefüllten Quadrat oder null, wenn das Icon nicht gefunden wurde
        +
        static FileX_MARK_ARROW_LEFT_FILLED_ICON +
        Speicherort des Icons eines gefüllten Löschen-Symbols mit 'X' oder null, wenn das Icon nicht gefunden wurde
        +
        static FileX_MARK_ARROW_LEFT_ICON +
        Speicherort des Icons eines Löschen-Symbols mit 'X' oder null, wenn das Icon nicht gefunden wurde
        +
        static FileX_MARK_CIRCLE_1_FILLED_ICON +
        Speicherort des Icons eines 'X'-Symbols in einem gefüllten Kreis oder null, wenn das Icon nicht gefunden wurde
        +
        static FileX_MARK_CIRCLE_1_ICON +
        Speicherort des Icons eines 'X'-Symbols in einem Kreis oder null, wenn das Icon nicht gefunden wurde
        +
        static FileX_MARK_CIRCLE_2_FILLED_ICON +
        Speicherort des Icons eines 'X'-Symbols in einem gefüllten Kreis oder null, wenn das Icon nicht gefunden wurde
        +
        static FileX_MARK_CIRCLE_2_ICON +
        Speicherort des Icons eines 'X'-Symbols in einem Kreis oder null, wenn das Icon nicht gefunden wurde
        +
        static FileX_MARK_CIRCLE_THIN_ICON +
        Speicherort des Icons eines 'X'-Symbols in einem Kreis in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
        +
        static FileX_MARK_SQUARE_FILLED_ICON +
        Speicherort des Icons eines 'X'-Symbols in einem gefüllten Quadrat oder null, wenn das Icon nicht gefunden wurde
        +
        static FileX_MARK_SQUARE_ICON +
        Speicherort des Icons eines 'X'-Symbols in einem Quadrat oder null, wenn das Icon nicht gefunden wurde
        +
        static FileX_MARK_THIN_ICON +
        Speicherort des Icons eines 'X'-Symbols in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
        +
        static FileZOOM_IN_ICON +
        Speicherort des Icons einer Lupe mit '+' oder null, wenn das Icon nicht gefunden wurde
        +
        static FileZOOM_IN_THIN_ICON +
        Speicherort des Icons einer Lupe mit '+' in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
        +
        static FileZOOM_OUT_ICON +
        Speicherort des Icons einer Lupe mit '-' oder null, wenn das Icon nicht gefunden wurde
        +
        static FileZOOM_OUT_THIN_ICON +
        Speicherort des Icons einer Lupe mit '-' in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
        +
        +
      • +
      +
      + +
      + +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          LAYOUT_CSS

          +
          public static final String LAYOUT_CSS
          +
          Pfad zum Stylesheet für das allgemeine Layout oder null, wenn das CSS nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          LIGHT_CSS

          +
          public static final String LIGHT_CSS
          +
          Pfad zum Stylesheet für die helle Darstellung oder null, wenn das CSS nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          DARK_CSS

          +
          public static final String DARK_CSS
          +
          Pfad zum Stylesheet für die dunkle Darstellung oder null, wenn das CSS nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          CUSTOM_PREFERENCES

          +
          public static final File CUSTOM_PREFERENCES
          +
          Speicherort der Benutzereinstellungen beim letzten Schließen des Programms oder null, wenn die Datei nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          DEFAULT_PREFERENCES

          +
          public static final File DEFAULT_PREFERENCES
          +
          Speicherort der Standardeinstellungen des Programms oder null, wenn die Datei nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          ABC_BRICKS_FILLED_ICON

          +
          public static final File ABC_BRICKS_FILLED_ICON
          +
          Speicherort des Icons mit ABC-Würfeln, gefüllt oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          ABC_BRICKS_ICON

          +
          public static final File ABC_BRICKS_ICON
          +
          Speicherort des Icons mit ABC-Würfeln oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          ANGEL_DOWN_CIRCLE_THIN_ICON

          +
          public static final File ANGEL_DOWN_CIRCLE_THIN_ICON
          +
          Speicherort des Icons eines nach unten zeigenden Pfeils in einem Kreis im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          ANGEL_LEFT_CIRCLE_THIN_ICON

          +
          public static final File ANGEL_LEFT_CIRCLE_THIN_ICON
          +
          Speicherort des Icons eines nach links zeigenden Pfeils in einem Kreis im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          ANGEL_RIGHT_CIRCLE_THIN_ICON

          +
          public static final File ANGEL_RIGHT_CIRCLE_THIN_ICON
          +
          Speicherort des Icons eines nach rechts zeigenden Pfeils in einem Kreis im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          ANGEL_UP_CIRCLE_THIN_ICON

          +
          public static final File ANGEL_UP_CIRCLE_THIN_ICON
          +
          Speicherort des Icons eines nach oben zeigenden Pfeils in einem Kreis im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          ANGEL_DOWN_THIN_ICON

          +
          public static final File ANGEL_DOWN_THIN_ICON
          +
          Speicherort des Icons eines nach unten zeigenden Pfeils im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          ANGEL_LEFT_THIN_ICON

          +
          public static final File ANGEL_LEFT_THIN_ICON
          +
          Speicherort des Icons eines nach links zeigenden Pfeils im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          ANGEL_RIGHT_THIN_ICON

          +
          public static final File ANGEL_RIGHT_THIN_ICON
          +
          Speicherort des Icons eines nach rechts zeigenden Pfeils im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          ANGEL_UP_THIN_ICON

          +
          public static final File ANGEL_UP_THIN_ICON
          +
          Speicherort des Icons eines nach oben zeigenden Pfeils im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          ARROW_DOWN_CIRCLE_FILLED_ICON

          +
          public static final File ARROW_DOWN_CIRCLE_FILLED_ICON
          +
          Speicherort des Icons eines nach unten zeigenden Pfeils in einem gefüllten Kreis oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          ARROW_LEFT_CIRCLE_FILLED_ICON

          +
          public static final File ARROW_LEFT_CIRCLE_FILLED_ICON
          +
          Speicherort des Icons eines nach links zeigenden Pfeils in einem gefüllten Kreis oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          ARROW_RIGHT_CIRCLE_FILLED_ICON

          +
          public static final File ARROW_RIGHT_CIRCLE_FILLED_ICON
          +
          Speicherort des Icons eines nach rechts zeigenden Pfeils in einem gefüllten Kreis oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          ARROW_UP_CIRCLE_FILLED_ICON

          +
          public static final File ARROW_UP_CIRCLE_FILLED_ICON
          +
          Speicherort des Icons eines nach oben zeigenden Pfeils in einem gefüllten Kreis oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          ARROW_DOWN_ICON

          +
          public static final File ARROW_DOWN_ICON
          +
          Speicherort des Icons eines nach unten zeigenden Pfeils oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          ARROW_LEFT_ICON

          +
          public static final File ARROW_LEFT_ICON
          +
          Speicherort des Icons eines nach links zeigenden Pfeils oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          ARROW_RIGHT_ICON

          +
          public static final File ARROW_RIGHT_ICON
          +
          Speicherort des Icons eines nach rechts zeigenden Pfeils oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          ARROW_UP_ICON

          +
          public static final File ARROW_UP_ICON
          +
          Speicherort des Icons eines nach oben zeigenden Pfeils oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          CALCULATOR_SYMBOLS_FILLED_ICON

          +
          public static final File CALCULATOR_SYMBOLS_FILLED_ICON
          +
          Speicherort des Icons mit Rechensymbolen, gefüllt oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          CALCULATOR_SYMBOLS_ICON

          +
          public static final File CALCULATOR_SYMBOLS_ICON
          +
          Speicherort des Icons mit Rechensymbolen oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          CALCULATOR_FILLED_ICON

          +
          public static final File CALCULATOR_FILLED_ICON
          +
          Speicherort des Icons eines Taschenrechners, gefüllt oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          CALCULATOR_ICON

          +
          public static final File CALCULATOR_ICON
          +
          Speicherort des Icons eines Taschenrechners oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          COPYRIGHT_FILLED_ICON

          +
          public static final File COPYRIGHT_FILLED_ICON
          +
          Speicherort des Icons mit dem Copyright-Symbol, gefüllt oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          COPYRIGHT_ICON

          +
          public static final File COPYRIGHT_ICON
          +
          Speicherort des Icons mit dem Copyright-Symbol oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          ERASER_FILLED_ICON

          +
          public static final File ERASER_FILLED_ICON
          +
          Speicherort des Icons eines gefüllten Radiergummis oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          ERASER_ICON

          +
          public static final File ERASER_ICON
          +
          Speicherort des Icons eines Radiergummis oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          ENTER_FULLSCREEN_ICON

          +
          public static final File ENTER_FULLSCREEN_ICON
          +
          Speicherort des Icons zum Aktivieren des Vollbilds oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          EXIT_FULLSCREEN_ICON

          +
          public static final File EXIT_FULLSCREEN_ICON
          +
          Speicherort des Icons zum Deaktivieren des Vollbilds oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          FULLSCREEN_THIN_ICON

          +
          public static final File FULLSCREEN_THIN_ICON
          +
          Speicherort des Icons zum Wechseln des Vollbilds in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          IDEA_FILLED_ICON

          +
          public static final File IDEA_FILLED_ICON
          +
          Speicherort des gefüllten Idee Icons ("Glühbirne") oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          IDEA_ICON

          +
          public static final File IDEA_ICON
          +
          Speicherort des Idee Icons ("Glühbirne") oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          IDEA_SPEECH_BUBBLE_FILLED_ICON

          +
          public static final File IDEA_SPEECH_BUBBLE_FILLED_ICON
          +
          Speicherort des Idee Icons in einer gefüllten Sprechblase oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          IDEA_SPEECH_BUBBLE_ICON

          +
          public static final File IDEA_SPEECH_BUBBLE_ICON
          +
          Speicherort des Idee Icons in einer Sprechblase oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          INFO_CIRCLE_SIMPLE_FILLED_ICON

          +
          public static final File INFO_CIRCLE_SIMPLE_FILLED_ICON
          +
          Speicherort des einfachen gefüllten Info Icons mit schlichtem 'i' oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          INFO_CIRCLE_SIMPLE_ICON

          +
          public static final File INFO_CIRCLE_SIMPLE_ICON
          +
          Speicherort des Info Icons mit schlichtem 'i' oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          INFO_CIRCLE_FILLED_ICON

          +
          public static final File INFO_CIRCLE_FILLED_ICON
          +
          Speicherort des gefüllten Info Icons oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          INFO_CIRCLE_ICON

          +
          public static final File INFO_CIRCLE_ICON
          +
          Speicherort des Info Icons oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          INFO_SPEECH_BOX_FILLED_ICON

          +
          public static final File INFO_SPEECH_BOX_FILLED_ICON
          +
          Speicherort des Info Icons in einer gefüllten "Sprechbox" oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          INFO_SPEECH_BOX_ICON

          +
          public static final File INFO_SPEECH_BOX_ICON
          +
          Speicherort des Info Icons in einer "Sprechbox" oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          INFO_CIRCLE_THIN_ICON

          +
          public static final File INFO_CIRCLE_THIN_ICON
          +
          Speicherort des Info Icons mit schlichtem 'i' in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          KEYBORD_FILLED_ICON

          +
          public static final File KEYBORD_FILLED_ICON
          +
          Speicherort des gefüllten Tastatur Icons oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          KEYBORD_ICON

          +
          public static final File KEYBORD_ICON
          +
          Speicherort des Tastatur Icons oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          KEYBORD_COMPACT_FILLED_ICON

          +
          public static final File KEYBORD_COMPACT_FILLED_ICON
          +
          Speicherort des gefüllten Icons mit kompakter Tastatur oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          KEYBORD_COMPACT_ICON

          +
          public static final File KEYBORD_COMPACT_ICON
          +
          Speicherort des Icons mit kompakter Tastatur oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          KEYBORD_OPEN_FILLED_ICON

          +
          public static final File KEYBORD_OPEN_FILLED_ICON
          +
          Speicherort des gefüllten Icons mit öffnender Tastatur oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          KEYBORD_OPEN_ICON

          +
          public static final File KEYBORD_OPEN_ICON
          +
          Speicherort des Icons mit öffnender Tastatur oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          KEYBORD_CLOSE_FILLED_ICON

          +
          public static final File KEYBORD_CLOSE_FILLED_ICON
          +
          Speicherort des gefüllten Icons mit schließender Tastatur oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          KEYBORD_CLOSE_ICON

          +
          public static final File KEYBORD_CLOSE_ICON
          +
          Speicherort des Icons mit schließender Tastatur oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          LIGHT_BULB_1_ICON

          +
          public static final File LIGHT_BULB_1_ICON
          +
          Speicherort des Icons einer "Glühbirne" mit Draht oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          LIGHT_BULB_2_FILLED_ICON

          +
          public static final File LIGHT_BULB_2_FILLED_ICON
          +
          Speicherort des Icons einer gefüllten "Glühbirne" oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          LIGHT_BULB_2_ICON

          +
          public static final File LIGHT_BULB_2_ICON
          +
          Speicherort des Icons einer "Glühbirne" oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          LIGHT_BULB_3_FILLED_ICON

          +
          public static final File LIGHT_BULB_3_FILLED_ICON
          +
          Speicherort des Icons einer leuchtenden gefüllten "Glühbirne" oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          LIGHT_BULB_3_ICON

          +
          public static final File LIGHT_BULB_3_ICON
          +
          Speicherort des Icons einer leuchtenden "Glühbirne" oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          MAGIC_1_ICON

          +
          public static final File MAGIC_1_ICON
          +
          Speicherort des Icons eines Zauberstabs oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          MAGIC_2_ICON

          +
          public static final File MAGIC_2_ICON
          +
          Speicherort des Icons eines Zauberstabs mit Blatt oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          MENU_ICON

          +
          public static final File MENU_ICON
          +
          Speicherort des Menü Icons oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          MENU_DOTS_HORIZONTAL_FILLED_ICON

          +
          public static final File MENU_DOTS_HORIZONTAL_FILLED_ICON
          +
          Speicherort des Menü Icons mit drei horizontalen gefüllten Punkten oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          MENU_DOTS_VERTICAL_FILLED_ICON

          +
          public static final File MENU_DOTS_VERTICAL_FILLED_ICON
          +
          Speicherort des Menü Icons mit drei vertikalen gefüllten Punkten oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          MENU_DOTS_HORIZONTAL_ICON

          +
          public static final File MENU_DOTS_HORIZONTAL_ICON
          +
          Speicherort des Menü Icons mit drei horizontalen Punkten oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          MENU_DOTS_VERTICAL_ICON

          +
          public static final File MENU_DOTS_VERTICAL_ICON
          +
          Speicherort des Menü Icons mit drei vertikalen Punkten oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          MENU_THIN_ICON

          +
          public static final File MENU_THIN_ICON
          +
          Speicherort des Menü Icons in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          MONITOR_FILLED_ICON

          +
          public static final File MONITOR_FILLED_ICON
          +
          Speicherort des gefüllten Monitor Icons oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          MONITOR_ICON

          +
          public static final File MONITOR_ICON
          +
          Speicherort des Monitor Icons oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          PAINT_BRUSH_FILLED_ICON

          +
          public static final File PAINT_BRUSH_FILLED_ICON
          +
          Speicherort des gefüllten Pinsel Icons oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          PAINT_BRUSH_ICON

          +
          public static final File PAINT_BRUSH_ICON
          +
          Speicherort des Pinsel Icons oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          PAINT_BRUSH_WINDOW_ICON

          +
          public static final File PAINT_BRUSH_WINDOW_ICON
          +
          Speicherort des Icons mit einem Fenster und Pinsel oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          PAINT_BRUSH_BUCKET_FILLED_ICON

          +
          public static final File PAINT_BRUSH_BUCKET_FILLED_ICON
          +
          Speicherort des gefüllten Icons eines Farbeimers mit Pinsel oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          PAINT_BRUSH_BUCKET_ICON

          +
          public static final File PAINT_BRUSH_BUCKET_ICON
          +
          Speicherort des Icons eines Farbeimers mit Pinsel oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          PREFERENCES_GEAR_1_ICON

          +
          public static final File PREFERENCES_GEAR_1_ICON
          +
          Speicherort des Icons eines gefüllten Zahnrades oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          PREFERENCES_GEAR_2_ICON

          +
          public static final File PREFERENCES_GEAR_2_ICON
          +
          Speicherort des Icons mit zwei gefüllten Zahnrädern oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          PREFERENCES_GEAR_3_ICON

          +
          public static final File PREFERENCES_GEAR_3_ICON
          +
          Speicherort des Icons mit drei gefüllten Zahnrädern oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          PREFERENCES_GEAR_THIN_ICON

          +
          public static final File PREFERENCES_GEAR_THIN_ICON
          +
          Speicherort des Icons eines Zahnrades im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          PREFERENCES_WRENCH_RESET_ICON

          +
          public static final File PREFERENCES_WRENCH_RESET_ICON
          +
          Speicherort des Icons eines Schraubenschlüssels mit Rückgängig-Pfeil oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          PREFERENCES_WRENCH_ICON

          +
          public static final File PREFERENCES_WRENCH_ICON
          +
          Speicherort des Icons eines Schraubenschlüssels oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          QUESTION_CIRCLE_FILLED_ICON

          +
          public static final File QUESTION_CIRCLE_FILLED_ICON
          +
          Speicherort des gefüllten Frage Icons oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          QUESTION_CIRCLE_ICON

          +
          public static final File QUESTION_CIRCLE_ICON
          +
          Speicherort des Frage Icons oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          QUESTION_SPEECH_BUBBLE_FILLED_ICON

          +
          public static final File QUESTION_SPEECH_BUBBLE_FILLED_ICON
          +
          Speicherort des Frage Icons in einer gefüllten Sprechblase oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          QUESTION_SPEECH_BUBBLE_ICON

          +
          public static final File QUESTION_SPEECH_BUBBLE_ICON
          +
          Speicherort des Frage Icons in einer Sprechblase oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          QUESTION_THIN_ICON

          +
          public static final File QUESTION_THIN_ICON
          +
          Speicherort des Frage Icons in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          SUN_FILLED_ICON

          +
          public static final File SUN_FILLED_ICON
          +
          Speicherort des gefüllten Icons einer Sonne oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          SUN_ICON

          +
          public static final File SUN_ICON
          +
          Speicherort des Icons einer Sonne oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          SYNC_1_ICON

          +
          public static final File SYNC_1_ICON
          +
          Speicherort des Icons mit zwei runden Pfeilen gegen den Uhrzeigersinn oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          SYNC_2_ICON

          +
          public static final File SYNC_2_ICON
          +
          Speicherort des Icons mit drei runden Pfeilen gegen den Uhrzeigersinn oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          TEXTFIELD_ICON

          +
          public static final File TEXTFIELD_ICON
          +
          Speicherort des Icons eines Textfeldes mit vier Punkten oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          TEXTFIELD_1_ICON

          +
          public static final File TEXTFIELD_1_ICON
          +
          Speicherort des Icons eines Textfeldes mit drei Punkten und einem Unterstrich oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          TRASH_FILLED_ICON

          +
          public static final File TRASH_FILLED_ICON
          +
          Speicherort des Icons eines gefüllten Mülleimers oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          TRASH_ICON

          +
          public static final File TRASH_ICON
          +
          Speicherort des Icons eines Mülleimers oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          TRASH_X_FILLED_ICON

          +
          public static final File TRASH_X_FILLED_ICON
          +
          Speicherort des Icons eines gefüllten Mülleimers mit 'X'-Symbol oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          TRASH_X_ICON

          +
          public static final File TRASH_X_ICON
          +
          Speicherort des Icons eines Mülleimers mit 'X'-Symbol oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          TRASH_THIN_ICON

          +
          public static final File TRASH_THIN_ICON
          +
          Speicherort des Icons eines Mülleimers in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          WINDOW_ICON

          +
          public static final File WINDOW_ICON
          +
          Speicherort des Icons eines Programmfensters oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          WINDOW_THIN_ICON

          +
          public static final File WINDOW_THIN_ICON
          +
          Speicherort des Icons eines Programmfensters in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          WINDOW_THIN_2_ICON

          +
          public static final File WINDOW_THIN_2_ICON
          +
          Speicherort des Icons mit zwei Programmfenstern im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          X_MARK_SQUARE_FILLED_ICON

          +
          public static final File X_MARK_SQUARE_FILLED_ICON
          +
          Speicherort des Icons eines 'X'-Symbols in einem gefüllten Quadrat oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          X_MARK_SQUARE_ICON

          +
          public static final File X_MARK_SQUARE_ICON
          +
          Speicherort des Icons eines 'X'-Symbols in einem Quadrat oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          X_MARK_1_ICON

          +
          public static final File X_MARK_1_ICON
          +
          Speicherort des Icons eines 'X'-Symbols oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          X_MARK_2_ICON

          +
          public static final File X_MARK_2_ICON
          +
          Speicherort des Icons eines 'X'-Symbols in einem gefüllten Quadrat oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          X_MARK_CIRCLE_1_FILLED_ICON

          +
          public static final File X_MARK_CIRCLE_1_FILLED_ICON
          +
          Speicherort des Icons eines 'X'-Symbols in einem gefüllten Kreis oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          X_MARK_CIRCLE_1_ICON

          +
          public static final File X_MARK_CIRCLE_1_ICON
          +
          Speicherort des Icons eines 'X'-Symbols in einem Kreis oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          X_MARK_CIRCLE_2_FILLED_ICON

          +
          public static final File X_MARK_CIRCLE_2_FILLED_ICON
          +
          Speicherort des Icons eines 'X'-Symbols in einem gefüllten Kreis oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          X_MARK_CIRCLE_2_ICON

          +
          public static final File X_MARK_CIRCLE_2_ICON
          +
          Speicherort des Icons eines 'X'-Symbols in einem Kreis oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          X_MARK_CIRCLE_THIN_ICON

          +
          public static final File X_MARK_CIRCLE_THIN_ICON
          +
          Speicherort des Icons eines 'X'-Symbols in einem Kreis in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          X_MARK_THIN_ICON

          +
          public static final File X_MARK_THIN_ICON
          +
          Speicherort des Icons eines 'X'-Symbols in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          X_MARK_ARROW_LEFT_FILLED_ICON

          +
          public static final File X_MARK_ARROW_LEFT_FILLED_ICON
          +
          Speicherort des Icons eines gefüllten Löschen-Symbols mit 'X' oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          X_MARK_ARROW_LEFT_ICON

          +
          public static final File X_MARK_ARROW_LEFT_ICON
          +
          Speicherort des Icons eines Löschen-Symbols mit 'X' oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          ZOOM_IN_ICON

          +
          public static final File ZOOM_IN_ICON
          +
          Speicherort des Icons einer Lupe mit '+' oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          ZOOM_OUT_ICON

          +
          public static final File ZOOM_OUT_ICON
          +
          Speicherort des Icons einer Lupe mit '-' oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          ZOOM_IN_THIN_ICON

          +
          public static final File ZOOM_IN_THIN_ICON
          +
          Speicherort des Icons einer Lupe mit '+' in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          ZOOM_OUT_THIN_ICON

          +
          public static final File ZOOM_OUT_THIN_ICON
          +
          Speicherort des Icons einer Lupe mit '-' in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
          +
        • +
        + + + +
          +
        • +

          ICON_LIST

          +
          public static final LinkedList<File> ICON_LIST
          +
          Liste, die Speicherorte aller in dieser Klasse definierten Icons enthält
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getResourceAsExternalForm

          +
          public static String getResourceAsExternalForm​(String name)
          +
          Sucht die Ressource mit gegebenem Namen und gibt die URL als String zurück.
          +
          +
          Parameters:
          +
          name - Name (und Pfad) der gewünschten Ressource
          +
          Returns:
          +
          URL der gefundenen Ressource oder null, wenn die Ressource nicht gefunden werden konnte
          +
          See Also:
          +
          Class.getResource(String)
          +
          +
        • +
        + + + +
          +
        • +

          getResourceAsFile

          +
          public static File getResourceAsFile​(String name)
          +
          Sucht die Ressource mit gegebenem Namen und gibt diese als File zurück.
          +
          +
          Parameters:
          +
          name - Name (und Pfad) der gewünschten Ressource
          +
          Returns:
          +
          File der gewünschten Ressource oder null, wenn die Ressource nicht gefunden werden konnte
          +
          See Also:
          +
          Class.getResource(String)
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/de_public/bitchanger/util/TriConsumer.html b/doc/0.1.4/de_public/bitchanger/util/TriConsumer.html new file mode 100644 index 0000000..3025991 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/util/TriConsumer.html @@ -0,0 +1,282 @@ + + + + + +TriConsumer + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface TriConsumer<T,​U,​V>

    +
    +
    +
    +
      +
    • +
      +
      Type Parameters:
      +
      T - Typ des ersten Ãœbergabeparameters
      +
      U - Typ des zweiten Ãœbergabeparameters
      +
      V - Typ des dritten Ãœbergabeparameters
      +
      +
      +
      Functional Interface:
      +
      This is a functional interface and can therefore be used as the assignment target for a lambda expression or method reference.
      +
      +
      +
      @FunctionalInterface
      +public interface TriConsumer<T,​U,​V>
      +
      Repräsentiert eine Operation, die drei Übergabeparameter akzeptiert und keine Rückgabe hat.
      +
      +
      Author:
      +
      Tim Mühle
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + +
        All Methods Instance Methods Abstract Methods 
        Modifier and TypeMethodDescription
        voidaccept​(T t, + U u, + V v) +
        Führt diese Operation mit den übergebenen Argumenten aus.
        +
        +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + + + +
          +
        • +

          accept

          +
          void accept​(T t,
          +            U u,
          +            V v)
          +
          Führt diese Operation mit den übergebenen Argumenten aus.
          +
          +
          Parameters:
          +
          t - erster Ãœbergabeparameter
          +
          u - zweiter Ãœbergabeparameter
          +
          v - dritter Ãœbergabeparameter
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +
    + + diff --git a/doc/0.1.4/de_public/bitchanger/util/class-use/ArrayUtils.html b/doc/0.1.4/de_public/bitchanger/util/class-use/ArrayUtils.html new file mode 100644 index 0000000..5af7f32 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/util/class-use/ArrayUtils.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.util.ArrayUtils + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.util.ArrayUtils

    +
    +
    No usage of bitchanger.util.ArrayUtils
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/util/class-use/FXUtils.html b/doc/0.1.4/de_public/bitchanger/util/class-use/FXUtils.html new file mode 100644 index 0000000..19c13bb --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/util/class-use/FXUtils.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.util.FXUtils + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.util.FXUtils

    +
    +
    No usage of bitchanger.util.FXUtils
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/util/class-use/IconFactory.html b/doc/0.1.4/de_public/bitchanger/util/class-use/IconFactory.html new file mode 100644 index 0000000..9320e09 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/util/class-use/IconFactory.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.util.IconFactory + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.util.IconFactory

    +
    +
    No usage of bitchanger.util.IconFactory
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/util/class-use/Resources.html b/doc/0.1.4/de_public/bitchanger/util/class-use/Resources.html new file mode 100644 index 0000000..a507c68 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/util/class-use/Resources.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.util.Resources + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.util.Resources

    +
    +
    No usage of bitchanger.util.Resources
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/util/class-use/TriConsumer.html b/doc/0.1.4/de_public/bitchanger/util/class-use/TriConsumer.html new file mode 100644 index 0000000..e281adf --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/util/class-use/TriConsumer.html @@ -0,0 +1,202 @@ + + + + + +Uses of Interface bitchanger.util.TriConsumer + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    bitchanger.util.TriConsumer

    +
    +
    +
      +
    • + + + + + + + + + + + + +
      Packages that use TriConsumer 
      PackageDescription
      bitchanger.util +
      Enthält Klassen mit allgemeinen und klassenübergreifend benötigten Methoden.
      +
      +
    • +
    • + +
    • +
    +
    +
    + + + diff --git a/doc/0.1.4/de_public/bitchanger/util/package-summary.html b/doc/0.1.4/de_public/bitchanger/util/package-summary.html new file mode 100644 index 0000000..c36fde0 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/util/package-summary.html @@ -0,0 +1,209 @@ + + + + + +bitchanger.util + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package bitchanger.util

    +
    +
    +
    + + +
    Enthält Klassen mit allgemeinen und klassenübergreifend benötigten Methoden.
    +
    +
      +
    • + + + + + + + + + + + + +
      Interface Summary 
      InterfaceDescription
      TriConsumer<T,​U,​V> +
      Repräsentiert eine Operation, die drei Übergabeparameter akzeptiert und keine Rückgabe hat.
      +
      +
    • +
    • + + + + + + + + + + + + + + + + + + + + + + + + +
      Class Summary 
      ClassDescription
      ArrayUtils +
      Klasse, die Werkzeug-Methoden für Arrays enthält.
      +
      FXUtils +
      Utility-Klasse zur allgemeinen Verarbeitung von Objekten, die zur Oberfläche gehören.
      +
      IconFactory +
      Factory Klasse für das Erstellen von SVGIcons
      +
      Resources +
      Enthält alle benötigten Ressourcen, wie Pfade zu den CSS Dateien oder den Icons
      +
      +
    • +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/bitchanger/util/package-tree.html b/doc/0.1.4/de_public/bitchanger/util/package-tree.html new file mode 100644 index 0000000..587317f --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/util/package-tree.html @@ -0,0 +1,173 @@ + + + + + +bitchanger.util Class Hierarchy + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package bitchanger.util

    +Package Hierarchies: + +
    +
    +
    +

    Class Hierarchy

    + +
    +
    +

    Interface Hierarchy

    + +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/bitchanger/util/package-use.html b/doc/0.1.4/de_public/bitchanger/util/package-use.html new file mode 100644 index 0000000..6251047 --- /dev/null +++ b/doc/0.1.4/de_public/bitchanger/util/package-use.html @@ -0,0 +1,188 @@ + + + + + +Uses of Package bitchanger.util + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    bitchanger.util

    +
    +
    +
      +
    • + + + + + + + + + + + + +
      Packages that use bitchanger.util 
      PackageDescription
      bitchanger.util +
      Enthält Klassen mit allgemeinen und klassenübergreifend benötigten Methoden.
      +
      +
    • +
    • + + + + + + + + + + + + + + +
      Classes in bitchanger.util used by bitchanger.util 
      ClassDescription
      TriConsumer +
      Repräsentiert eine Operation, die drei Übergabeparameter akzeptiert und keine Rückgabe hat.
      +
      +
    • +
    +
    +
    + + + diff --git a/doc/0.1.4/de_public/constant-values.html b/doc/0.1.4/de_public/constant-values.html new file mode 100644 index 0000000..8916baa --- /dev/null +++ b/doc/0.1.4/de_public/constant-values.html @@ -0,0 +1,641 @@ + + + + + +Constant Field Values + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Constant Field Values

    +
    +

    Contents

    + +
    +
    +
    + + +
    +

    bitchanger.calculations.*

    + +
    + + + +
    +

    bitchanger.gui.*

    + + +
    + + + +
    +

    bitchanger.main.*

    + +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/deprecated-list.html b/doc/0.1.4/de_public/deprecated-list.html new file mode 100644 index 0000000..0d5a536 --- /dev/null +++ b/doc/0.1.4/de_public/deprecated-list.html @@ -0,0 +1,149 @@ + + + + + +Deprecated List + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Deprecated API

    +

    Contents

    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/element-list b/doc/0.1.4/de_public/element-list new file mode 100644 index 0000000..685c0f3 --- /dev/null +++ b/doc/0.1.4/de_public/element-list @@ -0,0 +1,7 @@ +bitchanger.calculations +bitchanger.gui.controller +bitchanger.gui.controls +bitchanger.gui.views +bitchanger.main +bitchanger.preferences +bitchanger.util diff --git a/doc/0.1.4/de_public/help-doc.html b/doc/0.1.4/de_public/help-doc.html new file mode 100644 index 0000000..94f085b --- /dev/null +++ b/doc/0.1.4/de_public/help-doc.html @@ -0,0 +1,281 @@ + + + + + +API Help + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    How This API Document Is Organized

    +
    This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.
    +
    +
    +
      +
    • +
      +

      Overview

      +

      The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

      +
      +
    • +
    • +
      +

      Package

      +

      Each package has a page that contains a list of its classes and interfaces, with a summary for each. These pages may contain six categories:

      +
        +
      • Interfaces
      • +
      • Classes
      • +
      • Enums
      • +
      • Exceptions
      • +
      • Errors
      • +
      • Annotation Types
      • +
      +
      +
    • +
    • +
      +

      Class or Interface

      +

      Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

      +
        +
      • Class Inheritance Diagram
      • +
      • Direct Subclasses
      • +
      • All Known Subinterfaces
      • +
      • All Known Implementing Classes
      • +
      • Class or Interface Declaration
      • +
      • Class or Interface Description
      • +
      +
      +
        +
      • Nested Class Summary
      • +
      • Field Summary
      • +
      • Property Summary
      • +
      • Constructor Summary
      • +
      • Method Summary
      • +
      +
      +
        +
      • Field Detail
      • +
      • Property Detail
      • +
      • Constructor Detail
      • +
      • Method Detail
      • +
      +

      Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

      +
      +
    • +
    • +
      +

      Annotation Type

      +

      Each annotation type has its own separate page with the following sections:

      +
        +
      • Annotation Type Declaration
      • +
      • Annotation Type Description
      • +
      • Required Element Summary
      • +
      • Optional Element Summary
      • +
      • Element Detail
      • +
      +
      +
    • +
    • +
      +

      Enum

      +

      Each enum has its own separate page with the following sections:

      +
        +
      • Enum Declaration
      • +
      • Enum Description
      • +
      • Enum Constant Summary
      • +
      • Enum Constant Detail
      • +
      +
      +
    • +
    • +
      +

      Use

      +

      Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its "Use" page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.

      +
      +
    • +
    • +
      +

      Tree (Class Hierarchy)

      +

      There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. Classes are organized by inheritance structure starting with java.lang.Object. Interfaces do not inherit from java.lang.Object.

      +
        +
      • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
      • +
      • When viewing a particular package, class or interface page, clicking on "Tree" displays the hierarchy for only that package.
      • +
      +
      +
    • +
    • +
      +

      Deprecated API

      +

      The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.

      +
      +
    • +
    • +
      +

      Index

      +

      The Index contains an alphabetic index of all classes, interfaces, constructors, methods, and fields, as well as lists of all packages and all classes.

      +
      +
    • +
    • +
      +

      All Classes

      +

      The All Classes link shows all classes and interfaces except non-static nested types.

      +
      +
    • +
    • +
      +

      Serialized Form

      +

      Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.

      +
      +
    • +
    • +
      +

      Constant Field Values

      +

      The Constant Field Values page lists the static final fields and their values.

      +
      +
    • +
    • +
      +

      Search

      +

      You can search for definitions of modules, packages, types, fields, methods and other terms defined in the API, using some or all of the name. "Camel-case" abbreviations are supported: for example, "InpStr" will find "InputStream" and "InputStreamReader".

      +
      +
    • +
    +
    +This help file applies to API documentation generated by the standard doclet.
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/index-files/index-1.html b/doc/0.1.4/de_public/index-files/index-1.html new file mode 100644 index 0000000..ebcaa6e --- /dev/null +++ b/doc/0.1.4/de_public/index-files/index-1.html @@ -0,0 +1,316 @@ + + + + + +A-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    A

    +
    +
    ABC_BRICKS_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons mit ABC-Würfeln, gefüllt oder null, wenn das Icon nicht gefunden wurde
    +
    +
    ABC_BRICKS_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons mit ABC-Würfeln oder null, wenn das Icon nicht gefunden wurde
    +
    +
    about - Variable in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    ABOUT - bitchanger.gui.controls.InformationDialog.InformationType
    +
     
    +
    accept(T, U, V) - Method in interface bitchanger.util.TriConsumer
    +
    +
    Führt diese Operation mit den übergebenen Argumenten aus.
    +
    +
    addColumnConstraint(int, AlphaNumGridView.ConstraintType) - Method in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Erstellt neue ColumnConstraints für die Spalte mit dem Index columnIndex, die an den ConstraintType angepasst sind.
    +
    +
    addRowConstraint(int, AlphaNumGridView.ConstraintType) - Method in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Erstellt neue RowConstraints für die Zeile mit dem Index rowIndex, die an den ConstraintType angepasst sind.
    +
    +
    ALPHA_KEYS - Static variable in class bitchanger.gui.controls.AlphaNumKeys
    +
    +
    Array, das die Schlüsselwörter für die Buchstaben-Buttons definiert
    +
    +
    alphaKeys - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Array, das die Schlüsselwörter für die Buchstaben-Buttons definiert
    +
    +
    alphaNum - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Buttons, die als alpha-numerische Tastatur dienen, die für verschiedene Zahlensysteme ausgelegt ist.
    +
    +
    AlphaNumGridView - Class in bitchanger.gui.views
    +
    +
    View, die die Basis Scene für eine Tabelle aus einer Spalte mit Labels, einer Spalte mit Textfeldern + und einer Tastaturmatrix aus AlphaNumKeys erstellt.
    +
    +
    AlphaNumGridView(int, int) - Constructor for class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Erzeugt eine neue AlphaNumGridView, die keine Labels und keine Textfelder enthält.
    +
    +
    AlphaNumGridView(int, int, int, int, int, int, String[], String...) - Constructor for class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Erzeugt eine neue AlphaNumGridView, die ihre Labels, Textfelder und die Tastaturmatrix nach den übergebenen Parametern + positioniert.
    +
    +
    AlphaNumGridView(int, int, int, int, int, int, String[], String[], double, double, double, double, double, double, double) - Constructor for class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Erzeugt eine neue AlphaNumGridView, die ihre Labels, Textfelder und die Tastaturmatrix nach den übergebenen Parametern + positioniert.
    +
    +
    AlphaNumGridView(int, int, int, int, int, int, String[], String[], double, double, double, double, double, double, double, double, double, double, double, double, double, double, double) - Constructor for class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Erzeugt eine neue AlphaNumGridView, die ihre Labels, Textfelder und die Tastaturmatrix nach den übergebenen Parametern + positioniert.
    +
    +
    AlphaNumGridView(String[], String...) - Constructor for class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Erzeugt eine neue AlphaNumGridView, die ihre Labels in der Spalte 0 ab Zeile 0 und ihre Textfelder in der Spalte 1 + ab Zeile 0 positioniert.
    +
    +
    AlphaNumGridView.ConstraintType - Enum in bitchanger.gui.views
    +
    +
    Aufzählung von möglichen Typen für Constraints einer GridPane
    +
    +
    AlphaNumKeys - Class in bitchanger.gui.controls
    +
    +
    AlphaNumKeys stellt ein Tastaturlayout als 4x5 Matrix bereit.
    +
    +
    AlphaNumKeys(int, int, double, Scene) - Constructor for class bitchanger.gui.controls.AlphaNumKeys
    +
    +
    Erstellt alle Buttons für das Tastaturlayout und setzt die Constraints für die Positionierung in einer GridPane.
    +
    +
    AlphaNumKeys(int, int, DoubleProperty, Scene) - Constructor for class bitchanger.gui.controls.AlphaNumKeys
    +
    +
    Erstellt alle Buttons für das Tastaturlayout und setzt die Constraints für die Positionierung in einer GridPane.
    +
    +
    AlphaNumKeysController - Class in bitchanger.gui.controller
    +
    +
    Dieser Controller gibt den Bedienelementen einer Instanz von AlphaNumKeys eine Funktion und bindet die Simulation der + Tastatur an die gekapselte Scene.
    +
    +
    AlphaNumKeysController(AlphaNumKeys, Scene) - Constructor for class bitchanger.gui.controller.AlphaNumKeysController
    +
    +
    Erzeugt einen neuen Controller, der einer AlphaNumKeys eine Funktion gibt.
    +
    +
    ANGEL_DOWN_CIRCLE_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines nach unten zeigenden Pfeils in einem Kreis im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
    +
    +
    ANGEL_DOWN_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines nach unten zeigenden Pfeils im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
    +
    +
    ANGEL_LEFT_CIRCLE_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines nach links zeigenden Pfeils in einem Kreis im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
    +
    +
    ANGEL_LEFT_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines nach links zeigenden Pfeils im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
    +
    +
    ANGEL_RIGHT_CIRCLE_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines nach rechts zeigenden Pfeils in einem Kreis im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
    +
    +
    ANGEL_RIGHT_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines nach rechts zeigenden Pfeils im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
    +
    +
    ANGEL_UP_CIRCLE_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines nach oben zeigenden Pfeils in einem Kreis im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
    +
    +
    ANGEL_UP_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines nach oben zeigenden Pfeils im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
    +
    +
    arrayOf(T...) - Static method in class bitchanger.util.ArrayUtils
    +
    +
    Wandelt eine Aufzählung von Objekten in ein Array um und gibt dieses zurück.
    +
    +
    ArrayUtils - Class in bitchanger.util
    +
    +
    Klasse, die Werkzeug-Methoden für Arrays enthält.
    +
    +
    ARROW_DOWN_CIRCLE_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines nach unten zeigenden Pfeils in einem gefüllten Kreis oder null, wenn das Icon nicht gefunden wurde
    +
    +
    ARROW_DOWN_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines nach unten zeigenden Pfeils oder null, wenn das Icon nicht gefunden wurde
    +
    +
    ARROW_LEFT_CIRCLE_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines nach links zeigenden Pfeils in einem gefüllten Kreis oder null, wenn das Icon nicht gefunden wurde
    +
    +
    ARROW_LEFT_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines nach links zeigenden Pfeils oder null, wenn das Icon nicht gefunden wurde
    +
    +
    ARROW_RIGHT_CIRCLE_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines nach rechts zeigenden Pfeils in einem gefüllten Kreis oder null, wenn das Icon nicht gefunden wurde
    +
    +
    ARROW_RIGHT_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines nach rechts zeigenden Pfeils oder null, wenn das Icon nicht gefunden wurde
    +
    +
    ARROW_UP_CIRCLE_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines nach oben zeigenden Pfeils in einem gefüllten Kreis oder null, wenn das Icon nicht gefunden wurde
    +
    +
    ARROW_UP_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines nach oben zeigenden Pfeils oder null, wenn das Icon nicht gefunden wurde
    +
    +
    asDouble() - Method in interface bitchanger.calculations.ChangeableNumber
    +
     
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/index-files/index-10.html b/doc/0.1.4/de_public/index-files/index-10.html new file mode 100644 index 0000000..05f9124 --- /dev/null +++ b/doc/0.1.4/de_public/index-files/index-10.html @@ -0,0 +1,192 @@ + + + + + +K-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    K

    +
    +
    KEYBOARD_BTN_KEY - Static variable in class bitchanger.gui.controls.AlphaNumKeys
    +
    +
    Schlüsselwort für den Button zum Umschalten des Tastaturlayouts
    +
    +
    keyboardBtnKey - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Schlüsselwort für den Button zum Umschalten des Tastaturlayouts
    +
    +
    KEYBORD_CLOSE_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des gefüllten Icons mit schließender Tastatur oder null, wenn das Icon nicht gefunden wurde
    +
    +
    KEYBORD_CLOSE_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons mit schließender Tastatur oder null, wenn das Icon nicht gefunden wurde
    +
    +
    KEYBORD_COMPACT_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des gefüllten Icons mit kompakter Tastatur oder null, wenn das Icon nicht gefunden wurde
    +
    +
    KEYBORD_COMPACT_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons mit kompakter Tastatur oder null, wenn das Icon nicht gefunden wurde
    +
    +
    KEYBORD_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des gefüllten Tastatur Icons oder null, wenn das Icon nicht gefunden wurde
    +
    +
    KEYBORD_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Tastatur Icons oder null, wenn das Icon nicht gefunden wurde
    +
    +
    KEYBORD_OPEN_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des gefüllten Icons mit öffnender Tastatur oder null, wenn das Icon nicht gefunden wurde
    +
    +
    KEYBORD_OPEN_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons mit öffnender Tastatur oder null, wenn das Icon nicht gefunden wurde
    +
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/index-files/index-11.html b/doc/0.1.4/de_public/index-files/index-11.html new file mode 100644 index 0000000..7981e7c --- /dev/null +++ b/doc/0.1.4/de_public/index-files/index-11.html @@ -0,0 +1,209 @@ + + + + + +L-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    L

    +
    +
    labelColumn - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Konstante, die die Spalte der GridPane definiert, in der die Labels positioniert werden
    +
    +
    labelTexts - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Array, das die Beschriftungen für die Labels vor den Textfeldern definiert
    +
    +
    launchFXApplication(String[]) - Static method in class bitchanger.main.PrimaryFXApp
    +
    +
    Startet die Anwendung und öffnet das Applikationsfenster.
    +
    +
    LAYOUT_CSS - Static variable in class bitchanger.util.Resources
    +
    +
    Pfad zum Stylesheet für das allgemeine Layout oder null, wenn das CSS nicht gefunden wurde
    +
    +
    LIGHT - bitchanger.preferences.Style
    +
    +
    Konstante für ein helles Layout
    +
    +
    LIGHT_BULB_1_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons einer "Glühbirne" mit Draht oder null, wenn das Icon nicht gefunden wurde
    +
    +
    LIGHT_BULB_2_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons einer gefüllten "Glühbirne" oder null, wenn das Icon nicht gefunden wurde
    +
    +
    LIGHT_BULB_2_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons einer "Glühbirne" oder null, wenn das Icon nicht gefunden wurde
    +
    +
    LIGHT_BULB_3_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons einer leuchtenden gefüllten "Glühbirne" oder null, wenn das Icon nicht gefunden wurde
    +
    +
    LIGHT_BULB_3_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons einer leuchtenden "Glühbirne" oder null, wenn das Icon nicht gefunden wurde
    +
    +
    LIGHT_CSS - Static variable in class bitchanger.util.Resources
    +
    +
    Pfad zum Stylesheet für die helle Darstellung oder null, wenn das CSS nicht gefunden wurde
    +
    +
    loadCustom() - Static method in class bitchanger.preferences.Preferences
    +
    +
    Lädt die letzten Einstellungen aus der Datei Resources.CUSTOM_PREFERENCES
    +
    +
    loadDefault() - Static method in class bitchanger.preferences.Preferences
    +
    +
    Lädt die Standardeinstellungen aus der Datei Resources.DEFAULT_PREFERENCES
    +
    +
    loadSVG(File) - Static method in class bitchanger.util.FXUtils
    +
    +
    Lädt ein Icon im svg-Format aus der übergebenen Datei und erstellt aus der Datei ein SVGPath Objekt, + das dem Scenegraph in javaFX hinzugefügt werden kann.
    +
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/index-files/index-12.html b/doc/0.1.4/de_public/index-files/index-12.html new file mode 100644 index 0000000..d3dae29 --- /dev/null +++ b/doc/0.1.4/de_public/index-files/index-12.html @@ -0,0 +1,236 @@ + + + + + +M-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    M

    +
    +
    MAGIC_1_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines Zauberstabs oder null, wenn das Icon nicht gefunden wurde
    +
    +
    MAGIC_2_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines Zauberstabs mit Blatt oder null, wenn das Icon nicht gefunden wurde
    +
    +
    main(String[]) - Static method in class bitchanger.main.BitchangerLauncher
    +
    +
    Die Main Methode startet die PrimaryFXApp der Anwendung und wartet, bis das Anwendungsfenster geschlossen wurde.
    +
    +
    MAX_BASE - Static variable in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Eine Konstante für die größtmögliche Basis bei einem Zeichenvorrat von 0-9 und A-Z
    +
    +
    MENU_DOTS_HORIZONTAL_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Menü Icons mit drei horizontalen gefüllten Punkten oder null, wenn das Icon nicht gefunden wurde
    +
    +
    MENU_DOTS_HORIZONTAL_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Menü Icons mit drei horizontalen Punkten oder null, wenn das Icon nicht gefunden wurde
    +
    +
    MENU_DOTS_VERTICAL_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Menü Icons mit drei vertikalen gefüllten Punkten oder null, wenn das Icon nicht gefunden wurde
    +
    +
    MENU_DOTS_VERTICAL_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Menü Icons mit drei vertikalen Punkten oder null, wenn das Icon nicht gefunden wurde
    +
    +
    MENU_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Menü Icons oder null, wenn das Icon nicht gefunden wurde
    +
    +
    MENU_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Menü Icons in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
    +
    +
    menubar - Variable in class bitchanger.gui.views.ViewBase
    +
    +
    MenuBar des Scenegraphen
    +
    +
    menuItemMap - Variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Map, in der alle vom Controller benötigten MenuItems mit einem eindeutigen Schlüssel abgelegt werden
    +
    +
    MIN_BASE - Static variable in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Eine Konstante für die kleinstmögliche Basis
    +
    +
    MODUS_CALCULATOR_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Schlüsselwort, mit dem das MenuItem "Berechnungen" in der Map BasicMenuBar.menuItemMap abgelegt ist
    +
    +
    MODUS_CONVERTER_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Schlüsselwort, mit dem das MenuItem "Umrechner" in der Map BasicMenuBar.menuItemMap abgelegt ist
    +
    +
    MODUS_IEEE_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Schlüsselwort, mit dem das MenuItem "IEEE" in der Map BasicMenuBar.menuItemMap abgelegt ist
    +
    +
    MODUS_MENU_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Schlüsselwort, mit dem das Menu "Modus" in der Map BasicMenuBar.menuItemMap abgelegt ist
    +
    +
    modusCalculator - Variable in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    modusConverter - Variable in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    modusIEEE - Variable in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    MONITOR_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des gefüllten Monitor Icons oder null, wenn das Icon nicht gefunden wurde
    +
    +
    MONITOR_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Monitor Icons oder null, wenn das Icon nicht gefunden wurde
    +
    +
    moveToScreen - Variable in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/index-files/index-13.html b/doc/0.1.4/de_public/index-files/index-13.html new file mode 100644 index 0000000..e08c334 --- /dev/null +++ b/doc/0.1.4/de_public/index-files/index-13.html @@ -0,0 +1,175 @@ + + + + + +N-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    N

    +
    +
    NEXT_BTN_KEY - Static variable in class bitchanger.gui.controls.AlphaNumKeys
    +
    +
    Schlüsselwort für den Button zum Weiterscrollen durch die Tastatur
    +
    +
    nextBtnKey - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Schlüsselwort für den Button zum Weiterscrollen durch die Tastatur
    +
    +
    nodeMap - Variable in class bitchanger.gui.controller.ControllerBase
    +
    +
    Map, die alle Nodes des gekapselten Controllables enthält, die eine Funktion erhalten + und weder eine Instanz von Button noch von Textfeld sind
    +
    +
    NONE - bitchanger.gui.controls.InformationDialog.InformationType
    +
     
    +
    NUM_KEYS - Static variable in class bitchanger.gui.controls.AlphaNumKeys
    +
    +
    Array, das die Schlüsselwörter für die Zahlen-Buttons definiert
    +
    +
    numKeys - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Array, das die Schlüsselwörter für die Zahlen-Buttons definiert
    +
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/index-files/index-14.html b/doc/0.1.4/de_public/index-files/index-14.html new file mode 100644 index 0000000..a769b1c --- /dev/null +++ b/doc/0.1.4/de_public/index-files/index-14.html @@ -0,0 +1,172 @@ + + + + + +O-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    O

    +
    +
    of(Controllable) - Static method in interface bitchanger.gui.controller.Controller
    +
    +
    Factory-Methode, die einen neuen Controller für das übergebene Controllable erzeugt und zurückgibt.
    +
    +
    ofArg(Controllable, Object...) - Static method in interface bitchanger.gui.controller.Controller
    +
    +
    Factory-Methode, die einen neuen Controller für das übergebene Controllable erzeugt und zurückgibt.
    +
    +
    ofSVGFile(File) - Static method in class bitchanger.util.IconFactory
    +
     
    +
    options - Variable in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    OPTIONS_INDICATE_FRACTIONAL_INACCURACY_CHECK_ITEM_KEY - Static variable in class bitchanger.gui.controls.ConverterMenuBar
    +
    +
    Schlüsselwort, mit dem das CheckMenuItem "abgeschnittene Nachkommastellen kennzeichnen" in der Map BasicMenuBar.menuItemMap abgelegt ist
    +
    +
    OPTIONS_MENU_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Schlüsselwort, mit dem das Menu "Optionen" in der Map BasicMenuBar.menuItemMap abgelegt ist
    +
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/index-files/index-15.html b/doc/0.1.4/de_public/index-files/index-15.html new file mode 100644 index 0000000..6dee7e5 --- /dev/null +++ b/doc/0.1.4/de_public/index-files/index-15.html @@ -0,0 +1,233 @@ + + + + + +P-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    P

    +
    +
    paddingBottomProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Property für den Abstand am unteren Rand der GridPane im Center
    +
    +
    paddingLeftProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Property für den Abstand am linken Rand der GridPane im Center
    +
    +
    paddingRigthProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Property für den Abstand am rechten Rand der GridPane im Center
    +
    +
    paddingTopProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Property für den Abstand am oberen Rand der GridPane im Center
    +
    +
    PAINT_BRUSH_BUCKET_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des gefüllten Icons eines Farbeimers mit Pinsel oder null, wenn das Icon nicht gefunden wurde
    +
    +
    PAINT_BRUSH_BUCKET_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines Farbeimers mit Pinsel oder null, wenn das Icon nicht gefunden wurde
    +
    +
    PAINT_BRUSH_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des gefüllten Pinsel Icons oder null, wenn das Icon nicht gefunden wurde
    +
    +
    PAINT_BRUSH_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Pinsel Icons oder null, wenn das Icon nicht gefunden wurde
    +
    +
    PAINT_BRUSH_WINDOW_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons mit einem Fenster und Pinsel oder null, wenn das Icon nicht gefunden wurde
    +
    +
    Preferences - Class in bitchanger.preferences
    +
    +
    Preferences ist die globale Sammlung für alle möglichen Einstellungen, die am Bitchanger vorgenommen + werden können.
    +
    +
    PREFERENCES_GEAR_1_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines gefüllten Zahnrades oder null, wenn das Icon nicht gefunden wurde
    +
    +
    PREFERENCES_GEAR_2_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons mit zwei gefüllten Zahnrädern oder null, wenn das Icon nicht gefunden wurde
    +
    +
    PREFERENCES_GEAR_3_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons mit drei gefüllten Zahnrädern oder null, wenn das Icon nicht gefunden wurde
    +
    +
    PREFERENCES_GEAR_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines Zahnrades im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
    +
    +
    PREFERENCES_WRENCH_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines Schraubenschlüssels oder null, wenn das Icon nicht gefunden wurde
    +
    +
    PREFERENCES_WRENCH_RESET_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines Schraubenschlüssels mit Rückgängig-Pfeil oder null, wenn das Icon nicht gefunden wurde
    +
    +
    PREVIOUS_BTN_KEY - Static variable in class bitchanger.gui.controls.AlphaNumKeys
    +
    +
    Schlüsselwort für den Button zum Rückwärtsscrollen durch die Tastatur
    +
    +
    previousBtnKey - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Schlüsselwort für den Button zum Rückwärtsscrollen durch die Tastatur
    +
    +
    PrimaryFXApp - Class in bitchanger.main
    +
    +
    Hauptfenster der Applikation mit javaFX
    +
    +
    PrimaryFXApp() - Constructor for class bitchanger.main.PrimaryFXApp
    +
    +
    Erzeugt eine neue PrimaryFXApp für den Bitchanger
    +
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/index-files/index-16.html b/doc/0.1.4/de_public/index-files/index-16.html new file mode 100644 index 0000000..b642c2e --- /dev/null +++ b/doc/0.1.4/de_public/index-files/index-16.html @@ -0,0 +1,172 @@ + + + + + +Q-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    Q

    +
    +
    QUESTION_CIRCLE_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des gefüllten Frage Icons oder null, wenn das Icon nicht gefunden wurde
    +
    +
    QUESTION_CIRCLE_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Frage Icons oder null, wenn das Icon nicht gefunden wurde
    +
    +
    QUESTION_SPEECH_BUBBLE_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Frage Icons in einer gefüllten Sprechblase oder null, wenn das Icon nicht gefunden wurde
    +
    +
    QUESTION_SPEECH_BUBBLE_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Frage Icons in einer Sprechblase oder null, wenn das Icon nicht gefunden wurde
    +
    +
    QUESTION_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Frage Icons in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
    +
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/index-files/index-17.html b/doc/0.1.4/de_public/index-files/index-17.html new file mode 100644 index 0000000..7e154a7 --- /dev/null +++ b/doc/0.1.4/de_public/index-files/index-17.html @@ -0,0 +1,191 @@ + + + + + +R-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    R

    +
    +
    readOnlyStyleProperty - Variable in class bitchanger.preferences.Preferences
    +
    +
    ReadOnlyProperty für das gewählte Stylesheet
    +
    +
    readOnlyStylesheetProperty - Variable in class bitchanger.preferences.Preferences
    +
    +
    ReadOnlyProperty für das gewählte Stylesheet
    +
    +
    register(Class<? extends Controllable>, Class<? extends Controller>) - Static method in interface bitchanger.gui.controller.Controller
    +
    +
    Registriert eine Controller-Klasse für die Factory-Methode Controller.of(Controllable) + und ordnet diese einer Controllable-Klasse zu.
    +
    +
    REGISTERED_CONTROLLERS - Static variable in interface bitchanger.gui.controller.Controller
    +
    +
    Map, die die für ein Controllable registrierten Controller speichert und diese verknüpft
    +
    +
    reset() - Method in interface bitchanger.calculations.ChangeableNumber
    +
    +
    Setzt den eingeschlossenen Wert zurück.
    +
    +
    reset() - Method in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Setzt den eingeschlossenen Wert zurück.
    +
    +
    resetPreferences - Variable in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    Resources - Class in bitchanger.util
    +
    +
    Enthält alle benötigten Ressourcen, wie Pfade zu den CSS Dateien oder den Icons
    +
    +
    root - Variable in class bitchanger.gui.views.ViewBase
    +
    +
    Wurzelknoten im Scenegraph
    +
    +
    ROW_COUNT - Static variable in class bitchanger.gui.controls.AlphaNumKeys
    +
    +
    Konstante, die die Anzahl der Zeilen dieser Tastaturmatrix enthält
    +
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/index-files/index-18.html b/doc/0.1.4/de_public/index-files/index-18.html new file mode 100644 index 0000000..e03387b --- /dev/null +++ b/doc/0.1.4/de_public/index-files/index-18.html @@ -0,0 +1,377 @@ + + + + + +S-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    S

    +
    +
    scene - Variable in class bitchanger.gui.views.ViewBase
    +
    +
    Szene, die von der View repräsentiert wird
    +
    +
    set(double) - Method in interface bitchanger.calculations.ChangeableNumber
    +
     
    +
    setActions() - Method in class bitchanger.gui.controller.AlphaNumKeysController
    +
    +
    Setzt die Actions zum Umschalten zwischen den Tastaturmodi, zum scrollen durch die Tastatur, zur Aktualisierung des Komma-Buttons + und simuliert die Tastatureingaben für die alphanumerischen Buttons.
    +
    +
    setActions() - Method in class bitchanger.gui.controller.BasicMenuController
    +
    +
    Setzt alle für die View benötigten Funktionen.
    +
    +
    setActions() - Method in interface bitchanger.gui.controller.Controller
    +
    +
    Setzt alle für die View benötigten Funktionen.
    +
    +
    setActions() - Method in class bitchanger.gui.controller.ConverterController
    +
    +
    Setzt alle für die View benötigten Funktionen.
    +
    +
    setActions() - Method in class bitchanger.gui.controller.ConverterMenuController
    +
    +
    Setzt alle für die View benötigten Funktionen.
    +
    +
    setActions() - Method in class bitchanger.gui.controller.IEEEController
    +
    +
    Setzt alle für die View benötigten Funktionen.
    +
    +
    setBase(int) - Method in class bitchanger.gui.controls.ValueButton
    +
    +
    Setzt den Wert für die Basis
    +
    +
    setBase(int) - Method in class bitchanger.gui.controls.ValueField
    +
    +
    Setzt den Wert der ValueField.baseProperty
    +
    +
    setBin(String) - Method in interface bitchanger.calculations.ChangeableNumber
    +
    +
    Setzt den Wert dieser ChangeableNumber auf den Wert eines binären Strings
    +
    +
    setBin(String) - Method in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Setzt den Wert dieser ChangeableNumber auf den Wert eines binären Strings
    +
    +
    setDec(String) - Method in interface bitchanger.calculations.ChangeableNumber
    +
    +
    Setzt den Wert dieser ChangeableNumber auf den Wert eines dezimalen Strings
    +
    +
    setDec(String) - Method in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Setzt den Wert dieser ChangeableNumber auf den Wert eines dezimalen Strings
    +
    +
    setGraphicScaleFactor(Double) - Method in class bitchanger.gui.controls.UnfocusedButton
    +
     
    +
    setGridConstraints(int, int, int, int, Queue<T>) - Static method in class bitchanger.util.FXUtils
    +
    +
    Setzt die Constrains der Nodes in einer Schlange, um diese in einer GridPane zu positionieren.
    +
    +
    setGridConstraints(int, int, int, int, Queue<T>, TriConsumer<Node, Integer, Integer>) - Static method in class bitchanger.util.FXUtils
    +
    +
    Arbeitet Nodes in einer Schlange als Tabelle ab.
    +
    +
    setHex(String) - Method in interface bitchanger.calculations.ChangeableNumber
    +
    +
    Setzt den Wert dieser ChangeableNumber auf den Wert eines hexadezimalen Strings
    +
    +
    setHex(String) - Method in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Setzt den Wert dieser ChangeableNumber auf den Wert eines hexadezimalen Strings
    +
    +
    setIconOrText(Labeled, SVGIcon) - Static method in class bitchanger.util.FXUtils
    +
     
    +
    setIconOrText(Labeled, SVGIcon, String) - Static method in class bitchanger.util.FXUtils
    +
     
    +
    setIconOrText(MenuItem, SVGIcon) - Static method in class bitchanger.util.FXUtils
    +
     
    +
    setIconOrText(MenuItem, SVGIcon, String) - Static method in class bitchanger.util.FXUtils
    +
     
    +
    setIndicateFractionalPrecision(boolean) - Method in class bitchanger.preferences.Preferences
    +
    +
    Schaltet die Anzeige von abgebrochenen Nachkommastellen ein und aus
    +
    +
    setMaxSizes(Iterable<? extends Node>, double) - Static method in class bitchanger.util.FXUtils
    +
    +
    Setzt die maximale Größe aller Controls in einem Iterable auf den Wert maxSize.
    +
    +
    setMaxSizes(Iterable<? extends Node>, double, double) - Static method in class bitchanger.util.FXUtils
    +
    +
    Setzt die maximale Breite aller Controls in einem Iterable auf den Wert maxWidth und + die maximale Höhe auf den Wert maxHeight.
    +
    +
    setMenuBar(T) - Method in interface bitchanger.gui.views.Viewable
    +
    +
    Setzt die übergebene MenuBar in den Scenegraph der View.
    +
    +
    setMenuBar(V) - Method in class bitchanger.gui.views.ViewBase
    +
    +
    Setzt die übergebene MenuBar in den Scenegraph der View.
    +
    +
    setOct(String) - Method in interface bitchanger.calculations.ChangeableNumber
    +
    +
    Setzt den Wert dieser ChangeableNumber auf den Wert eines oktalen Strings
    +
    +
    setOct(String) - Method in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Setzt den Wert dieser ChangeableNumber auf den Wert eines oktalen Strings
    +
    +
    setStylesheet(Style) - Method in class bitchanger.preferences.Preferences
    +
    +
    Saves the location of the Stylesheet with the given Style in the Preferences.stylesheetProperty.
    +
    +
    setStylesheet(String) - Method in class bitchanger.preferences.Preferences
    +
    +
    Searches for the resource with the given path and saves the location of the resource in the Preferences.stylesheetProperty.
    +
    +
    setSVG(SVGPath) - Method in class bitchanger.gui.controls.SVGIcon
    +
     
    +
    setTFColumnSpan - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    true, wenn die Textfelder über die Anzahl der Spalten von der Tastatur verteilt werden sollen.
    +
    +
    setValue(String, int) - Method in interface bitchanger.calculations.ChangeableNumber
    +
    +
    Setzt den Wert dieser ChangeableNumber auf einen Wert in einem beliebigen Zahlensystem
    +
    +
    setValue(String, int) - Method in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Setzt den Wert dieser ChangeableNumber auf einen Wert in einem beliebigen Zahlensystem
    +
    +
    showFullscreen - Variable in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    SIGN_BTN_KEY - Static variable in class bitchanger.gui.controls.AlphaNumKeys
    +
    +
    Schlüsselwort für den Button zum Vorzeichenwechsel
    +
    +
    signBtnKey - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Schlüsselwort für den Button zum Vorzeichenwechsel
    +
    +
    SimpleChangeableNumber - Class in bitchanger.calculations
    +
    +
    Die Klasse SimpleChangeableNumber bietet eine vollständige Implementierung von ChangeableNumber.
    +
    +
    SimpleChangeableNumber() - Constructor for class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Erzeugt eine neue Instanz mit dem eingeschlossenen Wert 0
    +
    +
    SimpleChangeableNumber(String) - Constructor for class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Erzeugt eine neue Instanz, die den übergebenen dezimal-Wert repräsentiert
    +
    +
    simulateKeyEvents(Button, Node, Scene, String, String, KeyCode) - Method in class bitchanger.gui.controller.ControllerBase
    +
    +
    Verhält sich wie ControllerBase.simulateKeyEvents(Button, Node, Scene, String, String, KeyCode, boolean, boolean, boolean, boolean), + bis auf dass die Parameter shiftDown, controlDown, altDown und metaDown alle den Wert false haben.
    +
    +
    simulateKeyEvents(Button, Node, Scene, String, String, KeyCode, boolean, boolean, boolean, boolean) - Method in class bitchanger.gui.controller.ControllerBase
    +
    +
    Simuliert den Druck der Taste auf einer Tastatur mit dem spezifischen keycode und feuert nacheinander die KeyEvents + KeyEvent.KEY_PRESSED, KeyEvent.KEY_TYPED und KeyEvent.KEY_RELEASED an den gewählten Empfänger + target.
    +
    +
    spacingProperty - Variable in class bitchanger.gui.controls.AlphaNumKeys
    +
    +
    Property für den Abstand der Buttons previousBtn und nextBtn in der HBox arrowButtons
    +
    +
    splitInBlocks(String, int) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Unterteilt den übergebenen String in Blöcke mit der gegebenen Länge, beispielsweise + zur Tausendertrennung
    +
    +
    start(Stage) - Method in class bitchanger.main.PrimaryFXApp
    +
    +
    Diese Methode erstellt den Inhalt für das PrimaryFXApp und öffnet dieses.
    +
    +
    storeCaretPosition(ObservableValue<? extends Number>, Number, Number) - Method in class bitchanger.gui.controls.ValueField
    +
    +
    Speichert die letzte bekannte CaretPosition, um diese zurücksetzen zu können.
    +
    +
    storeCustom() - Static method in class bitchanger.preferences.Preferences
    +
    +
    Speichert die aktuellen Einstellungen in der Datei Resources.CUSTOM_PREFERENCES
    +
    +
    Style - Enum in bitchanger.preferences
    +
    +
    Aufzählung für verschiedene Stile, die als CSS Datei für javaFX verfügbar sind
    +
    +
    styleBindIcon(File, File) - Static method in class bitchanger.util.IconFactory
    +
    +
    Erzeugt ein neues SVGIcon, das je nach eingestelltem Style in Preferences.readOnlyStyleProperty der svg-Datei + lightIconFile oder darkIconFile entspricht und sich automatisch bei Änderung des Styles anpasst.
    +
    +
    styleDark - Variable in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    styleLight - Variable in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    styleMenu - Variable in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    SUN_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des gefüllten Icons einer Sonne oder null, wenn das Icon nicht gefunden wurde
    +
    +
    SUN_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons einer Sonne oder null, wenn das Icon nicht gefunden wurde
    +
    +
    SVGIcon - Class in bitchanger.gui.controls
    +
     
    +
    SVGIcon() - Constructor for class bitchanger.gui.controls.SVGIcon
    +
     
    +
    SVGIcon(File) - Constructor for class bitchanger.gui.controls.SVGIcon
    +
     
    +
    SVGIcon(SVGPath) - Constructor for class bitchanger.gui.controls.SVGIcon
    +
     
    +
    SYNC_1_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons mit zwei runden Pfeilen gegen den Uhrzeigersinn oder null, wenn das Icon nicht gefunden wurde
    +
    +
    SYNC_2_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons mit drei runden Pfeilen gegen den Uhrzeigersinn oder null, wenn das Icon nicht gefunden wurde
    +
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/index-files/index-19.html b/doc/0.1.4/de_public/index-files/index-19.html new file mode 100644 index 0000000..8e6cda1 --- /dev/null +++ b/doc/0.1.4/de_public/index-files/index-19.html @@ -0,0 +1,305 @@ + + + + + +T-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    T

    +
    +
    TEXT_FIELD_ROW - bitchanger.gui.views.AlphaNumGridView.ConstraintType
    +
    +
    Konstante für eine Zeile, die Textfelder enthält
    +
    +
    TEXTFIELD_1_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines Textfeldes mit drei Punkten und einem Unterstrich oder null, wenn das Icon nicht gefunden wurde
    +
    +
    TEXTFIELD_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines Textfeldes mit vier Punkten oder null, wenn das Icon nicht gefunden wurde
    +
    +
    textFieldMap - Variable in class bitchanger.gui.controller.ControllerBase
    +
    +
    Map, die alle Textfelder des gekapselten Controllables enthält
    +
    +
    TF_ANY_KEY - Static variable in class bitchanger.gui.views.ConverterView
    +
    +
    Schlüsselwort, mit das Textfeld für die Darstellung zu einer wählbaren Basis in der Map tfMap gespeichert wird
    +
    +
    TF_BIN_KEY - Static variable in class bitchanger.gui.views.ConverterView
    +
    +
    Schlüsselwort, mit das Textfeld für die binäre Darstellung in der Map tfMap gespeichert wird
    +
    +
    TF_DEC_KEY - Static variable in class bitchanger.gui.views.ConverterView
    +
    +
    Schlüsselwort, mit das Textfeld für die dezimale Darstellung in der Map tfMap gespeichert wird
    +
    +
    TF_HEX_KEY - Static variable in class bitchanger.gui.views.ConverterView
    +
    +
    Schlüsselwort, mit das Textfeld für die hexadezimale Darstellung in der Map tfMap gespeichert wird
    +
    +
    TF_KEYS - Static variable in class bitchanger.gui.views.ConverterView
    +
    +
    Array, das die Schlüsselwörter definiert, mit denen die Textfelder in der Map tfMap gespeichert werden
    +
    +
    TF_OCT_KEY - Static variable in class bitchanger.gui.views.ConverterView
    +
    +
    Schlüsselwort, mit das Textfeld für die oktale Darstellung in der Map tfMap gespeichert wird
    +
    +
    tfAnyKey - Variable in class bitchanger.gui.views.ConverterView
    +
    +
    Schlüsselwort, mit das Textfeld für die Darstellung zu einer wählbaren Basis in der Map tfMap gespeichert wird
    +
    +
    tfBinKey - Variable in class bitchanger.gui.views.ConverterView
    +
    +
    Schlüsselwort, mit das Textfeld für die binäre Darstellung in der Map tfMap gespeichert wird
    +
    +
    tfColumn - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Konstante, die die Spalte der GridPane definiert, in der die Textfelder positioniert werden
    +
    +
    tfDecKey - Variable in class bitchanger.gui.views.ConverterView
    +
    +
    Schlüsselwort, mit das Textfeld für die dezimale Darstellung in der Map tfMap gespeichert wird
    +
    +
    tfDecKey - Variable in class bitchanger.gui.views.IEEEView
    +
    +
    Schlüsselwort, mit das Textfeld für die dezimale Darstellung in der Map tfMap gespeichert wird
    +
    +
    tfHexKey - Variable in class bitchanger.gui.views.ConverterView
    +
    +
    Schlüsselwort, mit das Textfeld für die hexadezimale Darstellung in der Map tfMap gespeichert wird
    +
    +
    tfIEEEKey - Variable in class bitchanger.gui.views.IEEEView
    +
    +
    Schlüsselwort, mit das Textfeld für die IEEE Darstellung in der Map tfMap gespeichert wird
    +
    +
    tfKeys - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Array, das die Schlüsselwörter definiert, mit denen die Textfelder in der Map tfMap gespeichert werden
    +
    +
    tfMaxHeightProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Property für die maximale Höhe der Textfelder in dieser View
    +
    +
    tfMinHeightProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Property für die minimale Höhe der Textfelder in dieser View
    +
    +
    tfOctKey - Variable in class bitchanger.gui.views.ConverterView
    +
    +
    Schlüsselwort, mit das Textfeld für die oktale Darstellung in der Map tfMap gespeichert wird
    +
    +
    toBaseString(int) - Method in interface bitchanger.calculations.ChangeableNumber
    +
    +
    Gibt die String-Darstellung dieser ChangeableNumber zu einer beliebigen Basis zurück.
    +
    +
    toBaseString(int) - Method in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Gibt die String-Darstellung dieser ChangeableNumber zu einer beliebigen Basis zurück.
    +
    +
    toBinString() - Method in interface bitchanger.calculations.ChangeableNumber
    +
    +
    Gibt die String-Darstellung dieser ChangeableNumber als binären String zurück.
    +
    +
    toBinString() - Method in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Gibt die String-Darstellung dieser ChangeableNumber als binären String zurück.
    +
    +
    toDecString() - Method in interface bitchanger.calculations.ChangeableNumber
    +
    +
    Gibt die String-Darstellung dieser ChangeableNumber als dezimalen String zurück.
    +
    +
    toDecString() - Method in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Gibt die String-Darstellung dieser ChangeableNumber als dezimalen String zurück.
    +
    +
    toHexString() - Method in interface bitchanger.calculations.ChangeableNumber
    +
    +
    Gibt die String-Darstellung dieser ChangeableNumber als hexadezimalen String zurück.
    +
    +
    toHexString() - Method in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Gibt die String-Darstellung dieser ChangeableNumber als hexadezimalen String zurück.
    +
    +
    toOctString() - Method in interface bitchanger.calculations.ChangeableNumber
    +
    +
    Gibt die String-Darstellung dieser ChangeableNumber als oktalen String zurück.
    +
    +
    toOctString() - Method in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Gibt die String-Darstellung dieser ChangeableNumber als oktalen String zurück.
    +
    +
    toString() - Method in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Gibt einen String zurück, der die hexadezimale, dezimale, oktale und + binäre Darstellung des eingeschlossenen Wertes enthält.
    +
    +
    TRASH_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines gefüllten Mülleimers oder null, wenn das Icon nicht gefunden wurde
    +
    +
    TRASH_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines Mülleimers oder null, wenn das Icon nicht gefunden wurde
    +
    +
    TRASH_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines Mülleimers in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
    +
    +
    TRASH_X_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines gefüllten Mülleimers mit 'X'-Symbol oder null, wenn das Icon nicht gefunden wurde
    +
    +
    TRASH_X_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines Mülleimers mit 'X'-Symbol oder null, wenn das Icon nicht gefunden wurde
    +
    +
    TriConsumer<T,​U,​V> - Interface in bitchanger.util
    +
    +
    Repräsentiert eine Operation, die drei Übergabeparameter akzeptiert und keine Rückgabe hat.
    +
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/index-files/index-2.html b/doc/0.1.4/de_public/index-files/index-2.html new file mode 100644 index 0000000..8561750 --- /dev/null +++ b/doc/0.1.4/de_public/index-files/index-2.html @@ -0,0 +1,269 @@ + + + + + +B-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    B

    +
    +
    backspaceBtnKey - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Schlüsselwort, mit dem der Backspace-Button in der Map btnMap gespeichert wird
    +
    +
    BaseSpinner - Class in bitchanger.gui.controls
    +
    +
    Spinner, mit dem die Basis für ein Zahlensystem ausgewählt werden kann.
    +
    +
    BaseSpinner() - Constructor for class bitchanger.gui.controls.BaseSpinner
    +
    +
    Erzeugt einen BaseSpinner, bei dem die minimale und maximale einstellbare Basis durch die Konstanten + ConvertingNumbers.MIN_BASE und ConvertingNumbers.MAX_BASE gegeben sind.
    +
    +
    baseSpinnerKey - Variable in class bitchanger.gui.views.ConverterView
    +
    +
    Schlüsselwort, mit dem der Spinner für die beliebige Basis in der Map nodeMap gespeichert wird
    +
    +
    baseToDec(int, String) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Wandelt die übergebene Zahl value zur beliebigen Basis base in eine Zahl zur Basis 10 als double um.
    +
    +
    baseToDecString(int, String) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Wandelt die übergebene Zahl value zur beliebigen Basis base in eine Zahl zur Basis 10 in der String-Darstellung um.
    +
    +
    baseToDecString(int, String, char) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Wandelt die übergebene Zahl value zur beliebigen Basis base in eine Zahl zur Basis 10 in der String-Darstellung um.
    +
    +
    BasicMenuBar - Class in bitchanger.gui.controls
    +
    +
    Basis Menüleiste, die die allgemein benötigten Menüpunkte enthält.
    +
    +
    BasicMenuBar() - Constructor for class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Erzeugt eine neue BasicMenuBar mit allen MenuItems.
    +
    +
    BasicMenuBar(ControllableApplication) - Constructor for class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Erzeugt eine neue BasicMenuBar mit allen MenuItems, die bereits mit den Basisfunktionen belegt sind.
    +
    +
    BasicMenuController - Class in bitchanger.gui.controller
    +
     
    +
    BasicMenuController(BasicMenuBar, ControllableApplication) - Constructor for class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    bitchanger.calculations - package bitchanger.calculations
    +
    +
    Bietet alle Klassen, die zur Berechnung der Daten benötigt werden.
    +
    +
    bitchanger.gui.controller - package bitchanger.gui.controller
    +
    +
    Stellt Controller bereit, die den Views eine Funktion geben.
    +
    +
    bitchanger.gui.controls - package bitchanger.gui.controls
    +
    +
    Stellt angepasste Bedienelemente und Funktionen für die Benutzeroberfläche zur Verfügung
    +
    +
    bitchanger.gui.views - package bitchanger.gui.views
    +
    +
    Bietet verschiedene Views, die auf einer graphischen Oberfläche präsentiert werden können
    +
    +
    bitchanger.main - package bitchanger.main
    +
    +
    Beinhaltet den Launcher mit der Main-Methode und die JavaFX Applikation zum starten der grafischen Oberfläche.
    +
    +
    bitchanger.preferences - package bitchanger.preferences
    +
    +
    Mit den Klassen aus diesem Package können alle Komponenten auf globale Einstellungen zugreifen und diese verändern.
    +
    +
    bitchanger.util - package bitchanger.util
    +
    +
    Enthält Klassen mit allgemeinen und klassenübergreifend benötigten Methoden.
    +
    +
    BitchangerLauncher - Class in bitchanger.main
    +
    +
    Diese Klasse enthält die Main-Methode, die der Einstiegspunkt für die Applikation ist.
    +
    +
    BitchangerLauncher() - Constructor for class bitchanger.main.BitchangerLauncher
    +
     
    +
    btnMaxHeigthProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Property für die maximale Höhe der Buttons in dieser View
    +
    +
    btnMaxWidthProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Property für die maximale Breite der Buttons in dieser View
    +
    +
    btnMinHeigthProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Property für die minimale Höhe der Buttons in dieser View
    +
    +
    btnMinWidthProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Property für die minimale Breite der Buttons in dieser View
    +
    +
    btnSpacingProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Property für den Abstand der Buttons in der GridPane
    +
    +
    buildScenegraph() - Method in class bitchanger.gui.views.ViewBase
    +
    +
    Konstruiert den Scenegraphen mit der Methode ViewBase.createScenegraph() und gibt den Bedienelementen mit einem + Controller eine Funktion, falls ein passender Controller mit Controller.register(Class, Class) registriert + wurde.
    +
    +
    BUTTON_COLUMN - bitchanger.gui.views.AlphaNumGridView.ConstraintType
    +
    +
    Konstante für eine Spalte, die Buttons enthält
    +
    +
    BUTTON_ROW - bitchanger.gui.views.AlphaNumGridView.ConstraintType
    +
    +
    Konstante für eine Zeile, die Buttons enthält
    +
    +
    buttonMap - Variable in class bitchanger.gui.controller.ControllerBase
    +
    +
    Map, die alle Buttons des gekapselten Controllables enthält
    +
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/index-files/index-20.html b/doc/0.1.4/de_public/index-files/index-20.html new file mode 100644 index 0000000..80b9484 --- /dev/null +++ b/doc/0.1.4/de_public/index-files/index-20.html @@ -0,0 +1,179 @@ + + + + + +U-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    U

    +
    +
    UnfocusedButton - Class in bitchanger.gui.controls
    +
    +
    Button, der beim Klick nicht den Fokus erhält und als Grundform ein Rechteck ohne abgerundete Ecken besitzt.
    +
    +
    UnfocusedButton() - Constructor for class bitchanger.gui.controls.UnfocusedButton
    +
    +
    Erstellt einen UnfocusedButton mit einem leeren String als Beschriftung
    +
    +
    UnfocusedButton(String) - Constructor for class bitchanger.gui.controls.UnfocusedButton
    +
    +
    Erstellt einen UnfocusedButton mit einem spezifischen String als Beschriftung
    +
    +
    UnfocusedButton(String, Node) - Constructor for class bitchanger.gui.controls.UnfocusedButton
    +
    +
    Erstellt einen UnfocusedButton mit einem spezifischen String und einem Icon als Beschriftung
    +
    +
    UnfocusedButton(Node) - Constructor for class bitchanger.gui.controls.UnfocusedButton
    +
     
    +
    UNKNOWN - bitchanger.preferences.Style
    +
    +
    Konstante für ein unbekanntes Layout
    +
    +
    useClearAndBackBtn - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    true, wenn die Buttons AlphaNumGridView.clearBtnKey und AlphaNumGridView.backspaceBtnKey in der Zeile + AlphaNumGridView.firstKeyBtnRow über der Tastaturmatrix in der GridPane positioniert werden sollen.
    +
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/index-files/index-21.html b/doc/0.1.4/de_public/index-files/index-21.html new file mode 100644 index 0000000..e6251d2 --- /dev/null +++ b/doc/0.1.4/de_public/index-files/index-21.html @@ -0,0 +1,277 @@ + + + + + +V-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    V

    +
    +
    ValueButton - Class in bitchanger.gui.controls
    +
    +
    UnfocusedButton mit einer zusätzlichen Property für die Einstellung einer Basis.
    +
    +
    ValueButton() - Constructor for class bitchanger.gui.controls.ValueButton
    +
    +
    Erstellt einen ValueButton mit einem leeren String als Beschriftung
    +
    +
    ValueButton(String) - Constructor for class bitchanger.gui.controls.ValueButton
    +
    +
    Erstellt einen ValueButton mit einem spezifischen String als Beschriftung
    +
    +
    ValueButton(String, Node) - Constructor for class bitchanger.gui.controls.ValueButton
    +
    +
    Erstellt einen ValueButton mit einem spezifischen String und einem Icon als Beschriftung
    +
    +
    ValueField - Class in bitchanger.gui.controls
    +
    +
    TextFeld, in dem eine Zahl zu einem bestimmten Zahlensystem eingegeben werden kann.
    +
    +
    ValueField() - Constructor for class bitchanger.gui.controls.ValueField
    +
    +
    Erzeugt ein neues ValueField mit leerem Text und der Basis 10
    +
    +
    ValueField(int) - Constructor for class bitchanger.gui.controls.ValueField
    +
    +
    Erzeugt ein neues ValueField mit leerem Text und der übergebenen Basis
    +
    +
    ValueField(String) - Constructor for class bitchanger.gui.controls.ValueField
    +
    +
    Erzeugt ein neues ValueField mit dem übergebenen Text als Inhalt und der Basis 10
    +
    +
    ValueField(String, int) - Constructor for class bitchanger.gui.controls.ValueField
    +
    +
    Erzeugt ein neues ValueField mit dem übergebenen Text als Inhalt und der übergebenen Basis
    +
    +
    valueOf(String) - Static method in enum bitchanger.gui.controls.InformationDialog.InformationType
    +
    +
    Returns the enum constant of this type with the specified name.
    +
    +
    valueOf(String) - Static method in enum bitchanger.gui.views.AlphaNumGridView.ConstraintType
    +
    +
    Returns the enum constant of this type with the specified name.
    +
    +
    valueOf(String) - Static method in enum bitchanger.preferences.Comma
    +
    +
    Returns the enum constant of this type with the specified name.
    +
    +
    valueOf(String) - Static method in enum bitchanger.preferences.Style
    +
    +
    Returns the enum constant of this type with the specified name.
    +
    +
    values() - Static method in enum bitchanger.gui.controls.InformationDialog.InformationType
    +
    +
    Returns an array containing the constants of this enum type, in +the order they are declared.
    +
    +
    values() - Static method in enum bitchanger.gui.views.AlphaNumGridView.ConstraintType
    +
    +
    Returns an array containing the constants of this enum type, in +the order they are declared.
    +
    +
    values() - Static method in enum bitchanger.preferences.Comma
    +
    +
    Returns an array containing the constants of this enum type, in +the order they are declared.
    +
    +
    values() - Static method in enum bitchanger.preferences.Style
    +
    +
    Returns an array containing the constants of this enum type, in +the order they are declared.
    +
    +
    version - Variable in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    VERSION - bitchanger.gui.controls.InformationDialog.InformationType
    +
     
    +
    VERSION - Static variable in class bitchanger.main.PrimaryFXApp
    +
    +
    Aktuelle Version des Bitchangers
    +
    +
    vgapProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Property für den vertikalen Abstand der GridPane im Center
    +
    +
    VIEW_MENU_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Schlüsselwort, mit dem das Menu "Fenster" in der Map BasicMenuBar.menuItemMap abgelegt ist
    +
    +
    VIEW_MOVE_TO_SCREEN_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Schlüsselwort, mit dem das MenuItem "Auf Monitor bewegen" in der Map BasicMenuBar.menuItemMap abgelegt ist
    +
    +
    VIEW_SHOW_FULLSCREEN_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Schlüsselwort, mit dem das CheckMenuItem "Vollbild" in der Map BasicMenuBar.menuItemMap abgelegt ist
    +
    +
    VIEW_STYLE_DARK_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Schlüsselwort, mit dem das MenuItem "Dunkel" in der Map BasicMenuBar.menuItemMap abgelegt ist
    +
    +
    VIEW_STYLE_LIGHT_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Schlüsselwort, mit dem das MenuItem "Hell" in der Map BasicMenuBar.menuItemMap abgelegt ist
    +
    +
    VIEW_STYLE_MENU_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Schlüsselwort, mit dem das Menu "Stil" in der Map BasicMenuBar.menuItemMap abgelegt ist
    +
    +
    Viewable - Interface in bitchanger.gui.views
    +
    +
    Die Schnittstelle Viewable definiert die Basis für eine View.
    +
    +
    ViewBase<T extends javafx.scene.Parent> - Class in bitchanger.gui.views
    +
    +
    Basis-Klasse für alle View-Klassen, die das Interface Viewable implementieren und mit einem + Controller eine Funktion erhalten.
    +
    +
    ViewBase(T) - Constructor for class bitchanger.gui.views.ViewBase
    +
    +
    Erzeugt eine neue View, die eine neue Scene mit dem übergebenen Wurzelknoten root kapselt.
    +
    +
    ViewBase(T, boolean) - Constructor for class bitchanger.gui.views.ViewBase
    +
    +
    Erzeugt eine neue View, die eine neue Scene mit dem übergebenen Wurzelknoten root kapselt.
    +
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/index-files/index-22.html b/doc/0.1.4/de_public/index-files/index-22.html new file mode 100644 index 0000000..0d4f8fa --- /dev/null +++ b/doc/0.1.4/de_public/index-files/index-22.html @@ -0,0 +1,172 @@ + + + + + +W-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    W

    +
    +
    WHITESPACE_ROW - bitchanger.gui.views.AlphaNumGridView.ConstraintType
    +
    +
    Konstante für eine Zeile, die Weißraum enthält
    +
    +
    whiteSpaceHeigthProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Property für die Höhe der Zeilen zwischen den Textfeldern und Buttons
    +
    +
    WINDOW_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines Programmfensters oder null, wenn das Icon nicht gefunden wurde
    +
    +
    WINDOW_THIN_2_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons mit zwei Programmfenstern im dünnen Stil oder null, wenn das Icon nicht gefunden wurde
    +
    +
    WINDOW_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines Programmfensters in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
    +
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/index-files/index-23.html b/doc/0.1.4/de_public/index-files/index-23.html new file mode 100644 index 0000000..1a2944c --- /dev/null +++ b/doc/0.1.4/de_public/index-files/index-23.html @@ -0,0 +1,200 @@ + + + + + +X-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    X

    +
    +
    X_MARK_1_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines 'X'-Symbols oder null, wenn das Icon nicht gefunden wurde
    +
    +
    X_MARK_2_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines 'X'-Symbols in einem gefüllten Quadrat oder null, wenn das Icon nicht gefunden wurde
    +
    +
    X_MARK_ARROW_LEFT_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines gefüllten Löschen-Symbols mit 'X' oder null, wenn das Icon nicht gefunden wurde
    +
    +
    X_MARK_ARROW_LEFT_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines Löschen-Symbols mit 'X' oder null, wenn das Icon nicht gefunden wurde
    +
    +
    X_MARK_CIRCLE_1_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines 'X'-Symbols in einem gefüllten Kreis oder null, wenn das Icon nicht gefunden wurde
    +
    +
    X_MARK_CIRCLE_1_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines 'X'-Symbols in einem Kreis oder null, wenn das Icon nicht gefunden wurde
    +
    +
    X_MARK_CIRCLE_2_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines 'X'-Symbols in einem gefüllten Kreis oder null, wenn das Icon nicht gefunden wurde
    +
    +
    X_MARK_CIRCLE_2_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines 'X'-Symbols in einem Kreis oder null, wenn das Icon nicht gefunden wurde
    +
    +
    X_MARK_CIRCLE_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines 'X'-Symbols in einem Kreis in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
    +
    +
    X_MARK_SQUARE_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines 'X'-Symbols in einem gefüllten Quadrat oder null, wenn das Icon nicht gefunden wurde
    +
    +
    X_MARK_SQUARE_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines 'X'-Symbols in einem Quadrat oder null, wenn das Icon nicht gefunden wurde
    +
    +
    X_MARK_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines 'X'-Symbols in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
    +
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/index-files/index-24.html b/doc/0.1.4/de_public/index-files/index-24.html new file mode 100644 index 0000000..1e86140 --- /dev/null +++ b/doc/0.1.4/de_public/index-files/index-24.html @@ -0,0 +1,176 @@ + + + + + +Z-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    Z

    +
    +
    ZERO_BTN_KEY - Static variable in class bitchanger.gui.controls.AlphaNumKeys
    +
    +
    Schlüsselwort für den Button, der die Null repräsentiert
    +
    +
    zeroBtnKey - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Schlüsselwort für den Button, der die Null repräsentiert
    +
    +
    ZOOM_IN_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons einer Lupe mit '+' oder null, wenn das Icon nicht gefunden wurde
    +
    +
    ZOOM_IN_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons einer Lupe mit '+' in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
    +
    +
    ZOOM_OUT_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons einer Lupe mit '-' oder null, wenn das Icon nicht gefunden wurde
    +
    +
    ZOOM_OUT_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons einer Lupe mit '-' in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
    +
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/index-files/index-3.html b/doc/0.1.4/de_public/index-files/index-3.html new file mode 100644 index 0000000..106eb2c --- /dev/null +++ b/doc/0.1.4/de_public/index-files/index-3.html @@ -0,0 +1,316 @@ + + + + + +C-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    C

    +
    +
    Calculable - Interface in bitchanger.calculations
    +
     
    +
    CALCULATOR_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines Taschenrechners, gefüllt oder null, wenn das Icon nicht gefunden wurde
    +
    +
    CALCULATOR_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines Taschenrechners oder null, wenn das Icon nicht gefunden wurde
    +
    +
    CALCULATOR_SYMBOLS_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons mit Rechensymbolen, gefüllt oder null, wenn das Icon nicht gefunden wurde
    +
    +
    CALCULATOR_SYMBOLS_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons mit Rechensymbolen oder null, wenn das Icon nicht gefunden wurde
    +
    +
    CALCULATOR_VIEW_KEY - Static variable in class bitchanger.main.PrimaryFXApp
    +
    +
    Schlüsselwort, mit dem über PrimaryFXApp.getViewable(String) auf die CalculatorView zugegriffen werden kann
    +
    +
    CalculatorView - Class in bitchanger.gui.views
    +
     
    +
    CalculatorView() - Constructor for class bitchanger.gui.views.CalculatorView
    +
     
    +
    center - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Tabelle im Center von root, in der alle Controls positioniert werden
    +
    +
    ChangeableNumber - Interface in bitchanger.calculations
    +
    +
    Schnittstelle, die Methoden definiert, um eine Zahl aus einem beliebigen Zahlensystem + in beliebige andere Zahlensysteme umzuwandeln
    +
    +
    changeView(Viewable) - Method in interface bitchanger.gui.controller.ControllableApplication
    +
    +
    Wechselt die Scene der primaryStage zu Scene des übergebenen Viewable
    +
    +
    clearBtnKey - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Schlüsselwort, mit dem der Löschen-Button (AC) in der Map btnMap gespeichert wird
    +
    +
    COLUMN_COUNT - Static variable in class bitchanger.gui.controls.AlphaNumKeys
    +
    +
    Konstante, die die Anzahl der Spalten dieser Tastaturmatrix enthält
    +
    +
    Comma - Enum in bitchanger.preferences
    +
    +
    Aufzählung der Wrapper-Klasse Comma, die das Zeichen für ein Komma repräsentiert.
    +
    +
    COMMA_BTN_KEY - Static variable in class bitchanger.gui.controls.AlphaNumKeys
    +
    +
    Schlüsselwort für den Komma-Button
    +
    +
    COMMA_DE - bitchanger.preferences.Comma
    +
    +
    Konstante, die das deutsche Komma (',') repräsentiert
    +
    +
    COMMA_EN - bitchanger.preferences.Comma
    +
    +
    Konstante, die das englische Komma ('.') repräsentiert
    +
    +
    commaBtnKey - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Schlüsselwort für den Komma-Button
    +
    +
    commaProperty - Variable in class bitchanger.preferences.Preferences
    +
    +
    Property für das Kommazeichen
    +
    +
    controllable - Variable in class bitchanger.gui.controller.ControllerBase
    +
    +
    gekapseltes Controllable, dem durch diesen Controller eine Funktion gegeben wird
    +
    +
    Controllable - Interface in bitchanger.gui.controller
    +
    +
    Schnittstelle, die Methoden definiert, um eine View mit einem Controller zu verbinden.
    +
    +
    ControllableApplication - Interface in bitchanger.gui.controller
    +
    +
    Schnittstelle, die Methoden definiert, um eine Application mit einem Controller zu verbinden.
    +
    +
    controller - Variable in class bitchanger.gui.views.ViewBase
    +
    +
    Controller, der die Funktion zu den Bedienelementen hinzufügt.
    +
    +
    Controller - Interface in bitchanger.gui.controller
    +
    +
    Schnittstelle, die einen Controller beschreibt.
    +
    +
    ControllerBase<T extends Controllable> - Class in bitchanger.gui.controller
    +
    +
    Basis für einen Controller, der einer Instanz von Controllable (z.B. eine View) eine Funktion gibt.
    +
    +
    ControllerBase(T) - Constructor for class bitchanger.gui.controller.ControllerBase
    +
    +
    Kapselt das übergebene Controllable und initialisiert die Maps mit den Bedienelementen mit Referenzen + auf die zugehörigen Maps des Controllables.
    +
    +
    CONVERTER_VIEW_KEY - Static variable in class bitchanger.main.PrimaryFXApp
    +
    +
    Schlüsselwort, mit dem über PrimaryFXApp.getViewable(String) auf die ConverterView zugegriffen werden kann
    +
    +
    ConverterController - Class in bitchanger.gui.controller
    +
    +
    Controller, der die Funktion für eine ConverterView bereitstellt.
    +
    +
    ConverterController(ConverterView) - Constructor for class bitchanger.gui.controller.ConverterController
    +
    +
    Konstruiert einen neuen Controller für eine ConverterView und verknüpft die benötigten Attribute mit + Referenzen auf die Bedienelemente aus der ConverterView.
    +
    +
    ConverterMenuBar - Class in bitchanger.gui.controls
    +
     
    +
    ConverterMenuBar() - Constructor for class bitchanger.gui.controls.ConverterMenuBar
    +
     
    +
    ConverterMenuBar(ControllableApplication) - Constructor for class bitchanger.gui.controls.ConverterMenuBar
    +
     
    +
    ConverterMenuController - Class in bitchanger.gui.controller
    +
     
    +
    ConverterMenuController(BasicMenuBar, ControllableApplication) - Constructor for class bitchanger.gui.controller.ConverterMenuController
    +
     
    +
    ConverterView - Class in bitchanger.gui.views
    +
    +
    View, die die Scene für die Umwandlung von Zahlensystemen enthält.
    +
    +
    ConverterView() - Constructor for class bitchanger.gui.views.ConverterView
    +
    +
    Erzeugt eine neue ConverterView mit vollständigem Scenegraphen und initialisiert die Funktionen + der Bedienelemente mit einem ConverterController.
    +
    +
    ConvertingNumbers - Class in bitchanger.calculations
    +
    +
    Die Klasse ConvertingNumbers enthält Methoden zum Umwandeln von Zahlen mit verschiedenen Zahlensystemen.
    +
    +
    COPYRIGHT_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons mit dem Copyright-Symbol, gefüllt oder null, wenn das Icon nicht gefunden wurde
    +
    +
    COPYRIGHT_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons mit dem Copyright-Symbol oder null, wenn das Icon nicht gefunden wurde
    +
    +
    createScenegraph() - Method in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Erstellt den Scenegraphen und fügt diesen dem Wurzelknoten hinzu.
    +
    +
    createScenegraph() - Method in class bitchanger.gui.views.ConverterView
    +
    +
    Erstellt den Scenegraphen und fügt diesen dem Wurzelknoten hinzu.
    +
    +
    createScenegraph() - Method in class bitchanger.gui.views.ViewBase
    +
    +
    Methode, die den Scenegraphen konstruiert.
    +
    +
    currentViewProperty - Variable in class bitchanger.main.PrimaryFXApp
    +
    +
    Property für die aktuell im Fenster dargestellte View
    +
    +
    CUSTOM_PREFERENCES - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort der Benutzereinstellungen beim letzten Schließen des Programms oder null, wenn die Datei nicht gefunden wurde
    +
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/index-files/index-4.html b/doc/0.1.4/de_public/index-files/index-4.html new file mode 100644 index 0000000..0cd4ca7 --- /dev/null +++ b/doc/0.1.4/de_public/index-files/index-4.html @@ -0,0 +1,183 @@ + + + + + +D-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    D

    +
    +
    DARK - bitchanger.preferences.Style
    +
    +
    Konstante für ein dunkles Layout
    +
    +
    DARK_CSS - Static variable in class bitchanger.util.Resources
    +
    +
    Pfad zum Stylesheet für die dunkle Darstellung oder null, wenn das CSS nicht gefunden wurde
    +
    +
    decToBase(int, String) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Wandelt die übergebene Zahl decValue zur Basis 10 in eine Zahl zur beliebigen Basis newBase in der String-Darstellung um.
    +
    +
    decToBase(int, String, char) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Wandelt die übergebene Zahl decValue zur Basis 10 in eine Zahl zur beliebigen Basis newBase in der String-Darstellung um.
    +
    +
    decToBase(int, String, char, int) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Wandelt die übergebene Zahl decValue zur Basis 10 in eine Zahl zur beliebigen Basis newBase in der String-Darstellung um.
    +
    +
    decToBaseBlocks(int, String, char, int) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Wandelt die übergebene Zahl decValue zur Basis 10 in eine Zahl zur beliebigen Basis newBase in der String-Darstellung um + und unterteilt die Zahl in Blöcke der gewünschten Länge.
    +
    +
    DEFAULT_GRAPHIC_SCALE_FACTOR - Static variable in class bitchanger.gui.controls.UnfocusedButton
    +
     
    +
    DEFAULT_PREFERENCES - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort der Standardeinstellungen des Programms oder null, wenn die Datei nicht gefunden wurde
    +
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/index-files/index-5.html b/doc/0.1.4/de_public/index-files/index-5.html new file mode 100644 index 0000000..58e1413 --- /dev/null +++ b/doc/0.1.4/de_public/index-files/index-5.html @@ -0,0 +1,183 @@ + + + + + +E-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    E

    +
    +
    EMPTY_BUTTON_MAP - Static variable in interface bitchanger.gui.controller.Controllable
    +
    +
    Leere und unveränderliche Map, die als Platzhalter verwendet werden kann, wenn ein Controllable keine + Buttons an seinen Controller übergeben muss
    +
    +
    EMPTY_NODE_MAP - Static variable in interface bitchanger.gui.controller.Controllable
    +
    +
    Leere und unveränderliche Map, die als Platzhalter verwendet werden kann, wenn ein Controllable keine + Nodes an seinen Controller übergeben muss
    +
    +
    EMPTY_TEXTFIELD_MAP - Static variable in interface bitchanger.gui.controller.Controllable
    +
    +
    Leere und unveränderliche Map, die als Platzhalter verwendet werden kann, wenn ein Controllable keine + Textfelder an seinen Controller übergeben muss
    +
    +
    ENTER_FULLSCREEN_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons zum Aktivieren des Vollbilds oder null, wenn das Icon nicht gefunden wurde
    +
    +
    ERASER_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines gefüllten Radiergummis oder null, wenn das Icon nicht gefunden wurde
    +
    +
    ERASER_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons eines Radiergummis oder null, wenn das Icon nicht gefunden wurde
    +
    +
    EXIT_FULLSCREEN_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons zum Deaktivieren des Vollbilds oder null, wenn das Icon nicht gefunden wurde
    +
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/index-files/index-6.html b/doc/0.1.4/de_public/index-files/index-6.html new file mode 100644 index 0000000..5fd2d0e --- /dev/null +++ b/doc/0.1.4/de_public/index-files/index-6.html @@ -0,0 +1,188 @@ + + + + + +F-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    F

    +
    +
    FIRST_COLUMN - bitchanger.gui.views.AlphaNumGridView.ConstraintType
    +
    +
    Konstante für die erste Spalte in einer GridPane
    +
    +
    firstColumnWidthProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Property für die Breite der ersten Spalte mit den Labels enthält.
    +
    +
    firstKeyBtnColumn - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Konstante, die die erste Spalte der GridPane definiert, in der die Tastatur-Buttons positioniert werden
    +
    +
    firstKeyBtnRow - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Konstante, die die erste Zeile der GridPane definiert, in der die Tastatur-Buttons positioniert werden
    +
    +
    firstLabelRow - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Konstante, die die erste Zeile der GridPane definiert, in der die Labels positioniert werden
    +
    +
    firstTFRow - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Konstante, die die erste Zeile der GridPane definiert, in der die Textfelder positioniert werden
    +
    +
    FRACTIONAL_PRECISION_INDICATOR - Static variable in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Indikator für Abgeschnittene Nachkommastellen bei der Umwandlung vom Zehnersystem in ein anderes, beliebiges Zahlensystem
    +
    +
    FULLSCREEN_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Icons zum Wechseln des Vollbilds in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
    +
    +
    FXUtils - Class in bitchanger.util
    +
    +
    Utility-Klasse zur allgemeinen Verarbeitung von Objekten, die zur Oberfläche gehören.
    +
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/index-files/index-7.html b/doc/0.1.4/de_public/index-files/index-7.html new file mode 100644 index 0000000..21b276f --- /dev/null +++ b/doc/0.1.4/de_public/index-files/index-7.html @@ -0,0 +1,310 @@ + + + + + +G-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    G

    +
    +
    generateMenuBar() - Method in class bitchanger.gui.views.ConverterView
    +
    generateMenuBar() - Method in interface bitchanger.gui.views.Viewable
    +
     
    +
    generateMenuBar(ControllableApplication) - Method in class bitchanger.gui.views.ConverterView
    +
    generateMenuBar(ControllableApplication) - Method in interface bitchanger.gui.views.Viewable
    +
     
    +
    get() - Method in enum bitchanger.preferences.Comma
    +
    +
    Gibt das repräsentierte Kommazeichen zurück
    +
    +
    getArrowButtons() - Method in class bitchanger.gui.controls.AlphaNumKeys
    +
    +
    Gibt die HBox mit den Buttons, mit denen durch die Tastatur gescrollt werden kann, zurück
    +
    +
    getBase() - Method in class bitchanger.gui.controls.ValueField
    +
    +
    Gibt den Wert der ValueField.baseProperty zurück
    +
    +
    getBaseProperty() - Method in class bitchanger.gui.controls.ValueButton
    +
    +
    Gibt den Wert der ValueButton.baseProperty zurück
    +
    +
    getBaseProperty() - Method in class bitchanger.gui.controls.ValueField
    +
    +
    Gibt die ValueField.baseProperty dieses ValueFields zurück
    +
    +
    getButtonMap() - Method in interface bitchanger.gui.controller.Controllable
    +
    +
    Gibt eine Map mit allen Buttons der View zurück.
    +
    +
    getButtonMap() - Method in class bitchanger.gui.controls.AlphaNumKeys
    +
    +
    Gibt eine Map mit allen Buttons der View zurück.
    +
    +
    getButtonMap() - Method in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Gibt eine Map mit allen Buttons der View zurück.
    +
    +
    getButtonMap() - Method in class bitchanger.gui.views.ViewBase
    +
    +
    Gibt eine Map mit allen Buttons der View zurück.
    +
    +
    getButtonMatrix() - Method in class bitchanger.gui.controls.AlphaNumKeys
    +
    +
    Gibt die Liste mit allen Nodes der Tastatur-Matrix zurück.
    +
    +
    getComma() - Method in class bitchanger.preferences.Preferences
    +
    +
    Gibt das eingestellte Kommazeichen zurück
    +
    +
    getCurrentViewProperty() - Method in interface bitchanger.gui.controller.ControllableApplication
    +
    +
    Gibt die CurrentViewProperty zurück
    +
    +
    getCurrentViewProperty() - Method in class bitchanger.main.PrimaryFXApp
    +
    +
    Gibt die CurrentViewProperty zurück
    +
    +
    getMaxHeigth() - Method in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Gibt die maximale Höhe der View an
    +
    +
    getMaxHeigth() - Method in interface bitchanger.gui.views.Viewable
    +
    +
    Gibt die maximale Höhe der View an
    +
    +
    getMaxWidth() - Method in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Gibt die maximale Breite der View an
    +
    +
    getMaxWidth() - Method in interface bitchanger.gui.views.Viewable
    +
    +
    Gibt die maximale Breite der View an
    +
    +
    getMinHeigth() - Method in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Gibt die minimale Höhe der View an
    +
    +
    getMinHeigth() - Method in interface bitchanger.gui.views.Viewable
    +
    +
    Gibt die minimale Höhe der View an
    +
    +
    getMinWidth() - Method in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Gibt die minimale Breite der View an
    +
    +
    getMinWidth() - Method in interface bitchanger.gui.views.Viewable
    +
    +
    Gibt die minimale Breite der View an
    +
    +
    getNodeMap() - Method in interface bitchanger.gui.controller.Controllable
    +
    +
    Gibt eine Map mit allen Elemente (Nodes) der View zurück, die keine Buttons oder Textfelder sind und im Controller benötigt werden.
    +
    +
    getNodeMap() - Method in class bitchanger.gui.controls.AlphaNumKeys
    +
    +
    Gibt eine Map mit allen Elemente (Nodes) der View zurück, die keine Buttons oder Textfelder sind und im Controller benötigt werden.
    +
    +
    getNodeMap() - Method in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Gibt eine Map mit allen Elemente (Nodes) der View zurück, die keine Buttons oder Textfelder sind und im Controller benötigt werden.
    +
    +
    getNodeMap() - Method in class bitchanger.gui.views.ViewBase
    +
    +
    Gibt eine Map mit allen Elemente (Nodes) der View zurück, die keine Buttons oder Textfelder sind und im Controller benötigt werden.
    +
    +
    getPrefs() - Static method in class bitchanger.preferences.Preferences
    +
    +
    Gibt die aktuellen Einstellungen zurück
    +
    +
    getPrimaryStage() - Method in interface bitchanger.gui.controller.ControllableApplication
    +
    +
    Returns the main application window
    +
    +
    getPrimaryStage() - Method in class bitchanger.main.PrimaryFXApp
    +
    +
    Returns the main application window
    +
    +
    getResourceAsExternalForm(String) - Static method in class bitchanger.util.Resources
    +
    +
    Sucht die Ressource mit gegebenem Namen und gibt die URL als String zurück.
    +
    +
    getResourceAsFile(String) - Static method in class bitchanger.util.Resources
    +
    +
    Sucht die Ressource mit gegebenem Namen und gibt diese als File zurück.
    +
    +
    getScene() - Method in interface bitchanger.gui.views.Viewable
    +
    +
    Gibt die repräsentierte Scene zurück
    +
    +
    getScene() - Method in class bitchanger.gui.views.ViewBase
    +
    +
    Gibt die repräsentierte Scene zurück
    +
    +
    getTextFieldMap() - Method in interface bitchanger.gui.controller.Controllable
    +
    +
    Gibt eine Map mit allen Textfelder der View zurück.
    +
    +
    getTextFieldMap() - Method in class bitchanger.gui.controls.AlphaNumKeys
    +
    +
    Gibt eine Map mit allen Textfelder der View zurück.
    +
    +
    getTextFieldMap() - Method in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Gibt eine Map mit allen Textfelder der View zurück.
    +
    +
    getTextFieldMap() - Method in class bitchanger.gui.views.ViewBase
    +
    +
    Gibt eine Map mit allen Textfelder der View zurück.
    +
    +
    getViewable(String) - Method in interface bitchanger.gui.controller.ControllableApplication
    +
    +
    Gibt die mit dem String key verknüpfte View zurück
    +
    +
    getViewable(String) - Method in class bitchanger.main.PrimaryFXApp
    +
    +
    Gibt die mit dem String key verknüpfte View zurück
    +
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/index-files/index-8.html b/doc/0.1.4/de_public/index-files/index-8.html new file mode 100644 index 0000000..ed90988 --- /dev/null +++ b/doc/0.1.4/de_public/index-files/index-8.html @@ -0,0 +1,174 @@ + + + + + +H-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    H

    +
    +
    hasPath() - Method in class bitchanger.gui.controls.SVGIcon
    +
     
    +
    HELP_ABOUT_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Schlüsselwort, mit dem das MenuItem "Über" in der Map BasicMenuBar.menuItemMap abgelegt ist
    +
    +
    HELP_MENU_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Schlüsselwort, mit dem das Menu "Hilfe" in der Map BasicMenuBar.menuItemMap abgelegt ist
    +
    +
    HELP_RESET_PREFS_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Schlüsselwort, mit dem das MenuItem "Einstellungen zurücksetzen" in der Map BasicMenuBar.menuItemMap abgelegt ist
    +
    +
    HELP_VERSION_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Schlüsselwort, mit dem das MenuItem "Version" in der Map BasicMenuBar.menuItemMap abgelegt ist
    +
    +
    hgapProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Property für den horizontalen Abstand der GridPane im Center
    +
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/index-files/index-9.html b/doc/0.1.4/de_public/index-files/index-9.html new file mode 100644 index 0000000..5fa0e53 --- /dev/null +++ b/doc/0.1.4/de_public/index-files/index-9.html @@ -0,0 +1,275 @@ + + + + + +I-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    I

    +
    +
    ICON_LIST - Static variable in class bitchanger.util.Resources
    +
    +
    Liste, die Speicherorte aller in dieser Klasse definierten Icons enthält
    +
    +
    IconFactory - Class in bitchanger.util
    +
    +
    Factory Klasse für das Erstellen von SVGIcons
    +
    +
    IDEA_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des gefüllten Idee Icons ("Glühbirne") oder null, wenn das Icon nicht gefunden wurde
    +
    +
    IDEA_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Idee Icons ("Glühbirne") oder null, wenn das Icon nicht gefunden wurde
    +
    +
    IDEA_SPEECH_BUBBLE_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Idee Icons in einer gefüllten Sprechblase oder null, wenn das Icon nicht gefunden wurde
    +
    +
    IDEA_SPEECH_BUBBLE_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Idee Icons in einer Sprechblase oder null, wenn das Icon nicht gefunden wurde
    +
    +
    IEEE_VIEW_KEY - Static variable in class bitchanger.main.PrimaryFXApp
    +
    +
    Schlüsselwort, mit dem über PrimaryFXApp.getViewable(String) auf die IEEEView zugegriffen werden kann
    +
    +
    IEEEController - Class in bitchanger.gui.controller
    +
     
    +
    IEEEController(IEEEView) - Constructor for class bitchanger.gui.controller.IEEEController
    +
     
    +
    IEEEMenuController - Class in bitchanger.gui.controller
    +
     
    +
    IEEEMenuController(BasicMenuBar, ControllableApplication, IEEEView) - Constructor for class bitchanger.gui.controller.IEEEMenuController
    +
     
    +
    IEEEView - Class in bitchanger.gui.views
    +
    +
    View, die die Scene für die Umwandlung zwischen dezimal Zahlen und der IEEE-Norm enthält.
    +
    +
    IEEEView() - Constructor for class bitchanger.gui.views.IEEEView
    +
    +
    Erzeugt eine neue IEEEView mit vollständigem Scenegraphen und initialisiert die Funktionen + der Bedienelemente mit einem IEEEController.
    +
    +
    indicateFractionalInaccuracy - Variable in class bitchanger.gui.controller.ConverterMenuController
    +
     
    +
    indicateFractionalPrecision() - Method in class bitchanger.preferences.Preferences
    +
    +
    Gibt den Wert der indicateFractionalPrecisionProperty zurück
    +
    +
    indicateFractionalPrecisionProperty - Variable in class bitchanger.preferences.Preferences
    +
    +
    Property für die Anzeige von abgebrochenen Nachkommastellen
    +
    +
    INFO_CIRCLE_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des gefüllten Info Icons oder null, wenn das Icon nicht gefunden wurde
    +
    +
    INFO_CIRCLE_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Info Icons oder null, wenn das Icon nicht gefunden wurde
    +
    +
    INFO_CIRCLE_SIMPLE_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des einfachen gefüllten Info Icons mit schlichtem 'i' oder null, wenn das Icon nicht gefunden wurde
    +
    +
    INFO_CIRCLE_SIMPLE_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Info Icons mit schlichtem 'i' oder null, wenn das Icon nicht gefunden wurde
    +
    +
    INFO_CIRCLE_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Info Icons mit schlichtem 'i' in dünnem Stil oder null, wenn das Icon nicht gefunden wurde
    +
    +
    INFO_SPEECH_BOX_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Info Icons in einer gefüllten "Sprechbox" oder null, wenn das Icon nicht gefunden wurde
    +
    +
    INFO_SPEECH_BOX_ICON - Static variable in class bitchanger.util.Resources
    +
    +
    Speicherort des Info Icons in einer "Sprechbox" oder null, wenn das Icon nicht gefunden wurde
    +
    +
    InformationDialog - Class in bitchanger.gui.controls
    +
     
    +
    InformationDialog() - Constructor for class bitchanger.gui.controls.InformationDialog
    +
     
    +
    InformationDialog(InformationDialog.InformationType) - Constructor for class bitchanger.gui.controls.InformationDialog
    +
     
    +
    InformationDialog.InformationType - Enum in bitchanger.gui.controls
    +
     
    +
    init() - Method in class bitchanger.gui.views.ViewBase
    +
    +
    Initialisierungsmethode.
    +
    +
    initControls() - Method in class bitchanger.gui.controller.AlphaNumKeysController
    +
    +
    Initialisiert alle benötigten Bedienelemente mit Referenzen aus den zur Verfügung stehenden Maps.
    +
    +
    initControls() - Method in class bitchanger.gui.controller.BasicMenuController
    +
    +
    Initialisiert alle benötigten Bedienelemente mit Referenzen aus den zur Verfügung stehenden Maps.
    +
    +
    initControls() - Method in class bitchanger.gui.controller.ControllerBase
    +
    +
    Initialisiert alle benötigten Bedienelemente mit Referenzen aus den zur Verfügung stehenden Maps.
    +
    +
    initControls() - Method in class bitchanger.gui.controller.ConverterController
    +
    +
    Initialisiert alle benötigten Bedienelemente mit Referenzen aus den zur Verfügung stehenden Maps.
    +
    +
    initControls() - Method in class bitchanger.gui.controller.ConverterMenuController
    +
    +
    Initialisiert alle benötigten Bedienelemente mit Referenzen aus den zur Verfügung stehenden Maps.
    +
    +
    initControls() - Method in class bitchanger.gui.controller.IEEEController
    +
    +
    Initialisiert alle benötigten Bedienelemente mit Referenzen aus den zur Verfügung stehenden Maps.
    +
    +
    isValueToBase(int, String) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Prüft, ob value eine Zahl zur geforderten Basis base repräsentiert.
    +
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/index.html b/doc/0.1.4/de_public/index.html new file mode 100644 index 0000000..0134c90 --- /dev/null +++ b/doc/0.1.4/de_public/index.html @@ -0,0 +1,198 @@ + + + + + +Overview + + + + + + + + + + + + + + + +
    + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Packages 
    PackageDescription
    bitchanger.calculations +
    Bietet alle Klassen, die zur Berechnung der Daten benötigt werden.
    +
    bitchanger.gui.controller +
    Stellt Controller bereit, die den Views eine Funktion geben.
    +
    bitchanger.gui.controls +
    Stellt angepasste Bedienelemente und Funktionen für die Benutzeroberfläche zur Verfügung
    +
    bitchanger.gui.views +
    Bietet verschiedene Views, die auf einer graphischen Oberfläche präsentiert werden können
    +
    bitchanger.main +
    Beinhaltet den Launcher mit der Main-Methode und die JavaFX Applikation zum starten der grafischen Oberfläche.
    +
    bitchanger.preferences +
    Mit den Klassen aus diesem Package können alle Komponenten auf globale Einstellungen zugreifen und diese verändern.
    +
    bitchanger.util +
    Enthält Klassen mit allgemeinen und klassenübergreifend benötigten Methoden.
    +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/jquery/external/jquery/jquery.js b/doc/0.1.4/de_public/jquery/external/jquery/jquery.js new file mode 100644 index 0000000..9b5206b --- /dev/null +++ b/doc/0.1.4/de_public/jquery/external/jquery/jquery.js @@ -0,0 +1,10364 @@ +/*! + * jQuery JavaScript Library v3.3.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2018-01-20T17:24Z + */ +( function( global, factory ) { + + "use strict"; + + 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 ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var document = window.document; + +var getProto = Object.getPrototypeOf; + +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 fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + return typeof obj === "function" && typeof obj.nodeType !== "number"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + + + + var preservedScriptAttributes = { + type: true, + src: true, + noModule: true + }; + + function DOMEval( code, doc, node ) { + doc = doc || document; + + var i, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + if ( node[ i ] ) { + script[ i ] = node[ i ]; + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.3.1", + + // 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.0 only + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // 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 all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : 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; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + 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(); + }, + + // 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" && !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 = Array.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && Array.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() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + + /* eslint-disable no-unused-vars */ + // See https://github.com/eslint/eslint/issues/6125 + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + DOMEval( code ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android <=4.0 only + 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 ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + 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 length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + 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, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.3 + * https://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-08-08 + */ +(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; + }, + + // 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 + // https://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 + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // 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( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "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 = /[+~]/, + + // 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 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + disabledAncestor = addCombinator( + function( elem ) { + return elem.disabled === true && ("form" in elem || "label" in elem); + }, + { dir: "parentNode", next: "legend" } + ); + +// 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 m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[i] = "#" + nid + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + 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 element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement("fieldset"); + + try { + return !!fn( el ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + // release memory in IE + el = 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 = arr.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 && + a.sourceIndex - b.sourceIndex; + + // 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 :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + disabledAncestor( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * 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, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9-11, Edge + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + if ( preferredDoc !== document && + (subWindow = document.defaultView) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( el ) { + el.className = "i"; + return !el.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( el ) { + el.appendChild( document.createComment("") ); + return !el.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + }); + + // ID filter and find + if ( support.getById ) { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + 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; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( (elem = elems[i++]) ) { + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // 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 ( typeof context.getElementsByClassName !== "undefined" && 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 https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( el ) { + // 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 + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // 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 + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.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 ( !el.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement("input"); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.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 ( el.querySelectorAll(":enabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll(":disabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( el ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[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 self-exclusive + // 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 === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === document || 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 === document ? -1 : + b === document ? 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 document; +}; + +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 && + !compilerCache[ expr + " " ] && + ( !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.escape = function( sel ) { + return (sel + "").replace( rcssescape, fcssescape ); +}; + +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, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + 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 + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && 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 ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + // Use previously-cached element index if available + if ( useCache ) { + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + // 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 ) { + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + uniqueCache[ 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": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( 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, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "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 ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator 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 ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( (oldCache = uniqueCache[ key ]) && + 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 + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + return false; + }; +} + +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 || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + if ( !context && elem.ownerDocument !== document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context || document, 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 ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + 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 only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + 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, + !context || 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( el ) { + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( el ) { + el.innerHTML = ""; + return el.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( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.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( el ) { + return el.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; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var 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; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + 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; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : 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 to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // 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 ( 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 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).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[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + 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.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 = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.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.uniqueSort( 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.uniqueSort( + 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 dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( nodeName( elem, "iframe" ) ) { + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return 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.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], 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" ? + 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, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + 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.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + 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; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).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 = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + 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( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + 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, + + // 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 ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !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 ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // 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 ) ) { + + return this.get( owner, 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, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = 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 getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +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, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.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 = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // 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 + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.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 dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.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 = dataPriv.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 rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + jQuery.contains( elem.ownerDocument, elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + +var 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; +}; + + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + 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 ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // Support: IE <=9 only + option: [ 1, "" ], + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
    " ], + col: [ 2, "", "
    " ], + tr: [ 2, "", "
    " ], + td: [ 3, "", "
    " ], + + _default: [ 0, "", "" ] +}; + +// Support: IE <=9 only +wrapMap.optgroup = wrapMap.option; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + 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 ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // 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 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // 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++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + 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; +} + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // 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: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; +} )(); +var documentElement = document.documentElement; + + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 only +// See #13393 for more info +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, 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 ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + 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 elem; + } + + 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 elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * 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 = dataPriv.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; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, 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 !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + 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 ); + } + } + } + + 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 = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + 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 data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + // Make a writable jQuery.Event from the native event object + var event = jQuery.event.fix( nativeEvent ); + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + handlers = ( dataPriv.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; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + 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.rnamespace || event.rnamespace.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, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + 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 && nodeName( this, "input" ) ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return 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; + } + } + } + } +}; + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, 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: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // 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 || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +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 mouseenter/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; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, 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 ); + } ); + } +} ); + + +var + + /* eslint-disable max-len */ + + // See https://github.com/eslint/eslint/issues/3229 + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, + + /* eslint-enable */ + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return 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 ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +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 ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.access( src ); + pdataCur = dataPriv.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 ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// 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; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + 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: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ 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 || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), doc, node ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1>" ); + }, + + 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: https://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; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + 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 ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + 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 domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, 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 domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + 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 = jQuery.htmlPrefilter( value ); + + 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 ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +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: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + div.style.position = "absolute"; + scrollboxSizeVal = div.offsetWidth === 36 || "absolute"; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // 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"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.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 <=9 - 11 only + // 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 ); + } + }; +} + + +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]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }, + + cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style; + +// Return a css property mapped to a potentially vendor prefixed property +function vendorPropName( name ) { + + // Shortcut for names that are not vendor prefixed + if ( name in emptyStyle ) { + return name; + } + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a property mapped along what jQuery.cssProps suggests or to +// a vendor prefixed property. +function finalPropName( name ) { + var ret = jQuery.cssProps[ name ]; + if ( !ret ) { + ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name; + } + return ret; +} + +function setPositiveNumber( elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + ) ); + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + val = curCSS( elem, dimension, styles ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox; + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + // Check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = valueIsBorderBox && + ( support.boxSizingReliable() || val === elem.style[ dimension ] ); + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + if ( val === "auto" || + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) { + + val = elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ]; + + // offsetWidth/offsetHeight provide border-box values + valueIsBorderBox = true; + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "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: { + "animationIterationCount": true, + "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: {}, + + // 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 = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( 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 = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // 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 was passed in, add the unit (except for certain CSS properties) + if ( type === "number" ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // 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 ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + 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 = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( 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 || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( i, dimension ) { + jQuery.cssHooks[ dimension ] = { + 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" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra && boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ); + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && support.scrollboxSize() === styles.position ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// 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 ( prefix !== "margin" ) { + 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 ( Array.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 ); + } +} ); + + +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 || jQuery.easing._default; + 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; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && 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.nodeType === 1 && + ( 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 only +// 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; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.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 = ( Animation.tweeners[ prop ] || [] ).concat( Animation.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 ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + 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(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + 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 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.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 = Animation.prefilters.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 only + // 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 there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, 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.notifyWith( elem, [ animation, 1, 0 ] ); + 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 = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + 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 ( 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( isHiddenWithinTree ).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 || dataPriv.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 = dataPriv.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 = dataPriv.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 = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + 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 ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/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 = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // 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 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 ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// 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, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/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 ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/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" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + 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 ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", 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. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + 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; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + 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 ( Array.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: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-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 + !option.disabled && + ( !option.parentNode.disabled || + !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 ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // 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 ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = 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( "." ) > -1 ) { + + // 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.rnamespace = 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 && !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() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && 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 ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !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; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + 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 ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + 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 ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = Date.now(); + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + 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 ( Array.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" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( 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, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.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( "&" ); +}; + +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(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* 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( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// 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( rnothtmlwhite ) || []; + + if ( 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: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + 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: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + 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": JSON.parse, + + // 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, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // 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 = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + 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 completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + 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 ); + + // 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 || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // 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 ( completed ) { + 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 + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // 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 || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // 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 ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.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 ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + + +jQuery._evalUrl = function( url ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + "throws": true + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( 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 ( 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 htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + 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 ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = 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(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + 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( "\r\n"; + +// inject VBScript +document.write(IEBinaryToArray_ByteStr_Script); + +global.JSZipUtils._getBinaryFromXHR = function (xhr) { + var binary = xhr.responseBody; + var byteMapping = {}; + for ( var i = 0; i < 256; i++ ) { + for ( var j = 0; j < 256; j++ ) { + byteMapping[ String.fromCharCode( i + (j << 8) ) ] = + String.fromCharCode(i) + String.fromCharCode(j); + } + } + var rawBytes = IEBinaryToArray_ByteStr(binary); + var lastChr = IEBinaryToArray_ByteStr_Last(binary); + return rawBytes.replace(/[\s\S]/g, function( match ) { + return byteMapping[match]; + }) + lastChr; +}; + +// enforcing Stuk's coding style +// vim: set shiftwidth=4 softtabstop=4: + +},{}]},{},[1]) +; diff --git a/doc/0.1.4/de_public/jquery/jszip-utils/dist/jszip-utils-ie.min.js b/doc/0.1.4/de_public/jquery/jszip-utils/dist/jszip-utils-ie.min.js new file mode 100644 index 0000000..93d8bc8 --- /dev/null +++ b/doc/0.1.4/de_public/jquery/jszip-utils/dist/jszip-utils-ie.min.js @@ -0,0 +1,10 @@ +/*! + +JSZipUtils - A collection of cross-browser utilities to go along with JSZip. + + +(c) 2014 Stuart Knightley, David Duponchel +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip-utils/master/LICENSE.markdown. + +*/ +!function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g\r\n";document.write(b),a.JSZipUtils._getBinaryFromXHR=function(a){for(var b=a.responseBody,c={},d=0;256>d;d++)for(var e=0;256>e;e++)c[String.fromCharCode(d+(e<<8))]=String.fromCharCode(d)+String.fromCharCode(e);var f=IEBinaryToArray_ByteStr(b),g=IEBinaryToArray_ByteStr_Last(b);return f.replace(/[\s\S]/g,function(a){return c[a]})+g}},{}]},{},[1]); diff --git a/doc/0.1.4/de_public/jquery/jszip-utils/dist/jszip-utils.js b/doc/0.1.4/de_public/jquery/jszip-utils/dist/jszip-utils.js new file mode 100644 index 0000000..775895e --- /dev/null +++ b/doc/0.1.4/de_public/jquery/jszip-utils/dist/jszip-utils.js @@ -0,0 +1,118 @@ +/*! + +JSZipUtils - A collection of cross-browser utilities to go along with JSZip. + + +(c) 2014 Stuart Knightley, David Duponchel +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip-utils/master/LICENSE.markdown. + +*/ +!function(e){"object"==typeof exports?module.exports=e():"function"==typeof define&&define.amd?define(e):"undefined"!=typeof window?window.JSZipUtils=e():"undefined"!=typeof global?global.JSZipUtils=e():"undefined"!=typeof self&&(self.JSZipUtils=e())}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o + +(c) 2014 Stuart Knightley, David Duponchel +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip-utils/master/LICENSE.markdown. + +*/ +!function(a){"object"==typeof exports?module.exports=a():"function"==typeof define&&define.amd?define(a):"undefined"!=typeof window?window.JSZipUtils=a():"undefined"!=typeof global?global.JSZipUtils=a():"undefined"!=typeof self&&(self.JSZipUtils=a())}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g + +(c) 2009-2016 Stuart Knightley +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/master/LICENSE.markdown. + +JSZip uses the library pako released under the MIT license : +https://github.com/nodeca/pako/blob/master/LICENSE +*/ + +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.JSZip = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o> 2; + enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); + enc3 = remainingBytes > 1 ? (((chr2 & 15) << 2) | (chr3 >> 6)) : 64; + enc4 = remainingBytes > 2 ? (chr3 & 63) : 64; + + output.push(_keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4)); + + } + + return output.join(""); +}; + +// public method for decoding +exports.decode = function(input) { + var chr1, chr2, chr3; + var enc1, enc2, enc3, enc4; + var i = 0, resultIndex = 0; + + var dataUrlPrefix = "data:"; + + if (input.substr(0, dataUrlPrefix.length) === dataUrlPrefix) { + // This is a common error: people give a data url + // (data:image/png;base64,iVBOR...) with a {base64: true} and + // wonders why things don't work. + // We can detect that the string input looks like a data url but we + // *can't* be sure it is one: removing everything up to the comma would + // be too dangerous. + throw new Error("Invalid base64 input, it looks like a data url."); + } + + input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + + var totalLength = input.length * 3 / 4; + if(input.charAt(input.length - 1) === _keyStr.charAt(64)) { + totalLength--; + } + if(input.charAt(input.length - 2) === _keyStr.charAt(64)) { + totalLength--; + } + if (totalLength % 1 !== 0) { + // totalLength is not an integer, the length does not match a valid + // base64 content. That can happen if: + // - the input is not a base64 content + // - the input is *almost* a base64 content, with a extra chars at the + // beginning or at the end + // - the input uses a base64 variant (base64url for example) + throw new Error("Invalid base64 input, bad content length."); + } + var output; + if (support.uint8array) { + output = new Uint8Array(totalLength|0); + } else { + output = new Array(totalLength|0); + } + + while (i < input.length) { + + enc1 = _keyStr.indexOf(input.charAt(i++)); + enc2 = _keyStr.indexOf(input.charAt(i++)); + enc3 = _keyStr.indexOf(input.charAt(i++)); + enc4 = _keyStr.indexOf(input.charAt(i++)); + + chr1 = (enc1 << 2) | (enc2 >> 4); + chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); + chr3 = ((enc3 & 3) << 6) | enc4; + + output[resultIndex++] = chr1; + + if (enc3 !== 64) { + output[resultIndex++] = chr2; + } + if (enc4 !== 64) { + output[resultIndex++] = chr3; + } + + } + + return output; +}; + +},{"./support":30,"./utils":32}],2:[function(require,module,exports){ +'use strict'; + +var external = require("./external"); +var DataWorker = require('./stream/DataWorker'); +var DataLengthProbe = require('./stream/DataLengthProbe'); +var Crc32Probe = require('./stream/Crc32Probe'); +var DataLengthProbe = require('./stream/DataLengthProbe'); + +/** + * Represent a compressed object, with everything needed to decompress it. + * @constructor + * @param {number} compressedSize the size of the data compressed. + * @param {number} uncompressedSize the size of the data after decompression. + * @param {number} crc32 the crc32 of the decompressed file. + * @param {object} compression the type of compression, see lib/compressions.js. + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the compressed data. + */ +function CompressedObject(compressedSize, uncompressedSize, crc32, compression, data) { + this.compressedSize = compressedSize; + this.uncompressedSize = uncompressedSize; + this.crc32 = crc32; + this.compression = compression; + this.compressedContent = data; +} + +CompressedObject.prototype = { + /** + * Create a worker to get the uncompressed content. + * @return {GenericWorker} the worker. + */ + getContentWorker : function () { + var worker = new DataWorker(external.Promise.resolve(this.compressedContent)) + .pipe(this.compression.uncompressWorker()) + .pipe(new DataLengthProbe("data_length")); + + var that = this; + worker.on("end", function () { + if(this.streamInfo['data_length'] !== that.uncompressedSize) { + throw new Error("Bug : uncompressed data size mismatch"); + } + }); + return worker; + }, + /** + * Create a worker to get the compressed content. + * @return {GenericWorker} the worker. + */ + getCompressedWorker : function () { + return new DataWorker(external.Promise.resolve(this.compressedContent)) + .withStreamInfo("compressedSize", this.compressedSize) + .withStreamInfo("uncompressedSize", this.uncompressedSize) + .withStreamInfo("crc32", this.crc32) + .withStreamInfo("compression", this.compression) + ; + } +}; + +/** + * Chain the given worker with other workers to compress the content with the + * given compresion. + * @param {GenericWorker} uncompressedWorker the worker to pipe. + * @param {Object} compression the compression object. + * @param {Object} compressionOptions the options to use when compressing. + * @return {GenericWorker} the new worker compressing the content. + */ +CompressedObject.createWorkerFrom = function (uncompressedWorker, compression, compressionOptions) { + return uncompressedWorker + .pipe(new Crc32Probe()) + .pipe(new DataLengthProbe("uncompressedSize")) + .pipe(compression.compressWorker(compressionOptions)) + .pipe(new DataLengthProbe("compressedSize")) + .withStreamInfo("compression", compression); +}; + +module.exports = CompressedObject; + +},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(require,module,exports){ +'use strict'; + +var GenericWorker = require("./stream/GenericWorker"); + +exports.STORE = { + magic: "\x00\x00", + compressWorker : function (compressionOptions) { + return new GenericWorker("STORE compression"); + }, + uncompressWorker : function () { + return new GenericWorker("STORE decompression"); + } +}; +exports.DEFLATE = require('./flate'); + +},{"./flate":7,"./stream/GenericWorker":28}],4:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); + +/** + * The following functions come from pako, from pako/lib/zlib/crc32.js + * released under the MIT license, see pako https://github.com/nodeca/pako/ + */ + +// Use ordinary array, since untyped makes no boost here +function makeTable() { + var c, table = []; + + for(var n =0; n < 256; n++){ + c = n; + for(var k =0; k < 8; k++){ + c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); + } + table[n] = c; + } + + return table; +} + +// Create table on load. Just 255 signed longs. Not a problem. +var crcTable = makeTable(); + + +function crc32(crc, buf, len, pos) { + var t = crcTable, end = pos + len; + + crc = crc ^ (-1); + + for (var i = pos; i < end; i++ ) { + crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF]; + } + + return (crc ^ (-1)); // >>> 0; +} + +// That's all for the pako functions. + +/** + * Compute the crc32 of a string. + * This is almost the same as the function crc32, but for strings. Using the + * same function for the two use cases leads to horrible performances. + * @param {Number} crc the starting value of the crc. + * @param {String} str the string to use. + * @param {Number} len the length of the string. + * @param {Number} pos the starting position for the crc32 computation. + * @return {Number} the computed crc32. + */ +function crc32str(crc, str, len, pos) { + var t = crcTable, end = pos + len; + + crc = crc ^ (-1); + + for (var i = pos; i < end; i++ ) { + crc = (crc >>> 8) ^ t[(crc ^ str.charCodeAt(i)) & 0xFF]; + } + + return (crc ^ (-1)); // >>> 0; +} + +module.exports = function crc32wrapper(input, crc) { + if (typeof input === "undefined" || !input.length) { + return 0; + } + + var isArray = utils.getTypeOf(input) !== "string"; + + if(isArray) { + return crc32(crc|0, input, input.length, 0); + } else { + return crc32str(crc|0, input, input.length, 0); + } +}; + +},{"./utils":32}],5:[function(require,module,exports){ +'use strict'; +exports.base64 = false; +exports.binary = false; +exports.dir = false; +exports.createFolders = true; +exports.date = null; +exports.compression = null; +exports.compressionOptions = null; +exports.comment = null; +exports.unixPermissions = null; +exports.dosPermissions = null; + +},{}],6:[function(require,module,exports){ +/* global Promise */ +'use strict'; + +// load the global object first: +// - it should be better integrated in the system (unhandledRejection in node) +// - the environment may have a custom Promise implementation (see zone.js) +var ES6Promise = null; +if (typeof Promise !== "undefined") { + ES6Promise = Promise; +} else { + ES6Promise = require("lie"); +} + +/** + * Let the user use/change some implementations. + */ +module.exports = { + Promise: ES6Promise +}; + +},{"lie":58}],7:[function(require,module,exports){ +'use strict'; +var USE_TYPEDARRAY = (typeof Uint8Array !== 'undefined') && (typeof Uint16Array !== 'undefined') && (typeof Uint32Array !== 'undefined'); + +var pako = require("pako"); +var utils = require("./utils"); +var GenericWorker = require("./stream/GenericWorker"); + +var ARRAY_TYPE = USE_TYPEDARRAY ? "uint8array" : "array"; + +exports.magic = "\x08\x00"; + +/** + * Create a worker that uses pako to inflate/deflate. + * @constructor + * @param {String} action the name of the pako function to call : either "Deflate" or "Inflate". + * @param {Object} options the options to use when (de)compressing. + */ +function FlateWorker(action, options) { + GenericWorker.call(this, "FlateWorker/" + action); + + this._pako = null; + this._pakoAction = action; + this._pakoOptions = options; + // the `meta` object from the last chunk received + // this allow this worker to pass around metadata + this.meta = {}; +} + +utils.inherits(FlateWorker, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +FlateWorker.prototype.processChunk = function (chunk) { + this.meta = chunk.meta; + if (this._pako === null) { + this._createPako(); + } + this._pako.push(utils.transformTo(ARRAY_TYPE, chunk.data), false); +}; + +/** + * @see GenericWorker.flush + */ +FlateWorker.prototype.flush = function () { + GenericWorker.prototype.flush.call(this); + if (this._pako === null) { + this._createPako(); + } + this._pako.push([], true); +}; +/** + * @see GenericWorker.cleanUp + */ +FlateWorker.prototype.cleanUp = function () { + GenericWorker.prototype.cleanUp.call(this); + this._pako = null; +}; + +/** + * Create the _pako object. + * TODO: lazy-loading this object isn't the best solution but it's the + * quickest. The best solution is to lazy-load the worker list. See also the + * issue #446. + */ +FlateWorker.prototype._createPako = function () { + this._pako = new pako[this._pakoAction]({ + raw: true, + level: this._pakoOptions.level || -1 // default compression + }); + var self = this; + this._pako.onData = function(data) { + self.push({ + data : data, + meta : self.meta + }); + }; +}; + +exports.compressWorker = function (compressionOptions) { + return new FlateWorker("Deflate", compressionOptions); +}; +exports.uncompressWorker = function () { + return new FlateWorker("Inflate", {}); +}; + +},{"./stream/GenericWorker":28,"./utils":32,"pako":59}],8:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var GenericWorker = require('../stream/GenericWorker'); +var utf8 = require('../utf8'); +var crc32 = require('../crc32'); +var signature = require('../signature'); + +/** + * Transform an integer into a string in hexadecimal. + * @private + * @param {number} dec the number to convert. + * @param {number} bytes the number of bytes to generate. + * @returns {string} the result. + */ +var decToHex = function(dec, bytes) { + var hex = "", i; + for (i = 0; i < bytes; i++) { + hex += String.fromCharCode(dec & 0xff); + dec = dec >>> 8; + } + return hex; +}; + +/** + * Generate the UNIX part of the external file attributes. + * @param {Object} unixPermissions the unix permissions or null. + * @param {Boolean} isDir true if the entry is a directory, false otherwise. + * @return {Number} a 32 bit integer. + * + * adapted from http://unix.stackexchange.com/questions/14705/the-zip-formats-external-file-attribute : + * + * TTTTsstrwxrwxrwx0000000000ADVSHR + * ^^^^____________________________ file type, see zipinfo.c (UNX_*) + * ^^^_________________________ setuid, setgid, sticky + * ^^^^^^^^^________________ permissions + * ^^^^^^^^^^______ not used ? + * ^^^^^^ DOS attribute bits : Archive, Directory, Volume label, System file, Hidden, Read only + */ +var generateUnixExternalFileAttr = function (unixPermissions, isDir) { + + var result = unixPermissions; + if (!unixPermissions) { + // I can't use octal values in strict mode, hence the hexa. + // 040775 => 0x41fd + // 0100664 => 0x81b4 + result = isDir ? 0x41fd : 0x81b4; + } + return (result & 0xFFFF) << 16; +}; + +/** + * Generate the DOS part of the external file attributes. + * @param {Object} dosPermissions the dos permissions or null. + * @param {Boolean} isDir true if the entry is a directory, false otherwise. + * @return {Number} a 32 bit integer. + * + * Bit 0 Read-Only + * Bit 1 Hidden + * Bit 2 System + * Bit 3 Volume Label + * Bit 4 Directory + * Bit 5 Archive + */ +var generateDosExternalFileAttr = function (dosPermissions, isDir) { + + // the dir flag is already set for compatibility + return (dosPermissions || 0) & 0x3F; +}; + +/** + * Generate the various parts used in the construction of the final zip file. + * @param {Object} streamInfo the hash with informations about the compressed file. + * @param {Boolean} streamedContent is the content streamed ? + * @param {Boolean} streamingEnded is the stream finished ? + * @param {number} offset the current offset from the start of the zip file. + * @param {String} platform let's pretend we are this platform (change platform dependents fields) + * @param {Function} encodeFileName the function to encode the file name / comment. + * @return {Object} the zip parts. + */ +var generateZipParts = function(streamInfo, streamedContent, streamingEnded, offset, platform, encodeFileName) { + var file = streamInfo['file'], + compression = streamInfo['compression'], + useCustomEncoding = encodeFileName !== utf8.utf8encode, + encodedFileName = utils.transformTo("string", encodeFileName(file.name)), + utfEncodedFileName = utils.transformTo("string", utf8.utf8encode(file.name)), + comment = file.comment, + encodedComment = utils.transformTo("string", encodeFileName(comment)), + utfEncodedComment = utils.transformTo("string", utf8.utf8encode(comment)), + useUTF8ForFileName = utfEncodedFileName.length !== file.name.length, + useUTF8ForComment = utfEncodedComment.length !== comment.length, + dosTime, + dosDate, + extraFields = "", + unicodePathExtraField = "", + unicodeCommentExtraField = "", + dir = file.dir, + date = file.date; + + + var dataInfo = { + crc32 : 0, + compressedSize : 0, + uncompressedSize : 0 + }; + + // if the content is streamed, the sizes/crc32 are only available AFTER + // the end of the stream. + if (!streamedContent || streamingEnded) { + dataInfo.crc32 = streamInfo['crc32']; + dataInfo.compressedSize = streamInfo['compressedSize']; + dataInfo.uncompressedSize = streamInfo['uncompressedSize']; + } + + var bitflag = 0; + if (streamedContent) { + // Bit 3: the sizes/crc32 are set to zero in the local header. + // The correct values are put in the data descriptor immediately + // following the compressed data. + bitflag |= 0x0008; + } + if (!useCustomEncoding && (useUTF8ForFileName || useUTF8ForComment)) { + // Bit 11: Language encoding flag (EFS). + bitflag |= 0x0800; + } + + + var extFileAttr = 0; + var versionMadeBy = 0; + if (dir) { + // dos or unix, we set the dos dir flag + extFileAttr |= 0x00010; + } + if(platform === "UNIX") { + versionMadeBy = 0x031E; // UNIX, version 3.0 + extFileAttr |= generateUnixExternalFileAttr(file.unixPermissions, dir); + } else { // DOS or other, fallback to DOS + versionMadeBy = 0x0014; // DOS, version 2.0 + extFileAttr |= generateDosExternalFileAttr(file.dosPermissions, dir); + } + + // date + // @see http://www.delorie.com/djgpp/doc/rbinter/it/52/13.html + // @see http://www.delorie.com/djgpp/doc/rbinter/it/65/16.html + // @see http://www.delorie.com/djgpp/doc/rbinter/it/66/16.html + + dosTime = date.getUTCHours(); + dosTime = dosTime << 6; + dosTime = dosTime | date.getUTCMinutes(); + dosTime = dosTime << 5; + dosTime = dosTime | date.getUTCSeconds() / 2; + + dosDate = date.getUTCFullYear() - 1980; + dosDate = dosDate << 4; + dosDate = dosDate | (date.getUTCMonth() + 1); + dosDate = dosDate << 5; + dosDate = dosDate | date.getUTCDate(); + + if (useUTF8ForFileName) { + // set the unicode path extra field. unzip needs at least one extra + // field to correctly handle unicode path, so using the path is as good + // as any other information. This could improve the situation with + // other archive managers too. + // This field is usually used without the utf8 flag, with a non + // unicode path in the header (winrar, winzip). This helps (a bit) + // with the messy Windows' default compressed folders feature but + // breaks on p7zip which doesn't seek the unicode path extra field. + // So for now, UTF-8 everywhere ! + unicodePathExtraField = + // Version + decToHex(1, 1) + + // NameCRC32 + decToHex(crc32(encodedFileName), 4) + + // UnicodeName + utfEncodedFileName; + + extraFields += + // Info-ZIP Unicode Path Extra Field + "\x75\x70" + + // size + decToHex(unicodePathExtraField.length, 2) + + // content + unicodePathExtraField; + } + + if(useUTF8ForComment) { + + unicodeCommentExtraField = + // Version + decToHex(1, 1) + + // CommentCRC32 + decToHex(crc32(encodedComment), 4) + + // UnicodeName + utfEncodedComment; + + extraFields += + // Info-ZIP Unicode Path Extra Field + "\x75\x63" + + // size + decToHex(unicodeCommentExtraField.length, 2) + + // content + unicodeCommentExtraField; + } + + var header = ""; + + // version needed to extract + header += "\x0A\x00"; + // general purpose bit flag + header += decToHex(bitflag, 2); + // compression method + header += compression.magic; + // last mod file time + header += decToHex(dosTime, 2); + // last mod file date + header += decToHex(dosDate, 2); + // crc-32 + header += decToHex(dataInfo.crc32, 4); + // compressed size + header += decToHex(dataInfo.compressedSize, 4); + // uncompressed size + header += decToHex(dataInfo.uncompressedSize, 4); + // file name length + header += decToHex(encodedFileName.length, 2); + // extra field length + header += decToHex(extraFields.length, 2); + + + var fileRecord = signature.LOCAL_FILE_HEADER + header + encodedFileName + extraFields; + + var dirRecord = signature.CENTRAL_FILE_HEADER + + // version made by (00: DOS) + decToHex(versionMadeBy, 2) + + // file header (common to file and central directory) + header + + // file comment length + decToHex(encodedComment.length, 2) + + // disk number start + "\x00\x00" + + // internal file attributes TODO + "\x00\x00" + + // external file attributes + decToHex(extFileAttr, 4) + + // relative offset of local header + decToHex(offset, 4) + + // file name + encodedFileName + + // extra field + extraFields + + // file comment + encodedComment; + + return { + fileRecord: fileRecord, + dirRecord: dirRecord + }; +}; + +/** + * Generate the EOCD record. + * @param {Number} entriesCount the number of entries in the zip file. + * @param {Number} centralDirLength the length (in bytes) of the central dir. + * @param {Number} localDirLength the length (in bytes) of the local dir. + * @param {String} comment the zip file comment as a binary string. + * @param {Function} encodeFileName the function to encode the comment. + * @return {String} the EOCD record. + */ +var generateCentralDirectoryEnd = function (entriesCount, centralDirLength, localDirLength, comment, encodeFileName) { + var dirEnd = ""; + var encodedComment = utils.transformTo("string", encodeFileName(comment)); + + // end of central dir signature + dirEnd = signature.CENTRAL_DIRECTORY_END + + // number of this disk + "\x00\x00" + + // number of the disk with the start of the central directory + "\x00\x00" + + // total number of entries in the central directory on this disk + decToHex(entriesCount, 2) + + // total number of entries in the central directory + decToHex(entriesCount, 2) + + // size of the central directory 4 bytes + decToHex(centralDirLength, 4) + + // offset of start of central directory with respect to the starting disk number + decToHex(localDirLength, 4) + + // .ZIP file comment length + decToHex(encodedComment.length, 2) + + // .ZIP file comment + encodedComment; + + return dirEnd; +}; + +/** + * Generate data descriptors for a file entry. + * @param {Object} streamInfo the hash generated by a worker, containing informations + * on the file entry. + * @return {String} the data descriptors. + */ +var generateDataDescriptors = function (streamInfo) { + var descriptor = ""; + descriptor = signature.DATA_DESCRIPTOR + + // crc-32 4 bytes + decToHex(streamInfo['crc32'], 4) + + // compressed size 4 bytes + decToHex(streamInfo['compressedSize'], 4) + + // uncompressed size 4 bytes + decToHex(streamInfo['uncompressedSize'], 4); + + return descriptor; +}; + + +/** + * A worker to concatenate other workers to create a zip file. + * @param {Boolean} streamFiles `true` to stream the content of the files, + * `false` to accumulate it. + * @param {String} comment the comment to use. + * @param {String} platform the platform to use, "UNIX" or "DOS". + * @param {Function} encodeFileName the function to encode file names and comments. + */ +function ZipFileWorker(streamFiles, comment, platform, encodeFileName) { + GenericWorker.call(this, "ZipFileWorker"); + // The number of bytes written so far. This doesn't count accumulated chunks. + this.bytesWritten = 0; + // The comment of the zip file + this.zipComment = comment; + // The platform "generating" the zip file. + this.zipPlatform = platform; + // the function to encode file names and comments. + this.encodeFileName = encodeFileName; + // Should we stream the content of the files ? + this.streamFiles = streamFiles; + // If `streamFiles` is false, we will need to accumulate the content of the + // files to calculate sizes / crc32 (and write them *before* the content). + // This boolean indicates if we are accumulating chunks (it will change a lot + // during the lifetime of this worker). + this.accumulate = false; + // The buffer receiving chunks when accumulating content. + this.contentBuffer = []; + // The list of generated directory records. + this.dirRecords = []; + // The offset (in bytes) from the beginning of the zip file for the current source. + this.currentSourceOffset = 0; + // The total number of entries in this zip file. + this.entriesCount = 0; + // the name of the file currently being added, null when handling the end of the zip file. + // Used for the emited metadata. + this.currentFile = null; + + + + this._sources = []; +} +utils.inherits(ZipFileWorker, GenericWorker); + +/** + * @see GenericWorker.push + */ +ZipFileWorker.prototype.push = function (chunk) { + + var currentFilePercent = chunk.meta.percent || 0; + var entriesCount = this.entriesCount; + var remainingFiles = this._sources.length; + + if(this.accumulate) { + this.contentBuffer.push(chunk); + } else { + this.bytesWritten += chunk.data.length; + + GenericWorker.prototype.push.call(this, { + data : chunk.data, + meta : { + currentFile : this.currentFile, + percent : entriesCount ? (currentFilePercent + 100 * (entriesCount - remainingFiles - 1)) / entriesCount : 100 + } + }); + } +}; + +/** + * The worker started a new source (an other worker). + * @param {Object} streamInfo the streamInfo object from the new source. + */ +ZipFileWorker.prototype.openedSource = function (streamInfo) { + this.currentSourceOffset = this.bytesWritten; + this.currentFile = streamInfo['file'].name; + + var streamedContent = this.streamFiles && !streamInfo['file'].dir; + + // don't stream folders (because they don't have any content) + if(streamedContent) { + var record = generateZipParts(streamInfo, streamedContent, false, this.currentSourceOffset, this.zipPlatform, this.encodeFileName); + this.push({ + data : record.fileRecord, + meta : {percent:0} + }); + } else { + // we need to wait for the whole file before pushing anything + this.accumulate = true; + } +}; + +/** + * The worker finished a source (an other worker). + * @param {Object} streamInfo the streamInfo object from the finished source. + */ +ZipFileWorker.prototype.closedSource = function (streamInfo) { + this.accumulate = false; + var streamedContent = this.streamFiles && !streamInfo['file'].dir; + var record = generateZipParts(streamInfo, streamedContent, true, this.currentSourceOffset, this.zipPlatform, this.encodeFileName); + + this.dirRecords.push(record.dirRecord); + if(streamedContent) { + // after the streamed file, we put data descriptors + this.push({ + data : generateDataDescriptors(streamInfo), + meta : {percent:100} + }); + } else { + // the content wasn't streamed, we need to push everything now + // first the file record, then the content + this.push({ + data : record.fileRecord, + meta : {percent:0} + }); + while(this.contentBuffer.length) { + this.push(this.contentBuffer.shift()); + } + } + this.currentFile = null; +}; + +/** + * @see GenericWorker.flush + */ +ZipFileWorker.prototype.flush = function () { + + var localDirLength = this.bytesWritten; + for(var i = 0; i < this.dirRecords.length; i++) { + this.push({ + data : this.dirRecords[i], + meta : {percent:100} + }); + } + var centralDirLength = this.bytesWritten - localDirLength; + + var dirEnd = generateCentralDirectoryEnd(this.dirRecords.length, centralDirLength, localDirLength, this.zipComment, this.encodeFileName); + + this.push({ + data : dirEnd, + meta : {percent:100} + }); +}; + +/** + * Prepare the next source to be read. + */ +ZipFileWorker.prototype.prepareNextSource = function () { + this.previous = this._sources.shift(); + this.openedSource(this.previous.streamInfo); + if (this.isPaused) { + this.previous.pause(); + } else { + this.previous.resume(); + } +}; + +/** + * @see GenericWorker.registerPrevious + */ +ZipFileWorker.prototype.registerPrevious = function (previous) { + this._sources.push(previous); + var self = this; + + previous.on('data', function (chunk) { + self.processChunk(chunk); + }); + previous.on('end', function () { + self.closedSource(self.previous.streamInfo); + if(self._sources.length) { + self.prepareNextSource(); + } else { + self.end(); + } + }); + previous.on('error', function (e) { + self.error(e); + }); + return this; +}; + +/** + * @see GenericWorker.resume + */ +ZipFileWorker.prototype.resume = function () { + if(!GenericWorker.prototype.resume.call(this)) { + return false; + } + + if (!this.previous && this._sources.length) { + this.prepareNextSource(); + return true; + } + if (!this.previous && !this._sources.length && !this.generatedError) { + this.end(); + return true; + } +}; + +/** + * @see GenericWorker.error + */ +ZipFileWorker.prototype.error = function (e) { + var sources = this._sources; + if(!GenericWorker.prototype.error.call(this, e)) { + return false; + } + for(var i = 0; i < sources.length; i++) { + try { + sources[i].error(e); + } catch(e) { + // the `error` exploded, nothing to do + } + } + return true; +}; + +/** + * @see GenericWorker.lock + */ +ZipFileWorker.prototype.lock = function () { + GenericWorker.prototype.lock.call(this); + var sources = this._sources; + for(var i = 0; i < sources.length; i++) { + sources[i].lock(); + } +}; + +module.exports = ZipFileWorker; + +},{"../crc32":4,"../signature":23,"../stream/GenericWorker":28,"../utf8":31,"../utils":32}],9:[function(require,module,exports){ +'use strict'; + +var compressions = require('../compressions'); +var ZipFileWorker = require('./ZipFileWorker'); + +/** + * Find the compression to use. + * @param {String} fileCompression the compression defined at the file level, if any. + * @param {String} zipCompression the compression defined at the load() level. + * @return {Object} the compression object to use. + */ +var getCompression = function (fileCompression, zipCompression) { + + var compressionName = fileCompression || zipCompression; + var compression = compressions[compressionName]; + if (!compression) { + throw new Error(compressionName + " is not a valid compression method !"); + } + return compression; +}; + +/** + * Create a worker to generate a zip file. + * @param {JSZip} zip the JSZip instance at the right root level. + * @param {Object} options to generate the zip file. + * @param {String} comment the comment to use. + */ +exports.generateWorker = function (zip, options, comment) { + + var zipFileWorker = new ZipFileWorker(options.streamFiles, comment, options.platform, options.encodeFileName); + var entriesCount = 0; + try { + + zip.forEach(function (relativePath, file) { + entriesCount++; + var compression = getCompression(file.options.compression, options.compression); + var compressionOptions = file.options.compressionOptions || options.compressionOptions || {}; + var dir = file.dir, date = file.date; + + file._compressWorker(compression, compressionOptions) + .withStreamInfo("file", { + name : relativePath, + dir : dir, + date : date, + comment : file.comment || "", + unixPermissions : file.unixPermissions, + dosPermissions : file.dosPermissions + }) + .pipe(zipFileWorker); + }); + zipFileWorker.entriesCount = entriesCount; + } catch (e) { + zipFileWorker.error(e); + } + + return zipFileWorker; +}; + +},{"../compressions":3,"./ZipFileWorker":8}],10:[function(require,module,exports){ +'use strict'; + +/** + * Representation a of zip file in js + * @constructor + */ +function JSZip() { + // if this constructor is used without `new`, it adds `new` before itself: + if(!(this instanceof JSZip)) { + return new JSZip(); + } + + if(arguments.length) { + throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide."); + } + + // object containing the files : + // { + // "folder/" : {...}, + // "folder/data.txt" : {...} + // } + this.files = {}; + + this.comment = null; + + // Where we are in the hierarchy + this.root = ""; + this.clone = function() { + var newObj = new JSZip(); + for (var i in this) { + if (typeof this[i] !== "function") { + newObj[i] = this[i]; + } + } + return newObj; + }; +} +JSZip.prototype = require('./object'); +JSZip.prototype.loadAsync = require('./load'); +JSZip.support = require('./support'); +JSZip.defaults = require('./defaults'); + +// TODO find a better way to handle this version, +// a require('package.json').version doesn't work with webpack, see #327 +JSZip.version = "3.1.5"; + +JSZip.loadAsync = function (content, options) { + return new JSZip().loadAsync(content, options); +}; + +JSZip.external = require("./external"); +module.exports = JSZip; + +},{"./defaults":5,"./external":6,"./load":11,"./object":15,"./support":30}],11:[function(require,module,exports){ +'use strict'; +var utils = require('./utils'); +var external = require("./external"); +var utf8 = require('./utf8'); +var utils = require('./utils'); +var ZipEntries = require('./zipEntries'); +var Crc32Probe = require('./stream/Crc32Probe'); +var nodejsUtils = require("./nodejsUtils"); + +/** + * Check the CRC32 of an entry. + * @param {ZipEntry} zipEntry the zip entry to check. + * @return {Promise} the result. + */ +function checkEntryCRC32(zipEntry) { + return new external.Promise(function (resolve, reject) { + var worker = zipEntry.decompressed.getContentWorker().pipe(new Crc32Probe()); + worker.on("error", function (e) { + reject(e); + }) + .on("end", function () { + if (worker.streamInfo.crc32 !== zipEntry.decompressed.crc32) { + reject(new Error("Corrupted zip : CRC32 mismatch")); + } else { + resolve(); + } + }) + .resume(); + }); +} + +module.exports = function(data, options) { + var zip = this; + options = utils.extend(options || {}, { + base64: false, + checkCRC32: false, + optimizedBinaryString: false, + createFolders: false, + decodeFileName: utf8.utf8decode + }); + + if (nodejsUtils.isNode && nodejsUtils.isStream(data)) { + return external.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")); + } + + return utils.prepareContent("the loaded zip file", data, true, options.optimizedBinaryString, options.base64) + .then(function(data) { + var zipEntries = new ZipEntries(options); + zipEntries.load(data); + return zipEntries; + }).then(function checkCRC32(zipEntries) { + var promises = [external.Promise.resolve(zipEntries)]; + var files = zipEntries.files; + if (options.checkCRC32) { + for (var i = 0; i < files.length; i++) { + promises.push(checkEntryCRC32(files[i])); + } + } + return external.Promise.all(promises); + }).then(function addFiles(results) { + var zipEntries = results.shift(); + var files = zipEntries.files; + for (var i = 0; i < files.length; i++) { + var input = files[i]; + zip.file(input.fileNameStr, input.decompressed, { + binary: true, + optimizedBinaryString: true, + date: input.date, + dir: input.dir, + comment : input.fileCommentStr.length ? input.fileCommentStr : null, + unixPermissions : input.unixPermissions, + dosPermissions : input.dosPermissions, + createFolders: options.createFolders + }); + } + if (zipEntries.zipComment.length) { + zip.comment = zipEntries.zipComment; + } + + return zip; + }); +}; + +},{"./external":6,"./nodejsUtils":14,"./stream/Crc32Probe":25,"./utf8":31,"./utils":32,"./zipEntries":33}],12:[function(require,module,exports){ +"use strict"; + +var utils = require('../utils'); +var GenericWorker = require('../stream/GenericWorker'); + +/** + * A worker that use a nodejs stream as source. + * @constructor + * @param {String} filename the name of the file entry for this stream. + * @param {Readable} stream the nodejs stream. + */ +function NodejsStreamInputAdapter(filename, stream) { + GenericWorker.call(this, "Nodejs stream input adapter for " + filename); + this._upstreamEnded = false; + this._bindStream(stream); +} + +utils.inherits(NodejsStreamInputAdapter, GenericWorker); + +/** + * Prepare the stream and bind the callbacks on it. + * Do this ASAP on node 0.10 ! A lazy binding doesn't always work. + * @param {Stream} stream the nodejs stream to use. + */ +NodejsStreamInputAdapter.prototype._bindStream = function (stream) { + var self = this; + this._stream = stream; + stream.pause(); + stream + .on("data", function (chunk) { + self.push({ + data: chunk, + meta : { + percent : 0 + } + }); + }) + .on("error", function (e) { + if(self.isPaused) { + this.generatedError = e; + } else { + self.error(e); + } + }) + .on("end", function () { + if(self.isPaused) { + self._upstreamEnded = true; + } else { + self.end(); + } + }); +}; +NodejsStreamInputAdapter.prototype.pause = function () { + if(!GenericWorker.prototype.pause.call(this)) { + return false; + } + this._stream.pause(); + return true; +}; +NodejsStreamInputAdapter.prototype.resume = function () { + if(!GenericWorker.prototype.resume.call(this)) { + return false; + } + + if(this._upstreamEnded) { + this.end(); + } else { + this._stream.resume(); + } + + return true; +}; + +module.exports = NodejsStreamInputAdapter; + +},{"../stream/GenericWorker":28,"../utils":32}],13:[function(require,module,exports){ +'use strict'; + +var Readable = require('readable-stream').Readable; + +var utils = require('../utils'); +utils.inherits(NodejsStreamOutputAdapter, Readable); + +/** +* A nodejs stream using a worker as source. +* @see the SourceWrapper in http://nodejs.org/api/stream.html +* @constructor +* @param {StreamHelper} helper the helper wrapping the worker +* @param {Object} options the nodejs stream options +* @param {Function} updateCb the update callback. +*/ +function NodejsStreamOutputAdapter(helper, options, updateCb) { + Readable.call(this, options); + this._helper = helper; + + var self = this; + helper.on("data", function (data, meta) { + if (!self.push(data)) { + self._helper.pause(); + } + if(updateCb) { + updateCb(meta); + } + }) + .on("error", function(e) { + self.emit('error', e); + }) + .on("end", function () { + self.push(null); + }); +} + + +NodejsStreamOutputAdapter.prototype._read = function() { + this._helper.resume(); +}; + +module.exports = NodejsStreamOutputAdapter; + +},{"../utils":32,"readable-stream":16}],14:[function(require,module,exports){ +'use strict'; + +module.exports = { + /** + * True if this is running in Nodejs, will be undefined in a browser. + * In a browser, browserify won't include this file and the whole module + * will be resolved an empty object. + */ + isNode : typeof Buffer !== "undefined", + /** + * Create a new nodejs Buffer from an existing content. + * @param {Object} data the data to pass to the constructor. + * @param {String} encoding the encoding to use. + * @return {Buffer} a new Buffer. + */ + newBufferFrom: function(data, encoding) { + // XXX We can't use `Buffer.from` which comes from `Uint8Array.from` + // in nodejs v4 (< v.4.5). It's not the expected implementation (and + // has a different signature). + // see https://github.com/nodejs/node/issues/8053 + // A condition on nodejs' version won't solve the issue as we don't + // control the Buffer polyfills that may or may not be used. + return new Buffer(data, encoding); + }, + /** + * Create a new nodejs Buffer with the specified size. + * @param {Integer} size the size of the buffer. + * @return {Buffer} a new Buffer. + */ + allocBuffer: function (size) { + if (Buffer.alloc) { + return Buffer.alloc(size); + } else { + return new Buffer(size); + } + }, + /** + * Find out if an object is a Buffer. + * @param {Object} b the object to test. + * @return {Boolean} true if the object is a Buffer, false otherwise. + */ + isBuffer : function(b){ + return Buffer.isBuffer(b); + }, + + isStream : function (obj) { + return obj && + typeof obj.on === "function" && + typeof obj.pause === "function" && + typeof obj.resume === "function"; + } +}; + +},{}],15:[function(require,module,exports){ +'use strict'; +var utf8 = require('./utf8'); +var utils = require('./utils'); +var GenericWorker = require('./stream/GenericWorker'); +var StreamHelper = require('./stream/StreamHelper'); +var defaults = require('./defaults'); +var CompressedObject = require('./compressedObject'); +var ZipObject = require('./zipObject'); +var generate = require("./generate"); +var nodejsUtils = require("./nodejsUtils"); +var NodejsStreamInputAdapter = require("./nodejs/NodejsStreamInputAdapter"); + + +/** + * Add a file in the current folder. + * @private + * @param {string} name the name of the file + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data of the file + * @param {Object} originalOptions the options of the file + * @return {Object} the new file. + */ +var fileAdd = function(name, data, originalOptions) { + // be sure sub folders exist + var dataType = utils.getTypeOf(data), + parent; + + + /* + * Correct options. + */ + + var o = utils.extend(originalOptions || {}, defaults); + o.date = o.date || new Date(); + if (o.compression !== null) { + o.compression = o.compression.toUpperCase(); + } + + if (typeof o.unixPermissions === "string") { + o.unixPermissions = parseInt(o.unixPermissions, 8); + } + + // UNX_IFDIR 0040000 see zipinfo.c + if (o.unixPermissions && (o.unixPermissions & 0x4000)) { + o.dir = true; + } + // Bit 4 Directory + if (o.dosPermissions && (o.dosPermissions & 0x0010)) { + o.dir = true; + } + + if (o.dir) { + name = forceTrailingSlash(name); + } + if (o.createFolders && (parent = parentFolder(name))) { + folderAdd.call(this, parent, true); + } + + var isUnicodeString = dataType === "string" && o.binary === false && o.base64 === false; + if (!originalOptions || typeof originalOptions.binary === "undefined") { + o.binary = !isUnicodeString; + } + + + var isCompressedEmpty = (data instanceof CompressedObject) && data.uncompressedSize === 0; + + if (isCompressedEmpty || o.dir || !data || data.length === 0) { + o.base64 = false; + o.binary = true; + data = ""; + o.compression = "STORE"; + dataType = "string"; + } + + /* + * Convert content to fit. + */ + + var zipObjectContent = null; + if (data instanceof CompressedObject || data instanceof GenericWorker) { + zipObjectContent = data; + } else if (nodejsUtils.isNode && nodejsUtils.isStream(data)) { + zipObjectContent = new NodejsStreamInputAdapter(name, data); + } else { + zipObjectContent = utils.prepareContent(name, data, o.binary, o.optimizedBinaryString, o.base64); + } + + var object = new ZipObject(name, zipObjectContent, o); + this.files[name] = object; + /* + TODO: we can't throw an exception because we have async promises + (we can have a promise of a Date() for example) but returning a + promise is useless because file(name, data) returns the JSZip + object for chaining. Should we break that to allow the user + to catch the error ? + + return external.Promise.resolve(zipObjectContent) + .then(function () { + return object; + }); + */ +}; + +/** + * Find the parent folder of the path. + * @private + * @param {string} path the path to use + * @return {string} the parent folder, or "" + */ +var parentFolder = function (path) { + if (path.slice(-1) === '/') { + path = path.substring(0, path.length - 1); + } + var lastSlash = path.lastIndexOf('/'); + return (lastSlash > 0) ? path.substring(0, lastSlash) : ""; +}; + +/** + * Returns the path with a slash at the end. + * @private + * @param {String} path the path to check. + * @return {String} the path with a trailing slash. + */ +var forceTrailingSlash = function(path) { + // Check the name ends with a / + if (path.slice(-1) !== "/") { + path += "/"; // IE doesn't like substr(-1) + } + return path; +}; + +/** + * Add a (sub) folder in the current folder. + * @private + * @param {string} name the folder's name + * @param {boolean=} [createFolders] If true, automatically create sub + * folders. Defaults to false. + * @return {Object} the new folder. + */ +var folderAdd = function(name, createFolders) { + createFolders = (typeof createFolders !== 'undefined') ? createFolders : defaults.createFolders; + + name = forceTrailingSlash(name); + + // Does this folder already exist? + if (!this.files[name]) { + fileAdd.call(this, name, null, { + dir: true, + createFolders: createFolders + }); + } + return this.files[name]; +}; + +/** +* Cross-window, cross-Node-context regular expression detection +* @param {Object} object Anything +* @return {Boolean} true if the object is a regular expression, +* false otherwise +*/ +function isRegExp(object) { + return Object.prototype.toString.call(object) === "[object RegExp]"; +} + +// return the actual prototype of JSZip +var out = { + /** + * @see loadAsync + */ + load: function() { + throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide."); + }, + + + /** + * Call a callback function for each entry at this folder level. + * @param {Function} cb the callback function: + * function (relativePath, file) {...} + * It takes 2 arguments : the relative path and the file. + */ + forEach: function(cb) { + var filename, relativePath, file; + for (filename in this.files) { + if (!this.files.hasOwnProperty(filename)) { + continue; + } + file = this.files[filename]; + relativePath = filename.slice(this.root.length, filename.length); + if (relativePath && filename.slice(0, this.root.length) === this.root) { // the file is in the current root + cb(relativePath, file); // TODO reverse the parameters ? need to be clean AND consistent with the filter search fn... + } + } + }, + + /** + * Filter nested files/folders with the specified function. + * @param {Function} search the predicate to use : + * function (relativePath, file) {...} + * It takes 2 arguments : the relative path and the file. + * @return {Array} An array of matching elements. + */ + filter: function(search) { + var result = []; + this.forEach(function (relativePath, entry) { + if (search(relativePath, entry)) { // the file matches the function + result.push(entry); + } + + }); + return result; + }, + + /** + * Add a file to the zip file, or search a file. + * @param {string|RegExp} name The name of the file to add (if data is defined), + * the name of the file to find (if no data) or a regex to match files. + * @param {String|ArrayBuffer|Uint8Array|Buffer} data The file data, either raw or base64 encoded + * @param {Object} o File options + * @return {JSZip|Object|Array} this JSZip object (when adding a file), + * a file (when searching by string) or an array of files (when searching by regex). + */ + file: function(name, data, o) { + if (arguments.length === 1) { + if (isRegExp(name)) { + var regexp = name; + return this.filter(function(relativePath, file) { + return !file.dir && regexp.test(relativePath); + }); + } + else { // text + var obj = this.files[this.root + name]; + if (obj && !obj.dir) { + return obj; + } else { + return null; + } + } + } + else { // more than one argument : we have data ! + name = this.root + name; + fileAdd.call(this, name, data, o); + } + return this; + }, + + /** + * Add a directory to the zip file, or search. + * @param {String|RegExp} arg The name of the directory to add, or a regex to search folders. + * @return {JSZip} an object with the new directory as the root, or an array containing matching folders. + */ + folder: function(arg) { + if (!arg) { + return this; + } + + if (isRegExp(arg)) { + return this.filter(function(relativePath, file) { + return file.dir && arg.test(relativePath); + }); + } + + // else, name is a new folder + var name = this.root + arg; + var newFolder = folderAdd.call(this, name); + + // Allow chaining by returning a new object with this folder as the root + var ret = this.clone(); + ret.root = newFolder.name; + return ret; + }, + + /** + * Delete a file, or a directory and all sub-files, from the zip + * @param {string} name the name of the file to delete + * @return {JSZip} this JSZip object + */ + remove: function(name) { + name = this.root + name; + var file = this.files[name]; + if (!file) { + // Look for any folders + if (name.slice(-1) !== "/") { + name += "/"; + } + file = this.files[name]; + } + + if (file && !file.dir) { + // file + delete this.files[name]; + } else { + // maybe a folder, delete recursively + var kids = this.filter(function(relativePath, file) { + return file.name.slice(0, name.length) === name; + }); + for (var i = 0; i < kids.length; i++) { + delete this.files[kids[i].name]; + } + } + + return this; + }, + + /** + * Generate the complete zip file + * @param {Object} options the options to generate the zip file : + * - compression, "STORE" by default. + * - type, "base64" by default. Values are : string, base64, uint8array, arraybuffer, blob. + * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the zip file + */ + generate: function(options) { + throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide."); + }, + + /** + * Generate the complete zip file as an internal stream. + * @param {Object} options the options to generate the zip file : + * - compression, "STORE" by default. + * - type, "base64" by default. Values are : string, base64, uint8array, arraybuffer, blob. + * @return {StreamHelper} the streamed zip file. + */ + generateInternalStream: function(options) { + var worker, opts = {}; + try { + opts = utils.extend(options || {}, { + streamFiles: false, + compression: "STORE", + compressionOptions : null, + type: "", + platform: "DOS", + comment: null, + mimeType: 'application/zip', + encodeFileName: utf8.utf8encode + }); + + opts.type = opts.type.toLowerCase(); + opts.compression = opts.compression.toUpperCase(); + + // "binarystring" is prefered but the internals use "string". + if(opts.type === "binarystring") { + opts.type = "string"; + } + + if (!opts.type) { + throw new Error("No output type specified."); + } + + utils.checkSupport(opts.type); + + // accept nodejs `process.platform` + if( + opts.platform === 'darwin' || + opts.platform === 'freebsd' || + opts.platform === 'linux' || + opts.platform === 'sunos' + ) { + opts.platform = "UNIX"; + } + if (opts.platform === 'win32') { + opts.platform = "DOS"; + } + + var comment = opts.comment || this.comment || ""; + worker = generate.generateWorker(this, opts, comment); + } catch (e) { + worker = new GenericWorker("error"); + worker.error(e); + } + return new StreamHelper(worker, opts.type || "string", opts.mimeType); + }, + /** + * Generate the complete zip file asynchronously. + * @see generateInternalStream + */ + generateAsync: function(options, onUpdate) { + return this.generateInternalStream(options).accumulate(onUpdate); + }, + /** + * Generate the complete zip file asynchronously. + * @see generateInternalStream + */ + generateNodeStream: function(options, onUpdate) { + options = options || {}; + if (!options.type) { + options.type = "nodebuffer"; + } + return this.generateInternalStream(options).toNodejsStream(onUpdate); + } +}; +module.exports = out; + +},{"./compressedObject":2,"./defaults":5,"./generate":9,"./nodejs/NodejsStreamInputAdapter":12,"./nodejsUtils":14,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31,"./utils":32,"./zipObject":35}],16:[function(require,module,exports){ +/* + * This file is used by module bundlers (browserify/webpack/etc) when + * including a stream implementation. We use "readable-stream" to get a + * consistent behavior between nodejs versions but bundlers often have a shim + * for "stream". Using this shim greatly improve the compatibility and greatly + * reduce the final size of the bundle (only one stream implementation, not + * two). + */ +module.exports = require("stream"); + +},{"stream":undefined}],17:[function(require,module,exports){ +'use strict'; +var DataReader = require('./DataReader'); +var utils = require('../utils'); + +function ArrayReader(data) { + DataReader.call(this, data); + for(var i = 0; i < this.data.length; i++) { + data[i] = data[i] & 0xFF; + } +} +utils.inherits(ArrayReader, DataReader); +/** + * @see DataReader.byteAt + */ +ArrayReader.prototype.byteAt = function(i) { + return this.data[this.zero + i]; +}; +/** + * @see DataReader.lastIndexOfSignature + */ +ArrayReader.prototype.lastIndexOfSignature = function(sig) { + var sig0 = sig.charCodeAt(0), + sig1 = sig.charCodeAt(1), + sig2 = sig.charCodeAt(2), + sig3 = sig.charCodeAt(3); + for (var i = this.length - 4; i >= 0; --i) { + if (this.data[i] === sig0 && this.data[i + 1] === sig1 && this.data[i + 2] === sig2 && this.data[i + 3] === sig3) { + return i - this.zero; + } + } + + return -1; +}; +/** + * @see DataReader.readAndCheckSignature + */ +ArrayReader.prototype.readAndCheckSignature = function (sig) { + var sig0 = sig.charCodeAt(0), + sig1 = sig.charCodeAt(1), + sig2 = sig.charCodeAt(2), + sig3 = sig.charCodeAt(3), + data = this.readData(4); + return sig0 === data[0] && sig1 === data[1] && sig2 === data[2] && sig3 === data[3]; +}; +/** + * @see DataReader.readData + */ +ArrayReader.prototype.readData = function(size) { + this.checkOffset(size); + if(size === 0) { + return []; + } + var result = this.data.slice(this.zero + this.index, this.zero + this.index + size); + this.index += size; + return result; +}; +module.exports = ArrayReader; + +},{"../utils":32,"./DataReader":18}],18:[function(require,module,exports){ +'use strict'; +var utils = require('../utils'); + +function DataReader(data) { + this.data = data; // type : see implementation + this.length = data.length; + this.index = 0; + this.zero = 0; +} +DataReader.prototype = { + /** + * Check that the offset will not go too far. + * @param {string} offset the additional offset to check. + * @throws {Error} an Error if the offset is out of bounds. + */ + checkOffset: function(offset) { + this.checkIndex(this.index + offset); + }, + /** + * Check that the specified index will not be too far. + * @param {string} newIndex the index to check. + * @throws {Error} an Error if the index is out of bounds. + */ + checkIndex: function(newIndex) { + if (this.length < this.zero + newIndex || newIndex < 0) { + throw new Error("End of data reached (data length = " + this.length + ", asked index = " + (newIndex) + "). Corrupted zip ?"); + } + }, + /** + * Change the index. + * @param {number} newIndex The new index. + * @throws {Error} if the new index is out of the data. + */ + setIndex: function(newIndex) { + this.checkIndex(newIndex); + this.index = newIndex; + }, + /** + * Skip the next n bytes. + * @param {number} n the number of bytes to skip. + * @throws {Error} if the new index is out of the data. + */ + skip: function(n) { + this.setIndex(this.index + n); + }, + /** + * Get the byte at the specified index. + * @param {number} i the index to use. + * @return {number} a byte. + */ + byteAt: function(i) { + // see implementations + }, + /** + * Get the next number with a given byte size. + * @param {number} size the number of bytes to read. + * @return {number} the corresponding number. + */ + readInt: function(size) { + var result = 0, + i; + this.checkOffset(size); + for (i = this.index + size - 1; i >= this.index; i--) { + result = (result << 8) + this.byteAt(i); + } + this.index += size; + return result; + }, + /** + * Get the next string with a given byte size. + * @param {number} size the number of bytes to read. + * @return {string} the corresponding string. + */ + readString: function(size) { + return utils.transformTo("string", this.readData(size)); + }, + /** + * Get raw data without conversion, bytes. + * @param {number} size the number of bytes to read. + * @return {Object} the raw data, implementation specific. + */ + readData: function(size) { + // see implementations + }, + /** + * Find the last occurence of a zip signature (4 bytes). + * @param {string} sig the signature to find. + * @return {number} the index of the last occurence, -1 if not found. + */ + lastIndexOfSignature: function(sig) { + // see implementations + }, + /** + * Read the signature (4 bytes) at the current position and compare it with sig. + * @param {string} sig the expected signature + * @return {boolean} true if the signature matches, false otherwise. + */ + readAndCheckSignature: function(sig) { + // see implementations + }, + /** + * Get the next date. + * @return {Date} the date. + */ + readDate: function() { + var dostime = this.readInt(4); + return new Date(Date.UTC( + ((dostime >> 25) & 0x7f) + 1980, // year + ((dostime >> 21) & 0x0f) - 1, // month + (dostime >> 16) & 0x1f, // day + (dostime >> 11) & 0x1f, // hour + (dostime >> 5) & 0x3f, // minute + (dostime & 0x1f) << 1)); // second + } +}; +module.exports = DataReader; + +},{"../utils":32}],19:[function(require,module,exports){ +'use strict'; +var Uint8ArrayReader = require('./Uint8ArrayReader'); +var utils = require('../utils'); + +function NodeBufferReader(data) { + Uint8ArrayReader.call(this, data); +} +utils.inherits(NodeBufferReader, Uint8ArrayReader); + +/** + * @see DataReader.readData + */ +NodeBufferReader.prototype.readData = function(size) { + this.checkOffset(size); + var result = this.data.slice(this.zero + this.index, this.zero + this.index + size); + this.index += size; + return result; +}; +module.exports = NodeBufferReader; + +},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(require,module,exports){ +'use strict'; +var DataReader = require('./DataReader'); +var utils = require('../utils'); + +function StringReader(data) { + DataReader.call(this, data); +} +utils.inherits(StringReader, DataReader); +/** + * @see DataReader.byteAt + */ +StringReader.prototype.byteAt = function(i) { + return this.data.charCodeAt(this.zero + i); +}; +/** + * @see DataReader.lastIndexOfSignature + */ +StringReader.prototype.lastIndexOfSignature = function(sig) { + return this.data.lastIndexOf(sig) - this.zero; +}; +/** + * @see DataReader.readAndCheckSignature + */ +StringReader.prototype.readAndCheckSignature = function (sig) { + var data = this.readData(4); + return sig === data; +}; +/** + * @see DataReader.readData + */ +StringReader.prototype.readData = function(size) { + this.checkOffset(size); + // this will work because the constructor applied the "& 0xff" mask. + var result = this.data.slice(this.zero + this.index, this.zero + this.index + size); + this.index += size; + return result; +}; +module.exports = StringReader; + +},{"../utils":32,"./DataReader":18}],21:[function(require,module,exports){ +'use strict'; +var ArrayReader = require('./ArrayReader'); +var utils = require('../utils'); + +function Uint8ArrayReader(data) { + ArrayReader.call(this, data); +} +utils.inherits(Uint8ArrayReader, ArrayReader); +/** + * @see DataReader.readData + */ +Uint8ArrayReader.prototype.readData = function(size) { + this.checkOffset(size); + if(size === 0) { + // in IE10, when using subarray(idx, idx), we get the array [0x00] instead of []. + return new Uint8Array(0); + } + var result = this.data.subarray(this.zero + this.index, this.zero + this.index + size); + this.index += size; + return result; +}; +module.exports = Uint8ArrayReader; + +},{"../utils":32,"./ArrayReader":17}],22:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var support = require('../support'); +var ArrayReader = require('./ArrayReader'); +var StringReader = require('./StringReader'); +var NodeBufferReader = require('./NodeBufferReader'); +var Uint8ArrayReader = require('./Uint8ArrayReader'); + +/** + * Create a reader adapted to the data. + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data to read. + * @return {DataReader} the data reader. + */ +module.exports = function (data) { + var type = utils.getTypeOf(data); + utils.checkSupport(type); + if (type === "string" && !support.uint8array) { + return new StringReader(data); + } + if (type === "nodebuffer") { + return new NodeBufferReader(data); + } + if (support.uint8array) { + return new Uint8ArrayReader(utils.transformTo("uint8array", data)); + } + return new ArrayReader(utils.transformTo("array", data)); +}; + +},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(require,module,exports){ +'use strict'; +exports.LOCAL_FILE_HEADER = "PK\x03\x04"; +exports.CENTRAL_FILE_HEADER = "PK\x01\x02"; +exports.CENTRAL_DIRECTORY_END = "PK\x05\x06"; +exports.ZIP64_CENTRAL_DIRECTORY_LOCATOR = "PK\x06\x07"; +exports.ZIP64_CENTRAL_DIRECTORY_END = "PK\x06\x06"; +exports.DATA_DESCRIPTOR = "PK\x07\x08"; + +},{}],24:[function(require,module,exports){ +'use strict'; + +var GenericWorker = require('./GenericWorker'); +var utils = require('../utils'); + +/** + * A worker which convert chunks to a specified type. + * @constructor + * @param {String} destType the destination type. + */ +function ConvertWorker(destType) { + GenericWorker.call(this, "ConvertWorker to " + destType); + this.destType = destType; +} +utils.inherits(ConvertWorker, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +ConvertWorker.prototype.processChunk = function (chunk) { + this.push({ + data : utils.transformTo(this.destType, chunk.data), + meta : chunk.meta + }); +}; +module.exports = ConvertWorker; + +},{"../utils":32,"./GenericWorker":28}],25:[function(require,module,exports){ +'use strict'; + +var GenericWorker = require('./GenericWorker'); +var crc32 = require('../crc32'); +var utils = require('../utils'); + +/** + * A worker which calculate the crc32 of the data flowing through. + * @constructor + */ +function Crc32Probe() { + GenericWorker.call(this, "Crc32Probe"); + this.withStreamInfo("crc32", 0); +} +utils.inherits(Crc32Probe, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +Crc32Probe.prototype.processChunk = function (chunk) { + this.streamInfo.crc32 = crc32(chunk.data, this.streamInfo.crc32 || 0); + this.push(chunk); +}; +module.exports = Crc32Probe; + +},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var GenericWorker = require('./GenericWorker'); + +/** + * A worker which calculate the total length of the data flowing through. + * @constructor + * @param {String} propName the name used to expose the length + */ +function DataLengthProbe(propName) { + GenericWorker.call(this, "DataLengthProbe for " + propName); + this.propName = propName; + this.withStreamInfo(propName, 0); +} +utils.inherits(DataLengthProbe, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +DataLengthProbe.prototype.processChunk = function (chunk) { + if(chunk) { + var length = this.streamInfo[this.propName] || 0; + this.streamInfo[this.propName] = length + chunk.data.length; + } + GenericWorker.prototype.processChunk.call(this, chunk); +}; +module.exports = DataLengthProbe; + + +},{"../utils":32,"./GenericWorker":28}],27:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var GenericWorker = require('./GenericWorker'); + +// the size of the generated chunks +// TODO expose this as a public variable +var DEFAULT_BLOCK_SIZE = 16 * 1024; + +/** + * A worker that reads a content and emits chunks. + * @constructor + * @param {Promise} dataP the promise of the data to split + */ +function DataWorker(dataP) { + GenericWorker.call(this, "DataWorker"); + var self = this; + this.dataIsReady = false; + this.index = 0; + this.max = 0; + this.data = null; + this.type = ""; + + this._tickScheduled = false; + + dataP.then(function (data) { + self.dataIsReady = true; + self.data = data; + self.max = data && data.length || 0; + self.type = utils.getTypeOf(data); + if(!self.isPaused) { + self._tickAndRepeat(); + } + }, function (e) { + self.error(e); + }); +} + +utils.inherits(DataWorker, GenericWorker); + +/** + * @see GenericWorker.cleanUp + */ +DataWorker.prototype.cleanUp = function () { + GenericWorker.prototype.cleanUp.call(this); + this.data = null; +}; + +/** + * @see GenericWorker.resume + */ +DataWorker.prototype.resume = function () { + if(!GenericWorker.prototype.resume.call(this)) { + return false; + } + + if (!this._tickScheduled && this.dataIsReady) { + this._tickScheduled = true; + utils.delay(this._tickAndRepeat, [], this); + } + return true; +}; + +/** + * Trigger a tick a schedule an other call to this function. + */ +DataWorker.prototype._tickAndRepeat = function() { + this._tickScheduled = false; + if(this.isPaused || this.isFinished) { + return; + } + this._tick(); + if(!this.isFinished) { + utils.delay(this._tickAndRepeat, [], this); + this._tickScheduled = true; + } +}; + +/** + * Read and push a chunk. + */ +DataWorker.prototype._tick = function() { + + if(this.isPaused || this.isFinished) { + return false; + } + + var size = DEFAULT_BLOCK_SIZE; + var data = null, nextIndex = Math.min(this.max, this.index + size); + if (this.index >= this.max) { + // EOF + return this.end(); + } else { + switch(this.type) { + case "string": + data = this.data.substring(this.index, nextIndex); + break; + case "uint8array": + data = this.data.subarray(this.index, nextIndex); + break; + case "array": + case "nodebuffer": + data = this.data.slice(this.index, nextIndex); + break; + } + this.index = nextIndex; + return this.push({ + data : data, + meta : { + percent : this.max ? this.index / this.max * 100 : 0 + } + }); + } +}; + +module.exports = DataWorker; + +},{"../utils":32,"./GenericWorker":28}],28:[function(require,module,exports){ +'use strict'; + +/** + * A worker that does nothing but passing chunks to the next one. This is like + * a nodejs stream but with some differences. On the good side : + * - it works on IE 6-9 without any issue / polyfill + * - it weights less than the full dependencies bundled with browserify + * - it forwards errors (no need to declare an error handler EVERYWHERE) + * + * A chunk is an object with 2 attributes : `meta` and `data`. The former is an + * object containing anything (`percent` for example), see each worker for more + * details. The latter is the real data (String, Uint8Array, etc). + * + * @constructor + * @param {String} name the name of the stream (mainly used for debugging purposes) + */ +function GenericWorker(name) { + // the name of the worker + this.name = name || "default"; + // an object containing metadata about the workers chain + this.streamInfo = {}; + // an error which happened when the worker was paused + this.generatedError = null; + // an object containing metadata to be merged by this worker into the general metadata + this.extraStreamInfo = {}; + // true if the stream is paused (and should not do anything), false otherwise + this.isPaused = true; + // true if the stream is finished (and should not do anything), false otherwise + this.isFinished = false; + // true if the stream is locked to prevent further structure updates (pipe), false otherwise + this.isLocked = false; + // the event listeners + this._listeners = { + 'data':[], + 'end':[], + 'error':[] + }; + // the previous worker, if any + this.previous = null; +} + +GenericWorker.prototype = { + /** + * Push a chunk to the next workers. + * @param {Object} chunk the chunk to push + */ + push : function (chunk) { + this.emit("data", chunk); + }, + /** + * End the stream. + * @return {Boolean} true if this call ended the worker, false otherwise. + */ + end : function () { + if (this.isFinished) { + return false; + } + + this.flush(); + try { + this.emit("end"); + this.cleanUp(); + this.isFinished = true; + } catch (e) { + this.emit("error", e); + } + return true; + }, + /** + * End the stream with an error. + * @param {Error} e the error which caused the premature end. + * @return {Boolean} true if this call ended the worker with an error, false otherwise. + */ + error : function (e) { + if (this.isFinished) { + return false; + } + + if(this.isPaused) { + this.generatedError = e; + } else { + this.isFinished = true; + + this.emit("error", e); + + // in the workers chain exploded in the middle of the chain, + // the error event will go downward but we also need to notify + // workers upward that there has been an error. + if(this.previous) { + this.previous.error(e); + } + + this.cleanUp(); + } + return true; + }, + /** + * Add a callback on an event. + * @param {String} name the name of the event (data, end, error) + * @param {Function} listener the function to call when the event is triggered + * @return {GenericWorker} the current object for chainability + */ + on : function (name, listener) { + this._listeners[name].push(listener); + return this; + }, + /** + * Clean any references when a worker is ending. + */ + cleanUp : function () { + this.streamInfo = this.generatedError = this.extraStreamInfo = null; + this._listeners = []; + }, + /** + * Trigger an event. This will call registered callback with the provided arg. + * @param {String} name the name of the event (data, end, error) + * @param {Object} arg the argument to call the callback with. + */ + emit : function (name, arg) { + if (this._listeners[name]) { + for(var i = 0; i < this._listeners[name].length; i++) { + this._listeners[name][i].call(this, arg); + } + } + }, + /** + * Chain a worker with an other. + * @param {Worker} next the worker receiving events from the current one. + * @return {worker} the next worker for chainability + */ + pipe : function (next) { + return next.registerPrevious(this); + }, + /** + * Same as `pipe` in the other direction. + * Using an API with `pipe(next)` is very easy. + * Implementing the API with the point of view of the next one registering + * a source is easier, see the ZipFileWorker. + * @param {Worker} previous the previous worker, sending events to this one + * @return {Worker} the current worker for chainability + */ + registerPrevious : function (previous) { + if (this.isLocked) { + throw new Error("The stream '" + this + "' has already been used."); + } + + // sharing the streamInfo... + this.streamInfo = previous.streamInfo; + // ... and adding our own bits + this.mergeStreamInfo(); + this.previous = previous; + var self = this; + previous.on('data', function (chunk) { + self.processChunk(chunk); + }); + previous.on('end', function () { + self.end(); + }); + previous.on('error', function (e) { + self.error(e); + }); + return this; + }, + /** + * Pause the stream so it doesn't send events anymore. + * @return {Boolean} true if this call paused the worker, false otherwise. + */ + pause : function () { + if(this.isPaused || this.isFinished) { + return false; + } + this.isPaused = true; + + if(this.previous) { + this.previous.pause(); + } + return true; + }, + /** + * Resume a paused stream. + * @return {Boolean} true if this call resumed the worker, false otherwise. + */ + resume : function () { + if(!this.isPaused || this.isFinished) { + return false; + } + this.isPaused = false; + + // if true, the worker tried to resume but failed + var withError = false; + if(this.generatedError) { + this.error(this.generatedError); + withError = true; + } + if(this.previous) { + this.previous.resume(); + } + + return !withError; + }, + /** + * Flush any remaining bytes as the stream is ending. + */ + flush : function () {}, + /** + * Process a chunk. This is usually the method overridden. + * @param {Object} chunk the chunk to process. + */ + processChunk : function(chunk) { + this.push(chunk); + }, + /** + * Add a key/value to be added in the workers chain streamInfo once activated. + * @param {String} key the key to use + * @param {Object} value the associated value + * @return {Worker} the current worker for chainability + */ + withStreamInfo : function (key, value) { + this.extraStreamInfo[key] = value; + this.mergeStreamInfo(); + return this; + }, + /** + * Merge this worker's streamInfo into the chain's streamInfo. + */ + mergeStreamInfo : function () { + for(var key in this.extraStreamInfo) { + if (!this.extraStreamInfo.hasOwnProperty(key)) { + continue; + } + this.streamInfo[key] = this.extraStreamInfo[key]; + } + }, + + /** + * Lock the stream to prevent further updates on the workers chain. + * After calling this method, all calls to pipe will fail. + */ + lock: function () { + if (this.isLocked) { + throw new Error("The stream '" + this + "' has already been used."); + } + this.isLocked = true; + if (this.previous) { + this.previous.lock(); + } + }, + + /** + * + * Pretty print the workers chain. + */ + toString : function () { + var me = "Worker " + this.name; + if (this.previous) { + return this.previous + " -> " + me; + } else { + return me; + } + } +}; + +module.exports = GenericWorker; + +},{}],29:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var ConvertWorker = require('./ConvertWorker'); +var GenericWorker = require('./GenericWorker'); +var base64 = require('../base64'); +var support = require("../support"); +var external = require("../external"); + +var NodejsStreamOutputAdapter = null; +if (support.nodestream) { + try { + NodejsStreamOutputAdapter = require('../nodejs/NodejsStreamOutputAdapter'); + } catch(e) {} +} + +/** + * Apply the final transformation of the data. If the user wants a Blob for + * example, it's easier to work with an U8intArray and finally do the + * ArrayBuffer/Blob conversion. + * @param {String} type the name of the final type + * @param {String|Uint8Array|Buffer} content the content to transform + * @param {String} mimeType the mime type of the content, if applicable. + * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the content in the right format. + */ +function transformZipOutput(type, content, mimeType) { + switch(type) { + case "blob" : + return utils.newBlob(utils.transformTo("arraybuffer", content), mimeType); + case "base64" : + return base64.encode(content); + default : + return utils.transformTo(type, content); + } +} + +/** + * Concatenate an array of data of the given type. + * @param {String} type the type of the data in the given array. + * @param {Array} dataArray the array containing the data chunks to concatenate + * @return {String|Uint8Array|Buffer} the concatenated data + * @throws Error if the asked type is unsupported + */ +function concat (type, dataArray) { + var i, index = 0, res = null, totalLength = 0; + for(i = 0; i < dataArray.length; i++) { + totalLength += dataArray[i].length; + } + switch(type) { + case "string": + return dataArray.join(""); + case "array": + return Array.prototype.concat.apply([], dataArray); + case "uint8array": + res = new Uint8Array(totalLength); + for(i = 0; i < dataArray.length; i++) { + res.set(dataArray[i], index); + index += dataArray[i].length; + } + return res; + case "nodebuffer": + return Buffer.concat(dataArray); + default: + throw new Error("concat : unsupported type '" + type + "'"); + } +} + +/** + * Listen a StreamHelper, accumulate its content and concatenate it into a + * complete block. + * @param {StreamHelper} helper the helper to use. + * @param {Function} updateCallback a callback called on each update. Called + * with one arg : + * - the metadata linked to the update received. + * @return Promise the promise for the accumulation. + */ +function accumulate(helper, updateCallback) { + return new external.Promise(function (resolve, reject){ + var dataArray = []; + var chunkType = helper._internalType, + resultType = helper._outputType, + mimeType = helper._mimeType; + helper + .on('data', function (data, meta) { + dataArray.push(data); + if(updateCallback) { + updateCallback(meta); + } + }) + .on('error', function(err) { + dataArray = []; + reject(err); + }) + .on('end', function (){ + try { + var result = transformZipOutput(resultType, concat(chunkType, dataArray), mimeType); + resolve(result); + } catch (e) { + reject(e); + } + dataArray = []; + }) + .resume(); + }); +} + +/** + * An helper to easily use workers outside of JSZip. + * @constructor + * @param {Worker} worker the worker to wrap + * @param {String} outputType the type of data expected by the use + * @param {String} mimeType the mime type of the content, if applicable. + */ +function StreamHelper(worker, outputType, mimeType) { + var internalType = outputType; + switch(outputType) { + case "blob": + case "arraybuffer": + internalType = "uint8array"; + break; + case "base64": + internalType = "string"; + break; + } + + try { + // the type used internally + this._internalType = internalType; + // the type used to output results + this._outputType = outputType; + // the mime type + this._mimeType = mimeType; + utils.checkSupport(internalType); + this._worker = worker.pipe(new ConvertWorker(internalType)); + // the last workers can be rewired without issues but we need to + // prevent any updates on previous workers. + worker.lock(); + } catch(e) { + this._worker = new GenericWorker("error"); + this._worker.error(e); + } +} + +StreamHelper.prototype = { + /** + * Listen a StreamHelper, accumulate its content and concatenate it into a + * complete block. + * @param {Function} updateCb the update callback. + * @return Promise the promise for the accumulation. + */ + accumulate : function (updateCb) { + return accumulate(this, updateCb); + }, + /** + * Add a listener on an event triggered on a stream. + * @param {String} evt the name of the event + * @param {Function} fn the listener + * @return {StreamHelper} the current helper. + */ + on : function (evt, fn) { + var self = this; + + if(evt === "data") { + this._worker.on(evt, function (chunk) { + fn.call(self, chunk.data, chunk.meta); + }); + } else { + this._worker.on(evt, function () { + utils.delay(fn, arguments, self); + }); + } + return this; + }, + /** + * Resume the flow of chunks. + * @return {StreamHelper} the current helper. + */ + resume : function () { + utils.delay(this._worker.resume, [], this._worker); + return this; + }, + /** + * Pause the flow of chunks. + * @return {StreamHelper} the current helper. + */ + pause : function () { + this._worker.pause(); + return this; + }, + /** + * Return a nodejs stream for this helper. + * @param {Function} updateCb the update callback. + * @return {NodejsStreamOutputAdapter} the nodejs stream. + */ + toNodejsStream : function (updateCb) { + utils.checkSupport("nodestream"); + if (this._outputType !== "nodebuffer") { + // an object stream containing blob/arraybuffer/uint8array/string + // is strange and I don't know if it would be useful. + // I you find this comment and have a good usecase, please open a + // bug report ! + throw new Error(this._outputType + " is not supported by this method"); + } + + return new NodejsStreamOutputAdapter(this, { + objectMode : this._outputType !== "nodebuffer" + }, updateCb); + } +}; + + +module.exports = StreamHelper; + +},{"../base64":1,"../external":6,"../nodejs/NodejsStreamOutputAdapter":13,"../support":30,"../utils":32,"./ConvertWorker":24,"./GenericWorker":28}],30:[function(require,module,exports){ +'use strict'; + +exports.base64 = true; +exports.array = true; +exports.string = true; +exports.arraybuffer = typeof ArrayBuffer !== "undefined" && typeof Uint8Array !== "undefined"; +exports.nodebuffer = typeof Buffer !== "undefined"; +// contains true if JSZip can read/generate Uint8Array, false otherwise. +exports.uint8array = typeof Uint8Array !== "undefined"; + +if (typeof ArrayBuffer === "undefined") { + exports.blob = false; +} +else { + var buffer = new ArrayBuffer(0); + try { + exports.blob = new Blob([buffer], { + type: "application/zip" + }).size === 0; + } + catch (e) { + try { + var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder; + var builder = new Builder(); + builder.append(buffer); + exports.blob = builder.getBlob('application/zip').size === 0; + } + catch (e) { + exports.blob = false; + } + } +} + +try { + exports.nodestream = !!require('readable-stream').Readable; +} catch(e) { + exports.nodestream = false; +} + +},{"readable-stream":16}],31:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); +var support = require('./support'); +var nodejsUtils = require('./nodejsUtils'); +var GenericWorker = require('./stream/GenericWorker'); + +/** + * The following functions come from pako, from pako/lib/utils/strings + * released under the MIT license, see pako https://github.com/nodeca/pako/ + */ + +// Table with utf8 lengths (calculated by first byte of sequence) +// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS, +// because max possible codepoint is 0x10ffff +var _utf8len = new Array(256); +for (var i=0; i<256; i++) { + _utf8len[i] = (i >= 252 ? 6 : i >= 248 ? 5 : i >= 240 ? 4 : i >= 224 ? 3 : i >= 192 ? 2 : 1); +} +_utf8len[254]=_utf8len[254]=1; // Invalid sequence start + +// convert string to array (typed, when possible) +var string2buf = function (str) { + var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0; + + // count binary size + for (m_pos = 0; m_pos < str_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) { + c2 = str.charCodeAt(m_pos+1); + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); + m_pos++; + } + } + buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4; + } + + // allocate buffer + if (support.uint8array) { + buf = new Uint8Array(buf_len); + } else { + buf = new Array(buf_len); + } + + // convert + for (i=0, m_pos = 0; i < buf_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) { + c2 = str.charCodeAt(m_pos+1); + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); + m_pos++; + } + } + if (c < 0x80) { + /* one byte */ + buf[i++] = c; + } else if (c < 0x800) { + /* two bytes */ + buf[i++] = 0xC0 | (c >>> 6); + buf[i++] = 0x80 | (c & 0x3f); + } else if (c < 0x10000) { + /* three bytes */ + buf[i++] = 0xE0 | (c >>> 12); + buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | (c & 0x3f); + } else { + /* four bytes */ + buf[i++] = 0xf0 | (c >>> 18); + buf[i++] = 0x80 | (c >>> 12 & 0x3f); + buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | (c & 0x3f); + } + } + + return buf; +}; + +// Calculate max possible position in utf8 buffer, +// that will not break sequence. If that's not possible +// - (very small limits) return max size as is. +// +// buf[] - utf8 bytes array +// max - length limit (mandatory); +var utf8border = function(buf, max) { + var pos; + + max = max || buf.length; + if (max > buf.length) { max = buf.length; } + + // go back from last position, until start of sequence found + pos = max-1; + while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; } + + // Fuckup - very small and broken sequence, + // return max, because we should return something anyway. + if (pos < 0) { return max; } + + // If we came to start of buffer - that means vuffer is too small, + // return max too. + if (pos === 0) { return max; } + + return (pos + _utf8len[buf[pos]] > max) ? pos : max; +}; + +// convert array to string +var buf2string = function (buf) { + var str, i, out, c, c_len; + var len = buf.length; + + // Reserve max possible length (2 words per char) + // NB: by unknown reasons, Array is significantly faster for + // String.fromCharCode.apply than Uint16Array. + var utf16buf = new Array(len*2); + + for (out=0, i=0; i 4) { utf16buf[out++] = 0xfffd; i += c_len-1; continue; } + + // apply mask on first byte + c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07; + // join the rest + while (c_len > 1 && i < len) { + c = (c << 6) | (buf[i++] & 0x3f); + c_len--; + } + + // terminated by end of string? + if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; } + + if (c < 0x10000) { + utf16buf[out++] = c; + } else { + c -= 0x10000; + utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff); + utf16buf[out++] = 0xdc00 | (c & 0x3ff); + } + } + + // shrinkBuf(utf16buf, out) + if (utf16buf.length !== out) { + if(utf16buf.subarray) { + utf16buf = utf16buf.subarray(0, out); + } else { + utf16buf.length = out; + } + } + + // return String.fromCharCode.apply(null, utf16buf); + return utils.applyFromCharCode(utf16buf); +}; + + +// That's all for the pako functions. + + +/** + * Transform a javascript string into an array (typed if possible) of bytes, + * UTF-8 encoded. + * @param {String} str the string to encode + * @return {Array|Uint8Array|Buffer} the UTF-8 encoded string. + */ +exports.utf8encode = function utf8encode(str) { + if (support.nodebuffer) { + return nodejsUtils.newBufferFrom(str, "utf-8"); + } + + return string2buf(str); +}; + + +/** + * Transform a bytes array (or a representation) representing an UTF-8 encoded + * string into a javascript string. + * @param {Array|Uint8Array|Buffer} buf the data de decode + * @return {String} the decoded string. + */ +exports.utf8decode = function utf8decode(buf) { + if (support.nodebuffer) { + return utils.transformTo("nodebuffer", buf).toString("utf-8"); + } + + buf = utils.transformTo(support.uint8array ? "uint8array" : "array", buf); + + return buf2string(buf); +}; + +/** + * A worker to decode utf8 encoded binary chunks into string chunks. + * @constructor + */ +function Utf8DecodeWorker() { + GenericWorker.call(this, "utf-8 decode"); + // the last bytes if a chunk didn't end with a complete codepoint. + this.leftOver = null; +} +utils.inherits(Utf8DecodeWorker, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +Utf8DecodeWorker.prototype.processChunk = function (chunk) { + + var data = utils.transformTo(support.uint8array ? "uint8array" : "array", chunk.data); + + // 1st step, re-use what's left of the previous chunk + if (this.leftOver && this.leftOver.length) { + if(support.uint8array) { + var previousData = data; + data = new Uint8Array(previousData.length + this.leftOver.length); + data.set(this.leftOver, 0); + data.set(previousData, this.leftOver.length); + } else { + data = this.leftOver.concat(data); + } + this.leftOver = null; + } + + var nextBoundary = utf8border(data); + var usableData = data; + if (nextBoundary !== data.length) { + if (support.uint8array) { + usableData = data.subarray(0, nextBoundary); + this.leftOver = data.subarray(nextBoundary, data.length); + } else { + usableData = data.slice(0, nextBoundary); + this.leftOver = data.slice(nextBoundary, data.length); + } + } + + this.push({ + data : exports.utf8decode(usableData), + meta : chunk.meta + }); +}; + +/** + * @see GenericWorker.flush + */ +Utf8DecodeWorker.prototype.flush = function () { + if(this.leftOver && this.leftOver.length) { + this.push({ + data : exports.utf8decode(this.leftOver), + meta : {} + }); + this.leftOver = null; + } +}; +exports.Utf8DecodeWorker = Utf8DecodeWorker; + +/** + * A worker to endcode string chunks into utf8 encoded binary chunks. + * @constructor + */ +function Utf8EncodeWorker() { + GenericWorker.call(this, "utf-8 encode"); +} +utils.inherits(Utf8EncodeWorker, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +Utf8EncodeWorker.prototype.processChunk = function (chunk) { + this.push({ + data : exports.utf8encode(chunk.data), + meta : chunk.meta + }); +}; +exports.Utf8EncodeWorker = Utf8EncodeWorker; + +},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(require,module,exports){ +'use strict'; + +var support = require('./support'); +var base64 = require('./base64'); +var nodejsUtils = require('./nodejsUtils'); +var setImmediate = require('core-js/library/fn/set-immediate'); +var external = require("./external"); + + +/** + * Convert a string that pass as a "binary string": it should represent a byte + * array but may have > 255 char codes. Be sure to take only the first byte + * and returns the byte array. + * @param {String} str the string to transform. + * @return {Array|Uint8Array} the string in a binary format. + */ +function string2binary(str) { + var result = null; + if (support.uint8array) { + result = new Uint8Array(str.length); + } else { + result = new Array(str.length); + } + return stringToArrayLike(str, result); +} + +/** + * Create a new blob with the given content and the given type. + * @param {String|ArrayBuffer} part the content to put in the blob. DO NOT use + * an Uint8Array because the stock browser of android 4 won't accept it (it + * will be silently converted to a string, "[object Uint8Array]"). + * + * Use only ONE part to build the blob to avoid a memory leak in IE11 / Edge: + * when a large amount of Array is used to create the Blob, the amount of + * memory consumed is nearly 100 times the original data amount. + * + * @param {String} type the mime type of the blob. + * @return {Blob} the created blob. + */ +exports.newBlob = function(part, type) { + exports.checkSupport("blob"); + + try { + // Blob constructor + return new Blob([part], { + type: type + }); + } + catch (e) { + + try { + // deprecated, browser only, old way + var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder; + var builder = new Builder(); + builder.append(part); + return builder.getBlob(type); + } + catch (e) { + + // well, fuck ?! + throw new Error("Bug : can't construct the Blob."); + } + } + + +}; +/** + * The identity function. + * @param {Object} input the input. + * @return {Object} the same input. + */ +function identity(input) { + return input; +} + +/** + * Fill in an array with a string. + * @param {String} str the string to use. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to fill in (will be mutated). + * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated array. + */ +function stringToArrayLike(str, array) { + for (var i = 0; i < str.length; ++i) { + array[i] = str.charCodeAt(i) & 0xFF; + } + return array; +} + +/** + * An helper for the function arrayLikeToString. + * This contains static informations and functions that + * can be optimized by the browser JIT compiler. + */ +var arrayToStringHelper = { + /** + * Transform an array of int into a string, chunk by chunk. + * See the performances notes on arrayLikeToString. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform. + * @param {String} type the type of the array. + * @param {Integer} chunk the chunk size. + * @return {String} the resulting string. + * @throws Error if the chunk is too big for the stack. + */ + stringifyByChunk: function(array, type, chunk) { + var result = [], k = 0, len = array.length; + // shortcut + if (len <= chunk) { + return String.fromCharCode.apply(null, array); + } + while (k < len) { + if (type === "array" || type === "nodebuffer") { + result.push(String.fromCharCode.apply(null, array.slice(k, Math.min(k + chunk, len)))); + } + else { + result.push(String.fromCharCode.apply(null, array.subarray(k, Math.min(k + chunk, len)))); + } + k += chunk; + } + return result.join(""); + }, + /** + * Call String.fromCharCode on every item in the array. + * This is the naive implementation, which generate A LOT of intermediate string. + * This should be used when everything else fail. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform. + * @return {String} the result. + */ + stringifyByChar: function(array){ + var resultStr = ""; + for(var i = 0; i < array.length; i++) { + resultStr += String.fromCharCode(array[i]); + } + return resultStr; + }, + applyCanBeUsed : { + /** + * true if the browser accepts to use String.fromCharCode on Uint8Array + */ + uint8array : (function () { + try { + return support.uint8array && String.fromCharCode.apply(null, new Uint8Array(1)).length === 1; + } catch (e) { + return false; + } + })(), + /** + * true if the browser accepts to use String.fromCharCode on nodejs Buffer. + */ + nodebuffer : (function () { + try { + return support.nodebuffer && String.fromCharCode.apply(null, nodejsUtils.allocBuffer(1)).length === 1; + } catch (e) { + return false; + } + })() + } +}; + +/** + * Transform an array-like object to a string. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform. + * @return {String} the result. + */ +function arrayLikeToString(array) { + // Performances notes : + // -------------------- + // String.fromCharCode.apply(null, array) is the fastest, see + // see http://jsperf.com/converting-a-uint8array-to-a-string/2 + // but the stack is limited (and we can get huge arrays !). + // + // result += String.fromCharCode(array[i]); generate too many strings ! + // + // This code is inspired by http://jsperf.com/arraybuffer-to-string-apply-performance/2 + // TODO : we now have workers that split the work. Do we still need that ? + var chunk = 65536, + type = exports.getTypeOf(array), + canUseApply = true; + if (type === "uint8array") { + canUseApply = arrayToStringHelper.applyCanBeUsed.uint8array; + } else if (type === "nodebuffer") { + canUseApply = arrayToStringHelper.applyCanBeUsed.nodebuffer; + } + + if (canUseApply) { + while (chunk > 1) { + try { + return arrayToStringHelper.stringifyByChunk(array, type, chunk); + } catch (e) { + chunk = Math.floor(chunk / 2); + } + } + } + + // no apply or chunk error : slow and painful algorithm + // default browser on android 4.* + return arrayToStringHelper.stringifyByChar(array); +} + +exports.applyFromCharCode = arrayLikeToString; + + +/** + * Copy the data from an array-like to an other array-like. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayFrom the origin array. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayTo the destination array which will be mutated. + * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated destination array. + */ +function arrayLikeToArrayLike(arrayFrom, arrayTo) { + for (var i = 0; i < arrayFrom.length; i++) { + arrayTo[i] = arrayFrom[i]; + } + return arrayTo; +} + +// a matrix containing functions to transform everything into everything. +var transform = {}; + +// string to ? +transform["string"] = { + "string": identity, + "array": function(input) { + return stringToArrayLike(input, new Array(input.length)); + }, + "arraybuffer": function(input) { + return transform["string"]["uint8array"](input).buffer; + }, + "uint8array": function(input) { + return stringToArrayLike(input, new Uint8Array(input.length)); + }, + "nodebuffer": function(input) { + return stringToArrayLike(input, nodejsUtils.allocBuffer(input.length)); + } +}; + +// array to ? +transform["array"] = { + "string": arrayLikeToString, + "array": identity, + "arraybuffer": function(input) { + return (new Uint8Array(input)).buffer; + }, + "uint8array": function(input) { + return new Uint8Array(input); + }, + "nodebuffer": function(input) { + return nodejsUtils.newBufferFrom(input); + } +}; + +// arraybuffer to ? +transform["arraybuffer"] = { + "string": function(input) { + return arrayLikeToString(new Uint8Array(input)); + }, + "array": function(input) { + return arrayLikeToArrayLike(new Uint8Array(input), new Array(input.byteLength)); + }, + "arraybuffer": identity, + "uint8array": function(input) { + return new Uint8Array(input); + }, + "nodebuffer": function(input) { + return nodejsUtils.newBufferFrom(new Uint8Array(input)); + } +}; + +// uint8array to ? +transform["uint8array"] = { + "string": arrayLikeToString, + "array": function(input) { + return arrayLikeToArrayLike(input, new Array(input.length)); + }, + "arraybuffer": function(input) { + return input.buffer; + }, + "uint8array": identity, + "nodebuffer": function(input) { + return nodejsUtils.newBufferFrom(input); + } +}; + +// nodebuffer to ? +transform["nodebuffer"] = { + "string": arrayLikeToString, + "array": function(input) { + return arrayLikeToArrayLike(input, new Array(input.length)); + }, + "arraybuffer": function(input) { + return transform["nodebuffer"]["uint8array"](input).buffer; + }, + "uint8array": function(input) { + return arrayLikeToArrayLike(input, new Uint8Array(input.length)); + }, + "nodebuffer": identity +}; + +/** + * Transform an input into any type. + * The supported output type are : string, array, uint8array, arraybuffer, nodebuffer. + * If no output type is specified, the unmodified input will be returned. + * @param {String} outputType the output type. + * @param {String|Array|ArrayBuffer|Uint8Array|Buffer} input the input to convert. + * @throws {Error} an Error if the browser doesn't support the requested output type. + */ +exports.transformTo = function(outputType, input) { + if (!input) { + // undefined, null, etc + // an empty string won't harm. + input = ""; + } + if (!outputType) { + return input; + } + exports.checkSupport(outputType); + var inputType = exports.getTypeOf(input); + var result = transform[inputType][outputType](input); + return result; +}; + +/** + * Return the type of the input. + * The type will be in a format valid for JSZip.utils.transformTo : string, array, uint8array, arraybuffer. + * @param {Object} input the input to identify. + * @return {String} the (lowercase) type of the input. + */ +exports.getTypeOf = function(input) { + if (typeof input === "string") { + return "string"; + } + if (Object.prototype.toString.call(input) === "[object Array]") { + return "array"; + } + if (support.nodebuffer && nodejsUtils.isBuffer(input)) { + return "nodebuffer"; + } + if (support.uint8array && input instanceof Uint8Array) { + return "uint8array"; + } + if (support.arraybuffer && input instanceof ArrayBuffer) { + return "arraybuffer"; + } +}; + +/** + * Throw an exception if the type is not supported. + * @param {String} type the type to check. + * @throws {Error} an Error if the browser doesn't support the requested type. + */ +exports.checkSupport = function(type) { + var supported = support[type.toLowerCase()]; + if (!supported) { + throw new Error(type + " is not supported by this platform"); + } +}; + +exports.MAX_VALUE_16BITS = 65535; +exports.MAX_VALUE_32BITS = -1; // well, "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" is parsed as -1 + +/** + * Prettify a string read as binary. + * @param {string} str the string to prettify. + * @return {string} a pretty string. + */ +exports.pretty = function(str) { + var res = '', + code, i; + for (i = 0; i < (str || "").length; i++) { + code = str.charCodeAt(i); + res += '\\x' + (code < 16 ? "0" : "") + code.toString(16).toUpperCase(); + } + return res; +}; + +/** + * Defer the call of a function. + * @param {Function} callback the function to call asynchronously. + * @param {Array} args the arguments to give to the callback. + */ +exports.delay = function(callback, args, self) { + setImmediate(function () { + callback.apply(self || null, args || []); + }); +}; + +/** + * Extends a prototype with an other, without calling a constructor with + * side effects. Inspired by nodejs' `utils.inherits` + * @param {Function} ctor the constructor to augment + * @param {Function} superCtor the parent constructor to use + */ +exports.inherits = function (ctor, superCtor) { + var Obj = function() {}; + Obj.prototype = superCtor.prototype; + ctor.prototype = new Obj(); +}; + +/** + * Merge the objects passed as parameters into a new one. + * @private + * @param {...Object} var_args All objects to merge. + * @return {Object} a new object with the data of the others. + */ +exports.extend = function() { + var result = {}, i, attr; + for (i = 0; i < arguments.length; i++) { // arguments is not enumerable in some browsers + for (attr in arguments[i]) { + if (arguments[i].hasOwnProperty(attr) && typeof result[attr] === "undefined") { + result[attr] = arguments[i][attr]; + } + } + } + return result; +}; + +/** + * Transform arbitrary content into a Promise. + * @param {String} name a name for the content being processed. + * @param {Object} inputData the content to process. + * @param {Boolean} isBinary true if the content is not an unicode string + * @param {Boolean} isOptimizedBinaryString true if the string content only has one byte per character. + * @param {Boolean} isBase64 true if the string content is encoded with base64. + * @return {Promise} a promise in a format usable by JSZip. + */ +exports.prepareContent = function(name, inputData, isBinary, isOptimizedBinaryString, isBase64) { + + // if inputData is already a promise, this flatten it. + var promise = external.Promise.resolve(inputData).then(function(data) { + + + var isBlob = support.blob && (data instanceof Blob || ['[object File]', '[object Blob]'].indexOf(Object.prototype.toString.call(data)) !== -1); + + if (isBlob && typeof FileReader !== "undefined") { + return new external.Promise(function (resolve, reject) { + var reader = new FileReader(); + + reader.onload = function(e) { + resolve(e.target.result); + }; + reader.onerror = function(e) { + reject(e.target.error); + }; + reader.readAsArrayBuffer(data); + }); + } else { + return data; + } + }); + + return promise.then(function(data) { + var dataType = exports.getTypeOf(data); + + if (!dataType) { + return external.Promise.reject( + new Error("Can't read the data of '" + name + "'. Is it " + + "in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?") + ); + } + // special case : it's way easier to work with Uint8Array than with ArrayBuffer + if (dataType === "arraybuffer") { + data = exports.transformTo("uint8array", data); + } else if (dataType === "string") { + if (isBase64) { + data = base64.decode(data); + } + else if (isBinary) { + // optimizedBinaryString === true means that the file has already been filtered with a 0xFF mask + if (isOptimizedBinaryString !== true) { + // this is a string, not in a base64 format. + // Be sure that this is a correct "binary string" + data = string2binary(data); + } + } + } + return data; + }); +}; + +},{"./base64":1,"./external":6,"./nodejsUtils":14,"./support":30,"core-js/library/fn/set-immediate":36}],33:[function(require,module,exports){ +'use strict'; +var readerFor = require('./reader/readerFor'); +var utils = require('./utils'); +var sig = require('./signature'); +var ZipEntry = require('./zipEntry'); +var utf8 = require('./utf8'); +var support = require('./support'); +// class ZipEntries {{{ +/** + * All the entries in the zip file. + * @constructor + * @param {Object} loadOptions Options for loading the stream. + */ +function ZipEntries(loadOptions) { + this.files = []; + this.loadOptions = loadOptions; +} +ZipEntries.prototype = { + /** + * Check that the reader is on the specified signature. + * @param {string} expectedSignature the expected signature. + * @throws {Error} if it is an other signature. + */ + checkSignature: function(expectedSignature) { + if (!this.reader.readAndCheckSignature(expectedSignature)) { + this.reader.index -= 4; + var signature = this.reader.readString(4); + throw new Error("Corrupted zip or bug: unexpected signature " + "(" + utils.pretty(signature) + ", expected " + utils.pretty(expectedSignature) + ")"); + } + }, + /** + * Check if the given signature is at the given index. + * @param {number} askedIndex the index to check. + * @param {string} expectedSignature the signature to expect. + * @return {boolean} true if the signature is here, false otherwise. + */ + isSignature: function(askedIndex, expectedSignature) { + var currentIndex = this.reader.index; + this.reader.setIndex(askedIndex); + var signature = this.reader.readString(4); + var result = signature === expectedSignature; + this.reader.setIndex(currentIndex); + return result; + }, + /** + * Read the end of the central directory. + */ + readBlockEndOfCentral: function() { + this.diskNumber = this.reader.readInt(2); + this.diskWithCentralDirStart = this.reader.readInt(2); + this.centralDirRecordsOnThisDisk = this.reader.readInt(2); + this.centralDirRecords = this.reader.readInt(2); + this.centralDirSize = this.reader.readInt(4); + this.centralDirOffset = this.reader.readInt(4); + + this.zipCommentLength = this.reader.readInt(2); + // warning : the encoding depends of the system locale + // On a linux machine with LANG=en_US.utf8, this field is utf8 encoded. + // On a windows machine, this field is encoded with the localized windows code page. + var zipComment = this.reader.readData(this.zipCommentLength); + var decodeParamType = support.uint8array ? "uint8array" : "array"; + // To get consistent behavior with the generation part, we will assume that + // this is utf8 encoded unless specified otherwise. + var decodeContent = utils.transformTo(decodeParamType, zipComment); + this.zipComment = this.loadOptions.decodeFileName(decodeContent); + }, + /** + * Read the end of the Zip 64 central directory. + * Not merged with the method readEndOfCentral : + * The end of central can coexist with its Zip64 brother, + * I don't want to read the wrong number of bytes ! + */ + readBlockZip64EndOfCentral: function() { + this.zip64EndOfCentralSize = this.reader.readInt(8); + this.reader.skip(4); + // this.versionMadeBy = this.reader.readString(2); + // this.versionNeeded = this.reader.readInt(2); + this.diskNumber = this.reader.readInt(4); + this.diskWithCentralDirStart = this.reader.readInt(4); + this.centralDirRecordsOnThisDisk = this.reader.readInt(8); + this.centralDirRecords = this.reader.readInt(8); + this.centralDirSize = this.reader.readInt(8); + this.centralDirOffset = this.reader.readInt(8); + + this.zip64ExtensibleData = {}; + var extraDataSize = this.zip64EndOfCentralSize - 44, + index = 0, + extraFieldId, + extraFieldLength, + extraFieldValue; + while (index < extraDataSize) { + extraFieldId = this.reader.readInt(2); + extraFieldLength = this.reader.readInt(4); + extraFieldValue = this.reader.readData(extraFieldLength); + this.zip64ExtensibleData[extraFieldId] = { + id: extraFieldId, + length: extraFieldLength, + value: extraFieldValue + }; + } + }, + /** + * Read the end of the Zip 64 central directory locator. + */ + readBlockZip64EndOfCentralLocator: function() { + this.diskWithZip64CentralDirStart = this.reader.readInt(4); + this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8); + this.disksCount = this.reader.readInt(4); + if (this.disksCount > 1) { + throw new Error("Multi-volumes zip are not supported"); + } + }, + /** + * Read the local files, based on the offset read in the central part. + */ + readLocalFiles: function() { + var i, file; + for (i = 0; i < this.files.length; i++) { + file = this.files[i]; + this.reader.setIndex(file.localHeaderOffset); + this.checkSignature(sig.LOCAL_FILE_HEADER); + file.readLocalPart(this.reader); + file.handleUTF8(); + file.processAttributes(); + } + }, + /** + * Read the central directory. + */ + readCentralDir: function() { + var file; + + this.reader.setIndex(this.centralDirOffset); + while (this.reader.readAndCheckSignature(sig.CENTRAL_FILE_HEADER)) { + file = new ZipEntry({ + zip64: this.zip64 + }, this.loadOptions); + file.readCentralPart(this.reader); + this.files.push(file); + } + + if (this.centralDirRecords !== this.files.length) { + if (this.centralDirRecords !== 0 && this.files.length === 0) { + // We expected some records but couldn't find ANY. + // This is really suspicious, as if something went wrong. + throw new Error("Corrupted zip or bug: expected " + this.centralDirRecords + " records in central dir, got " + this.files.length); + } else { + // We found some records but not all. + // Something is wrong but we got something for the user: no error here. + // console.warn("expected", this.centralDirRecords, "records in central dir, got", this.files.length); + } + } + }, + /** + * Read the end of central directory. + */ + readEndOfCentral: function() { + var offset = this.reader.lastIndexOfSignature(sig.CENTRAL_DIRECTORY_END); + if (offset < 0) { + // Check if the content is a truncated zip or complete garbage. + // A "LOCAL_FILE_HEADER" is not required at the beginning (auto + // extractible zip for example) but it can give a good hint. + // If an ajax request was used without responseType, we will also + // get unreadable data. + var isGarbage = !this.isSignature(0, sig.LOCAL_FILE_HEADER); + + if (isGarbage) { + throw new Error("Can't find end of central directory : is this a zip file ? " + + "If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html"); + } else { + throw new Error("Corrupted zip: can't find end of central directory"); + } + + } + this.reader.setIndex(offset); + var endOfCentralDirOffset = offset; + this.checkSignature(sig.CENTRAL_DIRECTORY_END); + this.readBlockEndOfCentral(); + + + /* extract from the zip spec : + 4) If one of the fields in the end of central directory + record is too small to hold required data, the field + should be set to -1 (0xFFFF or 0xFFFFFFFF) and the + ZIP64 format record should be created. + 5) The end of central directory record and the + Zip64 end of central directory locator record must + reside on the same disk when splitting or spanning + an archive. + */ + if (this.diskNumber === utils.MAX_VALUE_16BITS || this.diskWithCentralDirStart === utils.MAX_VALUE_16BITS || this.centralDirRecordsOnThisDisk === utils.MAX_VALUE_16BITS || this.centralDirRecords === utils.MAX_VALUE_16BITS || this.centralDirSize === utils.MAX_VALUE_32BITS || this.centralDirOffset === utils.MAX_VALUE_32BITS) { + this.zip64 = true; + + /* + Warning : the zip64 extension is supported, but ONLY if the 64bits integer read from + the zip file can fit into a 32bits integer. This cannot be solved : JavaScript represents + all numbers as 64-bit double precision IEEE 754 floating point numbers. + So, we have 53bits for integers and bitwise operations treat everything as 32bits. + see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators + and http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf section 8.5 + */ + + // should look for a zip64 EOCD locator + offset = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR); + if (offset < 0) { + throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator"); + } + this.reader.setIndex(offset); + this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR); + this.readBlockZip64EndOfCentralLocator(); + + // now the zip64 EOCD record + if (!this.isSignature(this.relativeOffsetEndOfZip64CentralDir, sig.ZIP64_CENTRAL_DIRECTORY_END)) { + // console.warn("ZIP64 end of central directory not where expected."); + this.relativeOffsetEndOfZip64CentralDir = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_END); + if (this.relativeOffsetEndOfZip64CentralDir < 0) { + throw new Error("Corrupted zip: can't find the ZIP64 end of central directory"); + } + } + this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir); + this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_END); + this.readBlockZip64EndOfCentral(); + } + + var expectedEndOfCentralDirOffset = this.centralDirOffset + this.centralDirSize; + if (this.zip64) { + expectedEndOfCentralDirOffset += 20; // end of central dir 64 locator + expectedEndOfCentralDirOffset += 12 /* should not include the leading 12 bytes */ + this.zip64EndOfCentralSize; + } + + var extraBytes = endOfCentralDirOffset - expectedEndOfCentralDirOffset; + + if (extraBytes > 0) { + // console.warn(extraBytes, "extra bytes at beginning or within zipfile"); + if (this.isSignature(endOfCentralDirOffset, sig.CENTRAL_FILE_HEADER)) { + // The offsets seem wrong, but we have something at the specified offset. + // So… we keep it. + } else { + // the offset is wrong, update the "zero" of the reader + // this happens if data has been prepended (crx files for example) + this.reader.zero = extraBytes; + } + } else if (extraBytes < 0) { + throw new Error("Corrupted zip: missing " + Math.abs(extraBytes) + " bytes."); + } + }, + prepareReader: function(data) { + this.reader = readerFor(data); + }, + /** + * Read a zip file and create ZipEntries. + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the binary string representing a zip file. + */ + load: function(data) { + this.prepareReader(data); + this.readEndOfCentral(); + this.readCentralDir(); + this.readLocalFiles(); + } +}; +// }}} end of ZipEntries +module.exports = ZipEntries; + +},{"./reader/readerFor":22,"./signature":23,"./support":30,"./utf8":31,"./utils":32,"./zipEntry":34}],34:[function(require,module,exports){ +'use strict'; +var readerFor = require('./reader/readerFor'); +var utils = require('./utils'); +var CompressedObject = require('./compressedObject'); +var crc32fn = require('./crc32'); +var utf8 = require('./utf8'); +var compressions = require('./compressions'); +var support = require('./support'); + +var MADE_BY_DOS = 0x00; +var MADE_BY_UNIX = 0x03; + +/** + * Find a compression registered in JSZip. + * @param {string} compressionMethod the method magic to find. + * @return {Object|null} the JSZip compression object, null if none found. + */ +var findCompression = function(compressionMethod) { + for (var method in compressions) { + if (!compressions.hasOwnProperty(method)) { + continue; + } + if (compressions[method].magic === compressionMethod) { + return compressions[method]; + } + } + return null; +}; + +// class ZipEntry {{{ +/** + * An entry in the zip file. + * @constructor + * @param {Object} options Options of the current file. + * @param {Object} loadOptions Options for loading the stream. + */ +function ZipEntry(options, loadOptions) { + this.options = options; + this.loadOptions = loadOptions; +} +ZipEntry.prototype = { + /** + * say if the file is encrypted. + * @return {boolean} true if the file is encrypted, false otherwise. + */ + isEncrypted: function() { + // bit 1 is set + return (this.bitFlag & 0x0001) === 0x0001; + }, + /** + * say if the file has utf-8 filename/comment. + * @return {boolean} true if the filename/comment is in utf-8, false otherwise. + */ + useUTF8: function() { + // bit 11 is set + return (this.bitFlag & 0x0800) === 0x0800; + }, + /** + * Read the local part of a zip file and add the info in this object. + * @param {DataReader} reader the reader to use. + */ + readLocalPart: function(reader) { + var compression, localExtraFieldsLength; + + // we already know everything from the central dir ! + // If the central dir data are false, we are doomed. + // On the bright side, the local part is scary : zip64, data descriptors, both, etc. + // The less data we get here, the more reliable this should be. + // Let's skip the whole header and dash to the data ! + reader.skip(22); + // in some zip created on windows, the filename stored in the central dir contains \ instead of /. + // Strangely, the filename here is OK. + // I would love to treat these zip files as corrupted (see http://www.info-zip.org/FAQ.html#backslashes + // or APPNOTE#4.4.17.1, "All slashes MUST be forward slashes '/'") but there are a lot of bad zip generators... + // Search "unzip mismatching "local" filename continuing with "central" filename version" on + // the internet. + // + // I think I see the logic here : the central directory is used to display + // content and the local directory is used to extract the files. Mixing / and \ + // may be used to display \ to windows users and use / when extracting the files. + // Unfortunately, this lead also to some issues : http://seclists.org/fulldisclosure/2009/Sep/394 + this.fileNameLength = reader.readInt(2); + localExtraFieldsLength = reader.readInt(2); // can't be sure this will be the same as the central dir + // the fileName is stored as binary data, the handleUTF8 method will take care of the encoding. + this.fileName = reader.readData(this.fileNameLength); + reader.skip(localExtraFieldsLength); + + if (this.compressedSize === -1 || this.uncompressedSize === -1) { + throw new Error("Bug or corrupted zip : didn't get enough informations from the central directory " + "(compressedSize === -1 || uncompressedSize === -1)"); + } + + compression = findCompression(this.compressionMethod); + if (compression === null) { // no compression found + throw new Error("Corrupted zip : compression " + utils.pretty(this.compressionMethod) + " unknown (inner file : " + utils.transformTo("string", this.fileName) + ")"); + } + this.decompressed = new CompressedObject(this.compressedSize, this.uncompressedSize, this.crc32, compression, reader.readData(this.compressedSize)); + }, + + /** + * Read the central part of a zip file and add the info in this object. + * @param {DataReader} reader the reader to use. + */ + readCentralPart: function(reader) { + this.versionMadeBy = reader.readInt(2); + reader.skip(2); + // this.versionNeeded = reader.readInt(2); + this.bitFlag = reader.readInt(2); + this.compressionMethod = reader.readString(2); + this.date = reader.readDate(); + this.crc32 = reader.readInt(4); + this.compressedSize = reader.readInt(4); + this.uncompressedSize = reader.readInt(4); + var fileNameLength = reader.readInt(2); + this.extraFieldsLength = reader.readInt(2); + this.fileCommentLength = reader.readInt(2); + this.diskNumberStart = reader.readInt(2); + this.internalFileAttributes = reader.readInt(2); + this.externalFileAttributes = reader.readInt(4); + this.localHeaderOffset = reader.readInt(4); + + if (this.isEncrypted()) { + throw new Error("Encrypted zip are not supported"); + } + + // will be read in the local part, see the comments there + reader.skip(fileNameLength); + this.readExtraFields(reader); + this.parseZIP64ExtraField(reader); + this.fileComment = reader.readData(this.fileCommentLength); + }, + + /** + * Parse the external file attributes and get the unix/dos permissions. + */ + processAttributes: function () { + this.unixPermissions = null; + this.dosPermissions = null; + var madeBy = this.versionMadeBy >> 8; + + // Check if we have the DOS directory flag set. + // We look for it in the DOS and UNIX permissions + // but some unknown platform could set it as a compatibility flag. + this.dir = this.externalFileAttributes & 0x0010 ? true : false; + + if(madeBy === MADE_BY_DOS) { + // first 6 bits (0 to 5) + this.dosPermissions = this.externalFileAttributes & 0x3F; + } + + if(madeBy === MADE_BY_UNIX) { + this.unixPermissions = (this.externalFileAttributes >> 16) & 0xFFFF; + // the octal permissions are in (this.unixPermissions & 0x01FF).toString(8); + } + + // fail safe : if the name ends with a / it probably means a folder + if (!this.dir && this.fileNameStr.slice(-1) === '/') { + this.dir = true; + } + }, + + /** + * Parse the ZIP64 extra field and merge the info in the current ZipEntry. + * @param {DataReader} reader the reader to use. + */ + parseZIP64ExtraField: function(reader) { + + if (!this.extraFields[0x0001]) { + return; + } + + // should be something, preparing the extra reader + var extraReader = readerFor(this.extraFields[0x0001].value); + + // I really hope that these 64bits integer can fit in 32 bits integer, because js + // won't let us have more. + if (this.uncompressedSize === utils.MAX_VALUE_32BITS) { + this.uncompressedSize = extraReader.readInt(8); + } + if (this.compressedSize === utils.MAX_VALUE_32BITS) { + this.compressedSize = extraReader.readInt(8); + } + if (this.localHeaderOffset === utils.MAX_VALUE_32BITS) { + this.localHeaderOffset = extraReader.readInt(8); + } + if (this.diskNumberStart === utils.MAX_VALUE_32BITS) { + this.diskNumberStart = extraReader.readInt(4); + } + }, + /** + * Read the central part of a zip file and add the info in this object. + * @param {DataReader} reader the reader to use. + */ + readExtraFields: function(reader) { + var end = reader.index + this.extraFieldsLength, + extraFieldId, + extraFieldLength, + extraFieldValue; + + if (!this.extraFields) { + this.extraFields = {}; + } + + while (reader.index < end) { + extraFieldId = reader.readInt(2); + extraFieldLength = reader.readInt(2); + extraFieldValue = reader.readData(extraFieldLength); + + this.extraFields[extraFieldId] = { + id: extraFieldId, + length: extraFieldLength, + value: extraFieldValue + }; + } + }, + /** + * Apply an UTF8 transformation if needed. + */ + handleUTF8: function() { + var decodeParamType = support.uint8array ? "uint8array" : "array"; + if (this.useUTF8()) { + this.fileNameStr = utf8.utf8decode(this.fileName); + this.fileCommentStr = utf8.utf8decode(this.fileComment); + } else { + var upath = this.findExtraFieldUnicodePath(); + if (upath !== null) { + this.fileNameStr = upath; + } else { + // ASCII text or unsupported code page + var fileNameByteArray = utils.transformTo(decodeParamType, this.fileName); + this.fileNameStr = this.loadOptions.decodeFileName(fileNameByteArray); + } + + var ucomment = this.findExtraFieldUnicodeComment(); + if (ucomment !== null) { + this.fileCommentStr = ucomment; + } else { + // ASCII text or unsupported code page + var commentByteArray = utils.transformTo(decodeParamType, this.fileComment); + this.fileCommentStr = this.loadOptions.decodeFileName(commentByteArray); + } + } + }, + + /** + * Find the unicode path declared in the extra field, if any. + * @return {String} the unicode path, null otherwise. + */ + findExtraFieldUnicodePath: function() { + var upathField = this.extraFields[0x7075]; + if (upathField) { + var extraReader = readerFor(upathField.value); + + // wrong version + if (extraReader.readInt(1) !== 1) { + return null; + } + + // the crc of the filename changed, this field is out of date. + if (crc32fn(this.fileName) !== extraReader.readInt(4)) { + return null; + } + + return utf8.utf8decode(extraReader.readData(upathField.length - 5)); + } + return null; + }, + + /** + * Find the unicode comment declared in the extra field, if any. + * @return {String} the unicode comment, null otherwise. + */ + findExtraFieldUnicodeComment: function() { + var ucommentField = this.extraFields[0x6375]; + if (ucommentField) { + var extraReader = readerFor(ucommentField.value); + + // wrong version + if (extraReader.readInt(1) !== 1) { + return null; + } + + // the crc of the comment changed, this field is out of date. + if (crc32fn(this.fileComment) !== extraReader.readInt(4)) { + return null; + } + + return utf8.utf8decode(extraReader.readData(ucommentField.length - 5)); + } + return null; + } +}; +module.exports = ZipEntry; + +},{"./compressedObject":2,"./compressions":3,"./crc32":4,"./reader/readerFor":22,"./support":30,"./utf8":31,"./utils":32}],35:[function(require,module,exports){ +'use strict'; + +var StreamHelper = require('./stream/StreamHelper'); +var DataWorker = require('./stream/DataWorker'); +var utf8 = require('./utf8'); +var CompressedObject = require('./compressedObject'); +var GenericWorker = require('./stream/GenericWorker'); + +/** + * A simple object representing a file in the zip file. + * @constructor + * @param {string} name the name of the file + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data + * @param {Object} options the options of the file + */ +var ZipObject = function(name, data, options) { + this.name = name; + this.dir = options.dir; + this.date = options.date; + this.comment = options.comment; + this.unixPermissions = options.unixPermissions; + this.dosPermissions = options.dosPermissions; + + this._data = data; + this._dataBinary = options.binary; + // keep only the compression + this.options = { + compression : options.compression, + compressionOptions : options.compressionOptions + }; +}; + +ZipObject.prototype = { + /** + * Create an internal stream for the content of this object. + * @param {String} type the type of each chunk. + * @return StreamHelper the stream. + */ + internalStream: function (type) { + var result = null, outputType = "string"; + try { + if (!type) { + throw new Error("No output type specified."); + } + outputType = type.toLowerCase(); + var askUnicodeString = outputType === "string" || outputType === "text"; + if (outputType === "binarystring" || outputType === "text") { + outputType = "string"; + } + result = this._decompressWorker(); + + var isUnicodeString = !this._dataBinary; + + if (isUnicodeString && !askUnicodeString) { + result = result.pipe(new utf8.Utf8EncodeWorker()); + } + if (!isUnicodeString && askUnicodeString) { + result = result.pipe(new utf8.Utf8DecodeWorker()); + } + } catch (e) { + result = new GenericWorker("error"); + result.error(e); + } + + return new StreamHelper(result, outputType, ""); + }, + + /** + * Prepare the content in the asked type. + * @param {String} type the type of the result. + * @param {Function} onUpdate a function to call on each internal update. + * @return Promise the promise of the result. + */ + async: function (type, onUpdate) { + return this.internalStream(type).accumulate(onUpdate); + }, + + /** + * Prepare the content as a nodejs stream. + * @param {String} type the type of each chunk. + * @param {Function} onUpdate a function to call on each internal update. + * @return Stream the stream. + */ + nodeStream: function (type, onUpdate) { + return this.internalStream(type || "nodebuffer").toNodejsStream(onUpdate); + }, + + /** + * Return a worker for the compressed content. + * @private + * @param {Object} compression the compression object to use. + * @param {Object} compressionOptions the options to use when compressing. + * @return Worker the worker. + */ + _compressWorker: function (compression, compressionOptions) { + if ( + this._data instanceof CompressedObject && + this._data.compression.magic === compression.magic + ) { + return this._data.getCompressedWorker(); + } else { + var result = this._decompressWorker(); + if(!this._dataBinary) { + result = result.pipe(new utf8.Utf8EncodeWorker()); + } + return CompressedObject.createWorkerFrom(result, compression, compressionOptions); + } + }, + /** + * Return a worker for the decompressed content. + * @private + * @return Worker the worker. + */ + _decompressWorker : function () { + if (this._data instanceof CompressedObject) { + return this._data.getContentWorker(); + } else if (this._data instanceof GenericWorker) { + return this._data; + } else { + return new DataWorker(this._data); + } + } +}; + +var removedMethods = ["asText", "asBinary", "asNodeBuffer", "asUint8Array", "asArrayBuffer"]; +var removedFn = function () { + throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide."); +}; + +for(var i = 0; i < removedMethods.length; i++) { + ZipObject.prototype[removedMethods[i]] = removedFn; +} +module.exports = ZipObject; + +},{"./compressedObject":2,"./stream/DataWorker":27,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31}],36:[function(require,module,exports){ +require('../modules/web.immediate'); +module.exports = require('../modules/_core').setImmediate; +},{"../modules/_core":40,"../modules/web.immediate":56}],37:[function(require,module,exports){ +module.exports = function(it){ + if(typeof it != 'function')throw TypeError(it + ' is not a function!'); + return it; +}; +},{}],38:[function(require,module,exports){ +var isObject = require('./_is-object'); +module.exports = function(it){ + if(!isObject(it))throw TypeError(it + ' is not an object!'); + return it; +}; +},{"./_is-object":51}],39:[function(require,module,exports){ +var toString = {}.toString; + +module.exports = function(it){ + return toString.call(it).slice(8, -1); +}; +},{}],40:[function(require,module,exports){ +var core = module.exports = {version: '2.3.0'}; +if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef +},{}],41:[function(require,module,exports){ +// optional / simple context binding +var aFunction = require('./_a-function'); +module.exports = function(fn, that, length){ + aFunction(fn); + if(that === undefined)return fn; + switch(length){ + case 1: return function(a){ + return fn.call(that, a); + }; + case 2: return function(a, b){ + return fn.call(that, a, b); + }; + case 3: return function(a, b, c){ + return fn.call(that, a, b, c); + }; + } + return function(/* ...args */){ + return fn.apply(that, arguments); + }; +}; +},{"./_a-function":37}],42:[function(require,module,exports){ +// Thank's IE8 for his funny defineProperty +module.exports = !require('./_fails')(function(){ + return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7; +}); +},{"./_fails":45}],43:[function(require,module,exports){ +var isObject = require('./_is-object') + , document = require('./_global').document + // in old IE typeof document.createElement is 'object' + , is = isObject(document) && isObject(document.createElement); +module.exports = function(it){ + return is ? document.createElement(it) : {}; +}; +},{"./_global":46,"./_is-object":51}],44:[function(require,module,exports){ +var global = require('./_global') + , core = require('./_core') + , ctx = require('./_ctx') + , hide = require('./_hide') + , PROTOTYPE = 'prototype'; + +var $export = function(type, name, source){ + var IS_FORCED = type & $export.F + , IS_GLOBAL = type & $export.G + , IS_STATIC = type & $export.S + , IS_PROTO = type & $export.P + , IS_BIND = type & $export.B + , IS_WRAP = type & $export.W + , exports = IS_GLOBAL ? core : core[name] || (core[name] = {}) + , expProto = exports[PROTOTYPE] + , target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE] + , key, own, out; + if(IS_GLOBAL)source = name; + for(key in source){ + // contains in native + own = !IS_FORCED && target && target[key] !== undefined; + if(own && key in exports)continue; + // export native or passed + out = own ? target[key] : source[key]; + // prevent global pollution for namespaces + exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key] + // bind timers to global for call from export context + : IS_BIND && own ? ctx(out, global) + // wrap global constructors for prevent change them in library + : IS_WRAP && target[key] == out ? (function(C){ + var F = function(a, b, c){ + if(this instanceof C){ + switch(arguments.length){ + case 0: return new C; + case 1: return new C(a); + case 2: return new C(a, b); + } return new C(a, b, c); + } return C.apply(this, arguments); + }; + F[PROTOTYPE] = C[PROTOTYPE]; + return F; + // make static versions for prototype methods + })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; + // export proto methods to core.%CONSTRUCTOR%.methods.%NAME% + if(IS_PROTO){ + (exports.virtual || (exports.virtual = {}))[key] = out; + // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME% + if(type & $export.R && expProto && !expProto[key])hide(expProto, key, out); + } + } +}; +// type bitmap +$export.F = 1; // forced +$export.G = 2; // global +$export.S = 4; // static +$export.P = 8; // proto +$export.B = 16; // bind +$export.W = 32; // wrap +$export.U = 64; // safe +$export.R = 128; // real proto method for `library` +module.exports = $export; +},{"./_core":40,"./_ctx":41,"./_global":46,"./_hide":47}],45:[function(require,module,exports){ +module.exports = function(exec){ + try { + return !!exec(); + } catch(e){ + return true; + } +}; +},{}],46:[function(require,module,exports){ +// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 +var global = module.exports = typeof window != 'undefined' && window.Math == Math + ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')(); +if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef +},{}],47:[function(require,module,exports){ +var dP = require('./_object-dp') + , createDesc = require('./_property-desc'); +module.exports = require('./_descriptors') ? function(object, key, value){ + return dP.f(object, key, createDesc(1, value)); +} : function(object, key, value){ + object[key] = value; + return object; +}; +},{"./_descriptors":42,"./_object-dp":52,"./_property-desc":53}],48:[function(require,module,exports){ +module.exports = require('./_global').document && document.documentElement; +},{"./_global":46}],49:[function(require,module,exports){ +module.exports = !require('./_descriptors') && !require('./_fails')(function(){ + return Object.defineProperty(require('./_dom-create')('div'), 'a', {get: function(){ return 7; }}).a != 7; +}); +},{"./_descriptors":42,"./_dom-create":43,"./_fails":45}],50:[function(require,module,exports){ +// fast apply, http://jsperf.lnkit.com/fast-apply/5 +module.exports = function(fn, args, that){ + var un = that === undefined; + switch(args.length){ + case 0: return un ? fn() + : fn.call(that); + case 1: return un ? fn(args[0]) + : fn.call(that, args[0]); + case 2: return un ? fn(args[0], args[1]) + : fn.call(that, args[0], args[1]); + case 3: return un ? fn(args[0], args[1], args[2]) + : fn.call(that, args[0], args[1], args[2]); + case 4: return un ? fn(args[0], args[1], args[2], args[3]) + : fn.call(that, args[0], args[1], args[2], args[3]); + } return fn.apply(that, args); +}; +},{}],51:[function(require,module,exports){ +module.exports = function(it){ + return typeof it === 'object' ? it !== null : typeof it === 'function'; +}; +},{}],52:[function(require,module,exports){ +var anObject = require('./_an-object') + , IE8_DOM_DEFINE = require('./_ie8-dom-define') + , toPrimitive = require('./_to-primitive') + , dP = Object.defineProperty; + +exports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes){ + anObject(O); + P = toPrimitive(P, true); + anObject(Attributes); + if(IE8_DOM_DEFINE)try { + return dP(O, P, Attributes); + } catch(e){ /* empty */ } + if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!'); + if('value' in Attributes)O[P] = Attributes.value; + return O; +}; +},{"./_an-object":38,"./_descriptors":42,"./_ie8-dom-define":49,"./_to-primitive":55}],53:[function(require,module,exports){ +module.exports = function(bitmap, value){ + return { + enumerable : !(bitmap & 1), + configurable: !(bitmap & 2), + writable : !(bitmap & 4), + value : value + }; +}; +},{}],54:[function(require,module,exports){ +var ctx = require('./_ctx') + , invoke = require('./_invoke') + , html = require('./_html') + , cel = require('./_dom-create') + , global = require('./_global') + , process = global.process + , setTask = global.setImmediate + , clearTask = global.clearImmediate + , MessageChannel = global.MessageChannel + , counter = 0 + , queue = {} + , ONREADYSTATECHANGE = 'onreadystatechange' + , defer, channel, port; +var run = function(){ + var id = +this; + if(queue.hasOwnProperty(id)){ + var fn = queue[id]; + delete queue[id]; + fn(); + } +}; +var listener = function(event){ + run.call(event.data); +}; +// Node.js 0.9+ & IE10+ has setImmediate, otherwise: +if(!setTask || !clearTask){ + setTask = function setImmediate(fn){ + var args = [], i = 1; + while(arguments.length > i)args.push(arguments[i++]); + queue[++counter] = function(){ + invoke(typeof fn == 'function' ? fn : Function(fn), args); + }; + defer(counter); + return counter; + }; + clearTask = function clearImmediate(id){ + delete queue[id]; + }; + // Node.js 0.8- + if(require('./_cof')(process) == 'process'){ + defer = function(id){ + process.nextTick(ctx(run, id, 1)); + }; + // Browsers with MessageChannel, includes WebWorkers + } else if(MessageChannel){ + channel = new MessageChannel; + port = channel.port2; + channel.port1.onmessage = listener; + defer = ctx(port.postMessage, port, 1); + // Browsers with postMessage, skip WebWorkers + // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' + } else if(global.addEventListener && typeof postMessage == 'function' && !global.importScripts){ + defer = function(id){ + global.postMessage(id + '', '*'); + }; + global.addEventListener('message', listener, false); + // IE8- + } else if(ONREADYSTATECHANGE in cel('script')){ + defer = function(id){ + html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function(){ + html.removeChild(this); + run.call(id); + }; + }; + // Rest old browsers + } else { + defer = function(id){ + setTimeout(ctx(run, id, 1), 0); + }; + } +} +module.exports = { + set: setTask, + clear: clearTask +}; +},{"./_cof":39,"./_ctx":41,"./_dom-create":43,"./_global":46,"./_html":48,"./_invoke":50}],55:[function(require,module,exports){ +// 7.1.1 ToPrimitive(input [, PreferredType]) +var isObject = require('./_is-object'); +// instead of the ES6 spec version, we didn't implement @@toPrimitive case +// and the second argument - flag - preferred type is a string +module.exports = function(it, S){ + if(!isObject(it))return it; + var fn, val; + if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val; + if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val; + if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val; + throw TypeError("Can't convert object to primitive value"); +}; +},{"./_is-object":51}],56:[function(require,module,exports){ +var $export = require('./_export') + , $task = require('./_task'); +$export($export.G + $export.B, { + setImmediate: $task.set, + clearImmediate: $task.clear +}); +},{"./_export":44,"./_task":54}],57:[function(require,module,exports){ +(function (global){ +'use strict'; +var Mutation = global.MutationObserver || global.WebKitMutationObserver; + +var scheduleDrain; + +{ + if (Mutation) { + var called = 0; + var observer = new Mutation(nextTick); + var element = global.document.createTextNode(''); + observer.observe(element, { + characterData: true + }); + scheduleDrain = function () { + element.data = (called = ++called % 2); + }; + } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') { + var channel = new global.MessageChannel(); + channel.port1.onmessage = nextTick; + scheduleDrain = function () { + channel.port2.postMessage(0); + }; + } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) { + scheduleDrain = function () { + + // Create a + + + + + +
    + +

    index.html

    +
    + + diff --git a/doc/0.1.4/de_public/overview-tree.html b/doc/0.1.4/de_public/overview-tree.html new file mode 100644 index 0000000..0eb5874 --- /dev/null +++ b/doc/0.1.4/de_public/overview-tree.html @@ -0,0 +1,313 @@ + + + + + +Class Hierarchy + + + + + + + + + + + + + + + +
    + +
    +
    + +
    +
    +

    Class Hierarchy

    + +
    +
    +

    Interface Hierarchy

    + +
    +
    +

    Enum Hierarchy

    + +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/de_public/package-search-index.js b/doc/0.1.4/de_public/package-search-index.js new file mode 100644 index 0000000..195d1ef --- /dev/null +++ b/doc/0.1.4/de_public/package-search-index.js @@ -0,0 +1 @@ +packageSearchIndex = [{"l":"All Packages","url":"allpackages-index.html"},{"l":"bitchanger.calculations"},{"l":"bitchanger.gui.controller"},{"l":"bitchanger.gui.controls"},{"l":"bitchanger.gui.views"},{"l":"bitchanger.main"},{"l":"bitchanger.preferences"},{"l":"bitchanger.util"}] \ No newline at end of file diff --git a/doc/0.1.4/de_public/package-search-index.zip b/doc/0.1.4/de_public/package-search-index.zip new file mode 100644 index 0000000000000000000000000000000000000000..6f3ce272cbd1dc365c4ae84d10fdaa4d46a56f66 GIT binary patch literal 282 zcmWIWW@Zs#;Nak3xV}^(kO2uu0@($L$=QkNsk+6fiABj7x|w+?sTF!z#rb)y{f2yp z9C%pvH^sD9GsxO|^lS7OigO*1>T_q8ellOF|*P^6{u2cW|KYo75_s2aRcaiLm zCx0F~=XU2x)`?%welP`ivva(4s!=HeI*pl;fg!+~kx7IB;e2E{kn>RiPR|5*v$BDd NG6JDHklqW{2LKF!Rj2>} literal 0 HcmV?d00001 diff --git a/doc/0.1.4/de_public/resources/glass.png b/doc/0.1.4/de_public/resources/glass.png new file mode 100644 index 0000000000000000000000000000000000000000..a7f591f467a1c0c949bbc510156a0c1afb860a6e GIT binary patch literal 499 zcmVJoRsvExf%rEN>jUL}qZ_~k#FbE+Q;{`;0FZwVNX2n-^JoI; zP;4#$8DIy*Yk-P>VN(DUKmPse7mx+ExD4O|;?E5D0Z5($mjO3`*anwQU^s{ZDK#Lz zj>~{qyaIx5K!t%=G&2IJNzg!ChRpyLkO7}Ry!QaotAHAMpbB3AF(}|_f!G-oI|uK6 z`id_dumai5K%C3Y$;tKS_iqMPHg<*|-@e`liWLAggVM!zAP#@l;=c>S03;{#04Z~5 zN_+ss=Yg6*hTr59mzMwZ@+l~q!+?ft!fF66AXT#wWavHt30bZWFCK%!BNk}LN?0Hg z1VF_nfs`Lm^DjYZ1(1uD0u4CSIr)XAaqW6IT{!St5~1{i=i}zAy76p%_|w8rh@@c0Axr!ns=D-X+|*sY6!@wacG9%)Qn*O zl0sa739kT-&_?#oVxXF6tOnqTD)cZ}2vi$`ZU8RLAlo8=_z#*P3xI~i!lEh+Pdu-L zx{d*wgjtXbnGX_Yf@Tc7Q3YhLhPvc8noGJs2DA~1DySiA&6V{5JzFt ojAY1KXm~va;tU{v7C?Xj0BHw!K;2aXV*mgE07*qoM6N<$f;4TDA^-pY literal 0 HcmV?d00001 diff --git a/doc/0.1.4/de_public/script.js b/doc/0.1.4/de_public/script.js new file mode 100644 index 0000000..09adaaa --- /dev/null +++ b/doc/0.1.4/de_public/script.js @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + */ + +var moduleSearchIndex; +var packageSearchIndex; +var typeSearchIndex; +var memberSearchIndex; +var tagSearchIndex; +function loadScripts(doc, tag) { + createElem(doc, tag, 'jquery/jszip/dist/jszip.js'); + createElem(doc, tag, 'jquery/jszip-utils/dist/jszip-utils.js'); + if (window.navigator.userAgent.indexOf('MSIE ') > 0 || window.navigator.userAgent.indexOf('Trident/') > 0 || + window.navigator.userAgent.indexOf('Edge/') > 0) { + createElem(doc, tag, 'jquery/jszip-utils/dist/jszip-utils-ie.js'); + } + createElem(doc, tag, 'search.js'); + + $.get(pathtoroot + "module-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "module-search-index.zip", function(e, data) { + var zip = new JSZip(data); + zip.load(data); + moduleSearchIndex = JSON.parse(zip.file("module-search-index.json").asText()); + }); + }); + $.get(pathtoroot + "package-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "package-search-index.zip", function(e, data) { + var zip = new JSZip(data); + zip.load(data); + packageSearchIndex = JSON.parse(zip.file("package-search-index.json").asText()); + }); + }); + $.get(pathtoroot + "type-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "type-search-index.zip", function(e, data) { + var zip = new JSZip(data); + zip.load(data); + typeSearchIndex = JSON.parse(zip.file("type-search-index.json").asText()); + }); + }); + $.get(pathtoroot + "member-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "member-search-index.zip", function(e, data) { + var zip = new JSZip(data); + zip.load(data); + memberSearchIndex = JSON.parse(zip.file("member-search-index.json").asText()); + }); + }); + $.get(pathtoroot + "tag-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "tag-search-index.zip", function(e, data) { + var zip = new JSZip(data); + zip.load(data); + tagSearchIndex = JSON.parse(zip.file("tag-search-index.json").asText()); + }); + }); + if (!moduleSearchIndex) { + createElem(doc, tag, 'module-search-index.js'); + } + if (!packageSearchIndex) { + createElem(doc, tag, 'package-search-index.js'); + } + if (!typeSearchIndex) { + createElem(doc, tag, 'type-search-index.js'); + } + if (!memberSearchIndex) { + createElem(doc, tag, 'member-search-index.js'); + } + if (!tagSearchIndex) { + createElem(doc, tag, 'tag-search-index.js'); + } + $(window).resize(function() { + $('.navPadding').css('padding-top', $('.fixedNav').css("height")); + }); +} + +function createElem(doc, tag, path) { + var script = doc.createElement(tag); + var scriptElement = doc.getElementsByTagName(tag)[0]; + script.src = pathtoroot + path; + scriptElement.parentNode.insertBefore(script, scriptElement); +} + +function show(type) { + count = 0; + for (var key in data) { + var row = document.getElementById(key); + if ((data[key] & type) !== 0) { + row.style.display = ''; + row.className = (count++ % 2) ? rowColor : altColor; + } + else + row.style.display = 'none'; + } + updateTabs(type); +} + +function updateTabs(type) { + for (var value in tabs) { + var sNode = document.getElementById(tabs[value][0]); + var spanNode = sNode.firstChild; + if (value == type) { + sNode.className = activeTableTab; + spanNode.innerHTML = tabs[value][1]; + } + else { + sNode.className = tableTab; + spanNode.innerHTML = "" + tabs[value][1] + ""; + } + } +} + +function updateModuleFrame(pFrame, cFrame) { + top.packageFrame.location = pFrame; + top.classFrame.location = cFrame; +} diff --git a/doc/0.1.4/de_public/search.js b/doc/0.1.4/de_public/search.js new file mode 100644 index 0000000..7fc8bfc --- /dev/null +++ b/doc/0.1.4/de_public/search.js @@ -0,0 +1,329 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + */ + +var noResult = {l: "No results found"}; +var catModules = "Modules"; +var catPackages = "Packages"; +var catTypes = "Types"; +var catMembers = "Members"; +var catSearchTags = "SearchTags"; +var highlight = "$&"; +var camelCaseRegexp = ""; +var secondaryMatcher = ""; +function getHighlightedText(item) { + var ccMatcher = new RegExp(camelCaseRegexp); + var label = item.replace(ccMatcher, highlight); + if (label === item) { + label = item.replace(secondaryMatcher, highlight); + } + return label; +} +function getURLPrefix(ui) { + var urlPrefix=""; + if (useModuleDirectories) { + var slash = "/"; + if (ui.item.category === catModules) { + return ui.item.l + slash; + } else if (ui.item.category === catPackages && ui.item.m) { + return ui.item.m + slash; + } else if ((ui.item.category === catTypes && ui.item.p) || ui.item.category === catMembers) { + $.each(packageSearchIndex, function(index, item) { + if (ui.item.p == item.l) { + urlPrefix = item.m + slash; + } + }); + return urlPrefix; + } else { + return urlPrefix; + } + } + return urlPrefix; +} +var watermark = 'Search'; +$(function() { + $("#search").val(''); + $("#search").prop("disabled", false); + $("#reset").prop("disabled", false); + $("#search").val(watermark).addClass('watermark'); + $("#search").blur(function() { + if ($(this).val().length == 0) { + $(this).val(watermark).addClass('watermark'); + } + }); + $("#search").on('click keydown', function() { + if ($(this).val() == watermark) { + $(this).val('').removeClass('watermark'); + } + }); + $("#reset").click(function() { + $("#search").val(''); + $("#search").focus(); + }); + $("#search").focus(); + $("#search")[0].setSelectionRange(0, 0); +}); +$.widget("custom.catcomplete", $.ui.autocomplete, { + _create: function() { + this._super(); + this.widget().menu("option", "items", "> :not(.ui-autocomplete-category)"); + }, + _renderMenu: function(ul, items) { + var rMenu = this, + currentCategory = ""; + $.each(items, function(index, item) { + var li; + if (item.l !== noResult.l && item.category !== currentCategory) { + ul.append("
  • " + item.category + "
  • "); + currentCategory = item.category; + } + li = rMenu._renderItemData(ul, item); + if (item.category) { + li.attr("aria-label", item.category + " : " + item.l); + li.attr("class", "resultItem"); + } else { + li.attr("aria-label", item.l); + li.attr("class", "resultItem"); + } + }); + }, + _renderItem: function(ul, item) { + var label = ""; + if (item.category === catModules) { + label = getHighlightedText(item.l); + } else if (item.category === catPackages) { + label = (item.m) + ? getHighlightedText(item.m + "/" + item.l) + : getHighlightedText(item.l); + } else if (item.category === catTypes) { + label = (item.p) + ? getHighlightedText(item.p + "." + item.l) + : getHighlightedText(item.l); + } else if (item.category === catMembers) { + label = getHighlightedText(item.p + "." + (item.c + "." + item.l)); + } else if (item.category === catSearchTags) { + label = getHighlightedText(item.l); + } else { + label = item.l; + } + $li = $("
  • ").appendTo(ul); + if (item.category === catSearchTags) { + if (item.d) { + $("").attr("href", "#") + .html(label + " (" + item.h + ")
    " + + item.d + "
    ") + .appendTo($li); + } else { + $("
    ").attr("href", "#") + .html(label + " (" + item.h + ")") + .appendTo($li); + } + } else { + $("").attr("href", "#") + .html(label) + .appendTo($li); + } + return $li; + } +}); +$(function() { + $("#search").catcomplete({ + minLength: 1, + delay: 100, + source: function(request, response) { + var result = new Array(); + var presult = new Array(); + var tresult = new Array(); + var mresult = new Array(); + var tgresult = new Array(); + var secondaryresult = new Array(); + var displayCount = 0; + var exactMatcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(request.term) + "$", "i"); + camelCaseRegexp = ($.ui.autocomplete.escapeRegex(request.term)).split(/(?=[A-Z])/).join("([a-z0-9_$]*?)"); + var camelCaseMatcher = new RegExp("^" + camelCaseRegexp); + secondaryMatcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i"); + + // Return the nested innermost name from the specified object + function nestedName(e) { + return e.l.substring(e.l.lastIndexOf(".") + 1); + } + + function concatResults(a1, a2) { + a1 = a1.concat(a2); + a2.length = 0; + return a1; + } + + if (moduleSearchIndex) { + var mdleCount = 0; + $.each(moduleSearchIndex, function(index, item) { + item.category = catModules; + if (exactMatcher.test(item.l)) { + result.push(item); + mdleCount++; + } else if (camelCaseMatcher.test(item.l)) { + result.push(item); + } else if (secondaryMatcher.test(item.l)) { + secondaryresult.push(item); + } + }); + displayCount = mdleCount; + result = concatResults(result, secondaryresult); + } + if (packageSearchIndex) { + var pCount = 0; + var pkg = ""; + $.each(packageSearchIndex, function(index, item) { + item.category = catPackages; + pkg = (item.m) + ? (item.m + "/" + item.l) + : item.l; + if (exactMatcher.test(item.l)) { + presult.push(item); + pCount++; + } else if (camelCaseMatcher.test(pkg)) { + presult.push(item); + } else if (secondaryMatcher.test(pkg)) { + secondaryresult.push(item); + } + }); + result = result.concat(concatResults(presult, secondaryresult)); + displayCount = (pCount > displayCount) ? pCount : displayCount; + } + if (typeSearchIndex) { + var tCount = 0; + $.each(typeSearchIndex, function(index, item) { + item.category = catTypes; + var s = nestedName(item); + if (exactMatcher.test(s)) { + tresult.push(item); + tCount++; + } else if (camelCaseMatcher.test(s)) { + tresult.push(item); + } else if (secondaryMatcher.test(item.p + "." + item.l)) { + secondaryresult.push(item); + } + }); + result = result.concat(concatResults(tresult, secondaryresult)); + displayCount = (tCount > displayCount) ? tCount : displayCount; + } + if (memberSearchIndex) { + var mCount = 0; + $.each(memberSearchIndex, function(index, item) { + item.category = catMembers; + var s = nestedName(item); + if (exactMatcher.test(s)) { + mresult.push(item); + mCount++; + } else if (camelCaseMatcher.test(s)) { + mresult.push(item); + } else if (secondaryMatcher.test(item.c + "." + item.l)) { + secondaryresult.push(item); + } + }); + result = result.concat(concatResults(mresult, secondaryresult)); + displayCount = (mCount > displayCount) ? mCount : displayCount; + } + if (tagSearchIndex) { + var tgCount = 0; + $.each(tagSearchIndex, function(index, item) { + item.category = catSearchTags; + if (exactMatcher.test(item.l)) { + tgresult.push(item); + tgCount++; + } else if (secondaryMatcher.test(item.l)) { + secondaryresult.push(item); + } + }); + result = result.concat(concatResults(tgresult, secondaryresult)); + displayCount = (tgCount > displayCount) ? tgCount : displayCount; + } + displayCount = (displayCount > 500) ? displayCount : 500; + var counter = function() { + var count = {Modules: 0, Packages: 0, Types: 0, Members: 0, SearchTags: 0}; + var f = function(item) { + count[item.category] += 1; + return (count[item.category] <= displayCount); + }; + return f; + }(); + response(result.filter(counter)); + }, + response: function(event, ui) { + if (!ui.content.length) { + ui.content.push(noResult); + } else { + $("#search").empty(); + } + }, + autoFocus: true, + position: { + collision: "flip" + }, + select: function(event, ui) { + if (ui.item.l !== noResult.l) { + var url = getURLPrefix(ui); + if (ui.item.category === catModules) { + if (useModuleDirectories) { + url += "module-summary.html"; + } else { + url = ui.item.l + "-summary.html"; + } + } else if (ui.item.category === catPackages) { + if (ui.item.url) { + url = ui.item.url; + } else { + url += ui.item.l.replace(/\./g, '/') + "/package-summary.html"; + } + } else if (ui.item.category === catTypes) { + if (ui.item.url) { + url = ui.item.url; + } else if (ui.item.p === "") { + url += ui.item.l + ".html"; + } else { + url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.l + ".html"; + } + } else if (ui.item.category === catMembers) { + if (ui.item.p === "") { + url += ui.item.c + ".html" + "#"; + } else { + url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.c + ".html" + "#"; + } + if (ui.item.url) { + url += ui.item.url; + } else { + url += ui.item.l; + } + } else if (ui.item.category === catSearchTags) { + url += ui.item.u; + } + if (top !== window) { + parent.classFrame.location = pathtoroot + url; + } else { + window.location.href = pathtoroot + url; + } + } + } + }); +}); diff --git a/doc/0.1.4/de_public/stylesheet.css b/doc/0.1.4/de_public/stylesheet.css new file mode 100644 index 0000000..fa24676 --- /dev/null +++ b/doc/0.1.4/de_public/stylesheet.css @@ -0,0 +1,906 @@ +/* + * Javadoc style sheet + */ + +@import url('resources/fonts/dejavu.css'); + +/* + * Styles for individual HTML elements. + * + * These are styles that are specific to individual HTML elements. Changing them affects the style of a particular + * HTML element throughout the page. + */ + +body { + background-color:#ffffff; + color:#353833; + font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size:14px; + margin:0; + padding:0; + height:100%; + width:100%; +} +iframe { + margin:0; + padding:0; + height:100%; + width:100%; + overflow-y:scroll; + border:none; +} +a:link, a:visited { + text-decoration:none; + color:#4A6782; +} +a[href]:hover, a[href]:focus { + text-decoration:none; + color:#bb7a2a; +} +a[name] { + color:#353833; +} +a[name]:before, a[name]:target, a[id]:before, a[id]:target { + content:""; + display:inline-block; + position:relative; + padding-top:129px; + margin-top:-129px; +} +pre { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; +} +h1 { + font-size:20px; +} +h2 { + font-size:18px; +} +h3 { + font-size:16px; + font-style:italic; +} +h4 { + font-size:13px; +} +h5 { + font-size:12px; +} +h6 { + font-size:11px; +} +ul { + list-style-type:disc; +} +code, tt { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; + margin-top:8px; + line-height:1.4em; +} +dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; +} +table tr td dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + vertical-align:top; + padding-top:4px; +} +sup { + font-size:8px; +} + +/* + * Styles for HTML generated by javadoc. + * + * These are style classes that are used by the standard doclet to generate HTML documentation. + */ + +/* + * Styles for document title and copyright. + */ +.clear { + clear:both; + height:0px; + overflow:hidden; +} +.aboutLanguage { + float:right; + padding:0px 21px; + font-size:11px; + z-index:200; + margin-top:-9px; +} +.legalCopy { + margin-left:.5em; +} +.bar a, .bar a:link, .bar a:visited, .bar a:active { + color:#FFFFFF; + text-decoration:none; +} +.bar a:hover, .bar a:focus { + color:#bb7a2a; +} +.tab { + background-color:#0066FF; + color:#ffffff; + padding:8px; + width:5em; + font-weight:bold; +} +/* + * Styles for navigation bar. + */ +.bar { + background-color:#4D7A97; + color:#FFFFFF; + padding:.8em .5em .4em .8em; + height:auto;/*height:1.8em;*/ + font-size:11px; + margin:0; +} +.navPadding { + padding-top: 107px; +} +.fixedNav { + position:fixed; + width:100%; + z-index:999; + background-color:#ffffff; +} +.topNav { + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.bottomNav { + margin-top:10px; + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.subNav { + background-color:#dee3e9; + float:left; + width:100%; + overflow:hidden; + font-size:12px; +} +.subNav div { + clear:left; + float:left; + padding:0 0 5px 6px; + text-transform:uppercase; +} +ul.navList, ul.subNavList { + float:left; + margin:0 25px 0 0; + padding:0; +} +ul.navList li{ + list-style:none; + float:left; + padding: 5px 6px; + text-transform:uppercase; +} +ul.navListSearch { + float:right; + margin:0 0 0 0; + padding:0; +} +ul.navListSearch li { + list-style:none; + float:right; + padding: 5px 6px; + text-transform:uppercase; +} +ul.navListSearch li label { + position:relative; + right:-16px; +} +ul.subNavList li { + list-style:none; + float:left; +} +.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited { + color:#FFFFFF; + text-decoration:none; + text-transform:uppercase; +} +.topNav a:hover, .bottomNav a:hover { + text-decoration:none; + color:#bb7a2a; + text-transform:uppercase; +} +.navBarCell1Rev { + background-color:#F8981D; + color:#253441; + margin: auto 5px; +} +.skipNav { + position:absolute; + top:auto; + left:-9999px; + overflow:hidden; +} +/* + * Styles for page header and footer. + */ +.header, .footer { + clear:both; + margin:0 20px; + padding:5px 0 0 0; +} +.indexNav { + position:relative; + font-size:12px; + background-color:#dee3e9; +} +.indexNav ul { + margin-top:0; + padding:5px; +} +.indexNav ul li { + display:inline; + list-style-type:none; + padding-right:10px; + text-transform:uppercase; +} +.indexNav h1 { + font-size:13px; +} +.title { + color:#2c4557; + margin:10px 0; +} +.subTitle { + margin:5px 0 0 0; +} +.header ul { + margin:0 0 15px 0; + padding:0; +} +.footer ul { + margin:20px 0 5px 0; +} +.header ul li, .footer ul li { + list-style:none; + font-size:13px; +} +/* + * Styles for headings. + */ +div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList li.blockList h3 { + padding:0; + margin:15px 0; +} +ul.blockList li.blockList h2 { + padding:0px 0 20px 0; +} +/* + * Styles for page layout containers. + */ +.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer, +.allClassesContainer, .allPackagesContainer { + clear:both; + padding:10px 20px; + position:relative; +} +.indexContainer { + margin:10px; + position:relative; + font-size:12px; +} +.indexContainer h2 { + font-size:13px; + padding:0 0 3px 0; +} +.indexContainer ul { + margin:0; + padding:0; +} +.indexContainer ul li { + list-style:none; + padding-top:2px; +} +.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt { + font-size:12px; + font-weight:bold; + margin:10px 0 0 0; + color:#4E4E4E; +} +.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd { + margin:5px 0 10px 0px; + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} +.serializedFormContainer dl.nameValue dt { + margin-left:1px; + font-size:1.1em; + display:inline; + font-weight:bold; +} +.serializedFormContainer dl.nameValue dd { + margin:0 0 0 1px; + font-size:1.1em; + display:inline; +} +/* + * Styles for lists. + */ +li.circle { + list-style:circle; +} +ul.horizontal li { + display:inline; + font-size:0.9em; +} +ul.inheritance { + margin:0; + padding:0; +} +ul.inheritance li { + display:inline; + list-style:none; +} +ul.inheritance li ul.inheritance { + margin-left:15px; + padding-left:15px; + padding-top:1px; +} +ul.blockList, ul.blockListLast { + margin:10px 0 10px 0; + padding:0; +} +ul.blockList li.blockList, ul.blockListLast li.blockList { + list-style:none; + margin-bottom:15px; + line-height:1.4; +} +ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList { + padding:0px 20px 5px 10px; + border:1px solid #ededed; + background-color:#f8f8f8; +} +ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList { + padding:0 0 5px 8px; + background-color:#ffffff; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockList { + margin-left:0; + padding-left:0; + padding-bottom:15px; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast { + list-style:none; + border-bottom:none; + padding-bottom:0; +} +table tr td dl, table tr td dl dt, table tr td dl dd { + margin-top:0; + margin-bottom:1px; +} +/* + * Styles for tables. + */ +.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary, +.requiresSummary, .packagesSummary, .providesSummary, .usesSummary { + width:100%; + border-spacing:0; + border-left:1px solid #EEE; + border-right:1px solid #EEE; + border-bottom:1px solid #EEE; +} +.overviewSummary, .memberSummary, .requiresSummary, .packagesSummary, .providesSummary, .usesSummary { + padding:0px; +} +.overviewSummary caption, .memberSummary caption, .typeSummary caption, +.useSummary caption, .constantsSummary caption, .deprecatedSummary caption, +.requiresSummary caption, .packagesSummary caption, .providesSummary caption, .usesSummary caption { + position:relative; + text-align:left; + background-repeat:no-repeat; + color:#253441; + font-weight:bold; + clear:none; + overflow:hidden; + padding:0px; + padding-top:10px; + padding-left:1px; + margin:0px; + white-space:pre; +} +.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link, +.constantsSummary caption a:link, .deprecatedSummary caption a:link, +.requiresSummary caption a:link, .packagesSummary caption a:link, .providesSummary caption a:link, +.usesSummary caption a:link, +.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover, +.constantsSummary caption a:hover, .deprecatedSummary caption a:hover, +.requiresSummary caption a:hover, .packagesSummary caption a:hover, .providesSummary caption a:hover, +.usesSummary caption a:hover, +.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active, +.constantsSummary caption a:active, .deprecatedSummary caption a:active, +.requiresSummary caption a:active, .packagesSummary caption a:active, .providesSummary caption a:active, +.usesSummary caption a:active, +.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited, +.constantsSummary caption a:visited, .deprecatedSummary caption a:visited, +.requiresSummary caption a:visited, .packagesSummary caption a:visited, .providesSummary caption a:visited, +.usesSummary caption a:visited { + color:#FFFFFF; +} +.useSummary caption a:link, .useSummary caption a:hover, .useSummary caption a:active, +.useSummary caption a:visited { + color:#1f389c; +} +.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span, +.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span, +.requiresSummary caption span, .packagesSummary caption span, .providesSummary caption span, +.usesSummary caption span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + padding-bottom:7px; + display:inline-block; + float:left; + background-color:#F8981D; + border: none; + height:16px; +} +.memberSummary caption span.activeTableTab span, .packagesSummary caption span.activeTableTab span, +.overviewSummary caption span.activeTableTab span, .typeSummary caption span.activeTableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#F8981D; + height:16px; +} +.memberSummary caption span.tableTab span, .packagesSummary caption span.tableTab span, +.overviewSummary caption span.tableTab span, .typeSummary caption span.tableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#4D7A97; + height:16px; +} +.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab, +.packagesSummary caption span.tableTab, .packagesSummary caption span.activeTableTab, +.overviewSummary caption span.tableTab, .overviewSummary caption span.activeTableTab, +.typeSummary caption span.tableTab, .typeSummary caption span.activeTableTab { + padding-top:0px; + padding-left:0px; + padding-right:0px; + background-image:none; + float:none; + display:inline; +} +.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd, +.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd, +.requiresSummary .tabEnd, .packagesSummary .tabEnd, .providesSummary .tabEnd, .usesSummary .tabEnd { + display:none; + width:5px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .activeTableTab .tabEnd, .packagesSummary .activeTableTab .tabEnd, +.overviewSummary .activeTableTab .tabEnd, .typeSummary .activeTableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .tableTab .tabEnd, .packagesSummary .tableTab .tabEnd, +.overviewSummary .tableTab .tabEnd, .typeSummary .tableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + background-color:#4D7A97; + float:left; +} +.rowColor th, .altColor th { + font-weight:normal; +} +.overviewSummary td, .memberSummary td, .typeSummary td, +.useSummary td, .constantsSummary td, .deprecatedSummary td, +.requiresSummary td, .packagesSummary td, .providesSummary td, .usesSummary td { + text-align:left; + padding:0px 0px 12px 10px; +} +th.colFirst, th.colSecond, th.colLast, th.colConstructorName, th.colDeprecatedItemName, .useSummary th, +.constantsSummary th, .packagesSummary th, td.colFirst, td.colSecond, td.colLast, .useSummary td, +.constantsSummary td { + vertical-align:top; + padding-right:0px; + padding-top:8px; + padding-bottom:3px; +} +th.colFirst, th.colSecond, th.colLast, th.colConstructorName, th.colDeprecatedItemName, .constantsSummary th, +.packagesSummary th { + background:#dee3e9; + text-align:left; + padding:8px 3px 3px 7px; +} +td.colFirst, th.colFirst { + font-size:13px; +} +td.colSecond, th.colSecond, td.colLast, th.colConstructorName, th.colDeprecatedItemName, th.colLast { + font-size:13px; +} +.constantsSummary th, .packagesSummary th { + font-size:13px; +} +.providesSummary th.colFirst, .providesSummary th.colLast, .providesSummary td.colFirst, +.providesSummary td.colLast { + white-space:normal; + font-size:13px; +} +.overviewSummary td.colFirst, .overviewSummary th.colFirst, +.requiresSummary td.colFirst, .requiresSummary th.colFirst, +.packagesSummary td.colFirst, .packagesSummary td.colSecond, .packagesSummary th.colFirst, .packagesSummary th, +.usesSummary td.colFirst, .usesSummary th.colFirst, +.providesSummary td.colFirst, .providesSummary th.colFirst, +.memberSummary td.colFirst, .memberSummary th.colFirst, +.memberSummary td.colSecond, .memberSummary th.colSecond, .memberSummary th.colConstructorName, +.typeSummary td.colFirst, .typeSummary th.colFirst { + vertical-align:top; +} +.packagesSummary th.colLast, .packagesSummary td.colLast { + white-space:normal; +} +td.colFirst a:link, td.colFirst a:visited, +td.colSecond a:link, td.colSecond a:visited, +th.colFirst a:link, th.colFirst a:visited, +th.colSecond a:link, th.colSecond a:visited, +th.colConstructorName a:link, th.colConstructorName a:visited, +th.colDeprecatedItemName a:link, th.colDeprecatedItemName a:visited, +.constantValuesContainer td a:link, .constantValuesContainer td a:visited, +.allClassesContainer td a:link, .allClassesContainer td a:visited, +.allPackagesContainer td a:link, .allPackagesContainer td a:visited { + font-weight:bold; +} +.tableSubHeadingColor { + background-color:#EEEEFF; +} +.altColor, .altColor th { + background-color:#FFFFFF; +} +.rowColor, .rowColor th { + background-color:#EEEEEF; +} +/* + * Styles for contents. + */ +.description pre { + margin-top:0; +} +.deprecatedContent { + margin:0; + padding:10px 0; +} +.docSummary { + padding:0; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + font-style:normal; +} +div.block { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} +td.colLast div { + padding-top:0px; +} +td.colLast a { + padding-bottom:3px; +} +/* + * Styles for formatting effect. + */ +.sourceLineNo { + color:green; + padding:0 30px 0 0; +} +h1.hidden { + visibility:hidden; + overflow:hidden; + font-size:10px; +} +.block { + display:block; + margin:3px 10px 2px 0px; + color:#474747; +} +.deprecatedLabel, .descfrmTypeLabel, .implementationLabel, .memberNameLabel, .memberNameLink, +.moduleLabelInPackage, .moduleLabelInType, .overrideSpecifyLabel, .packageLabelInType, +.packageHierarchyLabel, .paramLabel, .returnLabel, .seeLabel, .simpleTagLabel, +.throwsLabel, .typeNameLabel, .typeNameLink, .searchTagLink { + font-weight:bold; +} +.deprecationComment, .emphasizedPhrase, .interfaceName { + font-style:italic; +} +.deprecationBlock { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; + border-style:solid; + border-width:thin; + border-radius:10px; + padding:10px; + margin-bottom:10px; + margin-right:10px; + display:inline-block; +} +div.block div.deprecationComment, div.block div.block span.emphasizedPhrase, +div.block div.block span.interfaceName { + font-style:normal; +} +div.contentContainer ul.blockList li.blockList h2 { + padding-bottom:0px; +} +/* + * Styles for IFRAME. + */ +.mainContainer { + margin:0 auto; + padding:0; + height:100%; + width:100%; + position:fixed; + top:0; + left:0; +} +.leftContainer { + height:100%; + position:fixed; + width:320px; +} +.leftTop { + position:relative; + float:left; + width:315px; + top:0; + left:0; + height:30%; + border-right:6px solid #ccc; + border-bottom:6px solid #ccc; +} +.leftBottom { + position:relative; + float:left; + width:315px; + bottom:0; + left:0; + height:70%; + border-right:6px solid #ccc; + border-top:1px solid #000; +} +.rightContainer { + position:absolute; + left:320px; + top:0; + bottom:0; + height:100%; + right:0; + border-left:1px solid #000; +} +.rightIframe { + margin:0; + padding:0; + height:100%; + right:30px; + width:100%; + overflow:visible; + margin-bottom:30px; +} +/* + * Styles specific to HTML5 elements. + */ +main, nav, header, footer, section { + display:block; +} +/* + * Styles for javadoc search. + */ +.ui-autocomplete-category { + font-weight:bold; + font-size:15px; + padding:7px 0 7px 3px; + background-color:#4D7A97; + color:#FFFFFF; +} +.resultItem { + font-size:13px; +} +.ui-autocomplete { + max-height:85%; + max-width:65%; + overflow-y:scroll; + overflow-x:scroll; + white-space:nowrap; + box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); +} +ul.ui-autocomplete { + position:fixed; + z-index:999999; +} +ul.ui-autocomplete li { + float:left; + clear:both; + width:100%; +} +.resultHighlight { + font-weight:bold; +} +#search { + background-image:url('resources/glass.png'); + background-size:13px; + background-repeat:no-repeat; + background-position:2px 3px; + padding-left:20px; + position:relative; + right:-18px; +} +#reset { + background-color: rgb(255,255,255); + background-image:url('resources/x.png'); + background-position:center; + background-repeat:no-repeat; + background-size:12px; + border:0 none; + width:16px; + height:17px; + position:relative; + left:-4px; + top:-4px; + font-size:0px; +} +.watermark { + color:#545454; +} +.searchTagDescResult { + font-style:italic; + font-size:11px; +} +.searchTagHolderResult { + font-style:italic; + font-size:12px; +} +.searchTagResult:before, .searchTagResult:target { + color:red; +} +.moduleGraph span { + display:none; + position:absolute; +} +.moduleGraph:hover span { + display:block; + margin: -100px 0 0 100px; + z-index: 1; +} +.methodSignature { + white-space:normal; +} + +/* + * Styles for user-provided tables. + * + * borderless: + * No borders, vertical margins, styled caption. + * This style is provided for use with existing doc comments. + * In general, borderless tables should not be used for layout purposes. + * + * plain: + * Plain borders around table and cells, vertical margins, styled caption. + * Best for small tables or for complex tables for tables with cells that span + * rows and columns, when the "striped" style does not work well. + * + * striped: + * Borders around the table and vertical borders between cells, striped rows, + * vertical margins, styled caption. + * Best for tables that have a header row, and a body containing a series of simple rows. + */ + +table.borderless, +table.plain, +table.striped { + margin-top: 10px; + margin-bottom: 10px; +} +table.borderless > caption, +table.plain > caption, +table.striped > caption { + font-weight: bold; + font-size: smaller; +} +table.borderless th, table.borderless td, +table.plain th, table.plain td, +table.striped th, table.striped td { + padding: 2px 5px; +} +table.borderless, +table.borderless > thead > tr > th, table.borderless > tbody > tr > th, table.borderless > tr > th, +table.borderless > thead > tr > td, table.borderless > tbody > tr > td, table.borderless > tr > td { + border: none; +} +table.borderless > thead > tr, table.borderless > tbody > tr, table.borderless > tr { + background-color: transparent; +} +table.plain { + border-collapse: collapse; + border: 1px solid black; +} +table.plain > thead > tr, table.plain > tbody tr, table.plain > tr { + background-color: transparent; +} +table.plain > thead > tr > th, table.plain > tbody > tr > th, table.plain > tr > th, +table.plain > thead > tr > td, table.plain > tbody > tr > td, table.plain > tr > td { + border: 1px solid black; +} +table.striped { + border-collapse: collapse; + border: 1px solid black; +} +table.striped > thead { + background-color: #E3E3E3; +} +table.striped > thead > tr > th, table.striped > thead > tr > td { + border: 1px solid black; +} +table.striped > tbody > tr:nth-child(even) { + background-color: #EEE +} +table.striped > tbody > tr:nth-child(odd) { + background-color: #FFF +} +table.striped > tbody > tr > th, table.striped > tbody > tr > td { + border-left: 1px solid black; + border-right: 1px solid black; +} +table.striped > tbody > tr > th { + font-weight: normal; +} diff --git a/doc/0.1.4/de_public/type-search-index.js b/doc/0.1.4/de_public/type-search-index.js new file mode 100644 index 0000000..feeb60f --- /dev/null +++ b/doc/0.1.4/de_public/type-search-index.js @@ -0,0 +1 @@ +typeSearchIndex = [{"l":"All Classes","url":"allclasses-index.html"},{"p":"bitchanger.gui.views","l":"AlphaNumGridView"},{"p":"bitchanger.gui.controls","l":"AlphaNumKeys"},{"p":"bitchanger.gui.controller","l":"AlphaNumKeysController"},{"p":"bitchanger.util","l":"ArrayUtils"},{"p":"bitchanger.gui.controls","l":"BaseSpinner"},{"p":"bitchanger.gui.controls","l":"BasicMenuBar"},{"p":"bitchanger.gui.controller","l":"BasicMenuController"},{"p":"bitchanger.main","l":"BitchangerLauncher"},{"p":"bitchanger.calculations","l":"Calculable"},{"p":"bitchanger.gui.views","l":"CalculatorView"},{"p":"bitchanger.calculations","l":"ChangeableNumber"},{"p":"bitchanger.preferences","l":"Comma"},{"p":"bitchanger.gui.views","l":"AlphaNumGridView.ConstraintType"},{"p":"bitchanger.gui.controller","l":"Controllable"},{"p":"bitchanger.gui.controller","l":"ControllableApplication"},{"p":"bitchanger.gui.controller","l":"Controller"},{"p":"bitchanger.gui.controller","l":"ControllerBase"},{"p":"bitchanger.gui.controller","l":"ConverterController"},{"p":"bitchanger.gui.controls","l":"ConverterMenuBar"},{"p":"bitchanger.gui.controller","l":"ConverterMenuController"},{"p":"bitchanger.gui.views","l":"ConverterView"},{"p":"bitchanger.calculations","l":"ConvertingNumbers"},{"p":"bitchanger.util","l":"FXUtils"},{"p":"bitchanger.util","l":"IconFactory"},{"p":"bitchanger.gui.controller","l":"IEEEController"},{"p":"bitchanger.gui.controller","l":"IEEEMenuController"},{"p":"bitchanger.gui.views","l":"IEEEView"},{"p":"bitchanger.gui.controls","l":"InformationDialog"},{"p":"bitchanger.gui.controls","l":"InformationDialog.InformationType"},{"p":"bitchanger.preferences","l":"Preferences"},{"p":"bitchanger.main","l":"PrimaryFXApp"},{"p":"bitchanger.util","l":"Resources"},{"p":"bitchanger.calculations","l":"SimpleChangeableNumber"},{"p":"bitchanger.preferences","l":"Style"},{"p":"bitchanger.gui.controls","l":"SVGIcon"},{"p":"bitchanger.util","l":"TriConsumer"},{"p":"bitchanger.gui.controls","l":"UnfocusedButton"},{"p":"bitchanger.gui.controls","l":"ValueButton"},{"p":"bitchanger.gui.controls","l":"ValueField"},{"p":"bitchanger.gui.views","l":"Viewable"},{"p":"bitchanger.gui.views","l":"ViewBase"}] \ No newline at end of file diff --git a/doc/0.1.4/de_public/type-search-index.zip b/doc/0.1.4/de_public/type-search-index.zip new file mode 100644 index 0000000000000000000000000000000000000000..b81e15e23cc49ecb002f70a71e0e979d3862edaf GIT binary patch literal 592 zcmWIWW@Zs#;Nak3xV}^(kO2vZ0of&$1*y8lsfk6&8M>KyDXA5DS;hHzbEn?+J8Zzy z7SH-s>KDVEjT;wsHVY&R3q4XgeJ1Usr?$FeNJqJPlIzbI?}eaW;ohI=p5xp2PEyoaJ4ULQZT zbw}~5u0qT2-^|>^ZWTG!Z_Hld!=(6t!{m=;&x3PHrUIK+r2Vsgx|}mtfyc-Diq*f8 zIS!TFw|HH+etM>{%bs)Lyu!P2^F5B`Pp$Yo94}4W5b;87Ut(^QK*`G&-*cl2qV1FQ zwz(f{eScm_F7o6DE}p1EeOgn5j<3-9?rJ=(Hup_(=(c5F*T3*x%YXHeLP_AXmZI5J z`F1OpO9)-L!G4<|`oTH9v+Z9#2GnDL76t>+dw?=}DXc=@%9_jj9q z%_&r7sYdj-98k%XhBk`&h+<@x7gnPkGTInl5hQ% zYB$v#QuaT0dVP7p=<{&L(~})R%T{P64A z_2)J|JrFtjjv241_>%?phHeW|#TD5E%l=Mm+5Pob)la4XZ+4E8wWevC7#SF + + + + +All Classes + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    All Classes

    +
    +
    + +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/allclasses.html b/doc/0.1.4/en_private/allclasses.html new file mode 100644 index 0000000..61c12cf --- /dev/null +++ b/doc/0.1.4/en_private/allclasses.html @@ -0,0 +1,69 @@ + + + + + +All Classes + + + + + + + + + + + + + +

    All Classes

    +
    + +
    + + diff --git a/doc/0.1.4/en_private/allpackages-index.html b/doc/0.1.4/en_private/allpackages-index.html new file mode 100644 index 0000000..87004e1 --- /dev/null +++ b/doc/0.1.4/en_private/allpackages-index.html @@ -0,0 +1,205 @@ + + + + + +All Packages + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    All Packages

    +
    +
    +
      +
    • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Package Summary 
      PackageDescription
      bitchanger.calculations +
      Contains all classes that are needed for calculating the data.
      +
      bitchanger.gui.controller +
      Provides controller, that gives functions to the views.
      +
      bitchanger.gui.controls +
      Allocates adjusted operating elements and functions for the user interface
      +
      bitchanger.gui.views +
      Offers different views that can be represented on a graphical surface
      +
      bitchanger.main +
      Contains the launcher with the main method and the JavaFX applications for starting the graphical user interface.
      +
      bitchanger.preferences +
      With classes that are included in this package, components have access to global settings and can adjust these.
      +
      bitchanger.util +
      Contains Classes with general and cross-class methods.
      +
      +
    • +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/bitchanger/BitchangerLauncherApp.html b/doc/0.1.4/en_private/bitchanger/BitchangerLauncherApp.html new file mode 100644 index 0000000..19508e4 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/BitchangerLauncherApp.html @@ -0,0 +1,327 @@ + + + + + +BitchangerLauncherApp + + + + + + + + + + + + + + + +
    + +
    + +
    +
    +
    Package bitchanger
    +

    Class BitchangerLauncherApp

    +
    +
    + +
    +
      +
    • +
      +
      public class BitchangerLauncherApp
      +extends Object
      +
      This class contains the main method that is the entry point for the application.
      +
      +
      Since:
      +
      0.1.0
      +
      Version:
      +
      0.1.0
      +
      Author:
      +
      Tim Mühle
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          BitchangerLauncherApp

          +
          public BitchangerLauncherApp()
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          main

          +
          public static void main​(String[] args)
          +
          The main method first reads in all stored settings for the class Preferences. + Then the main window of the application will be started and waits until this main window is closed.
          +
          +
          Parameters:
          +
          args - Arguments that are committed at the beginning of the program. The program ignores these arguments.
          +
          See Also:
          +
          Preferences, +Hauptfenster.main(String[])
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/calculations/Calculable.html b/doc/0.1.4/en_private/bitchanger/calculations/Calculable.html new file mode 100644 index 0000000..b6f9a75 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/calculations/Calculable.html @@ -0,0 +1,191 @@ + + + + + +Calculable + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface Calculable

    +
    +
    +
    +
      +
    • +
      +
      public interface Calculable
      +
    • +
    +
    +
    +
    + +
    + +
    + + diff --git a/doc/0.1.4/en_private/bitchanger/calculations/ChangeableNumber.html b/doc/0.1.4/en_private/bitchanger/calculations/ChangeableNumber.html new file mode 100644 index 0000000..6585833 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/calculations/ChangeableNumber.html @@ -0,0 +1,564 @@ + + + + + +ChangeableNumber + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface ChangeableNumber

    +
    +
    +
    +
      +
    • +
      +
      All Known Implementing Classes:
      +
      SimpleChangeableNumber
      +
      +
      +
      public interface ChangeableNumber
      +
      Interface that defines methods to convert numbers from any numeral system into another numeral system
      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Muehle
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Abstract Methods Default Methods 
        Modifier and TypeMethodDescription
        default doubleasDouble() 
        voidreset() +
        Resets the wrapped value.
        +
        default voidset​(double decValue) 
        voidsetBin​(String binValue) +
        Sets the value of this ChangeableNumber to the value of a binary string
        +
        voidsetDec​(String decValue) +
        Sets the value of this ChangeableNumber to the value of a decimal string
        +
        voidsetHex​(String hexValue) +
        Sets the value of this ChangeableNumber to the value of a hexadecimal string
        +
        voidsetOct​(String octValue) +
        Sets the value of this ChangeableNumber to the value of an octal string
        +
        voidsetValue​(String value, + int baseOfValue) +
        Sets the value of this ChangeableNumber to a value of any numeral system
        +
        StringtoBaseString​(int base) +
        Returns the string representation of this ChangeableNumber to any base.
        +
        StringtoBinString() +
        Returns the string representation of this ChangeableNumber as a binary string.
        +
        StringtoDecString() +
        Returns the string representation of this ChangeableNumber as a decimal string.
        +
        StringtoHexString() +
        Returns the string representation of this ChangeableNumber as a hexadecimal string.
        +
        StringtoOctString() +
        Returns the string representation of this ChangeableNumber as an octal string.
        +
        +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          asDouble

          +
          default double asDouble()
          +
        • +
        + + + +
          +
        • +

          set

          +
          default void set​(double decValue)
          +
        • +
        + + + + + + + + + + + + + + + + + + + + + + + +
          +
        • +

          reset

          +
          void reset()
          +
          Resets the wrapped value. The previous value gets deleted! If a toString method is called + after this method, an empty string will be returned. +

          + The wrapped value can be set again by using one of the set methods. +

          +
        • +
        + + + +
          +
        • +

          toHexString

          +
          String toHexString()
          +
          Returns the string representation of this ChangeableNumber as a hexadecimal string. +

          + The string is not labeled as hexadecimal, so the prefix is not leading! +

          +
          +
          Returns:
          +
          hexadecimal string representation of this ChangeableNumber
          +
          +
        • +
        + + + +
          +
        • +

          toDecString

          +
          String toDecString()
          +
          Returns the string representation of this ChangeableNumber as a decimal string.
          +
          +
          Returns:
          +
          decimal string representation of this ChangeableNumber
          +
          +
        • +
        + + + +
          +
        • +

          toOctString

          +
          String toOctString()
          +
          Returns the string representation of this ChangeableNumber as an octal string. +

          + The string is not labeled as octal, so the prefix is not leading! +

          +
          +
          Returns:
          +
          octal string representation of this ChangeableNumber
          +
          +
        • +
        + + + +
          +
        • +

          toBinString

          +
          String toBinString()
          +
          Returns the string representation of this ChangeableNumber as a binary string. +

          + The string is not labeled as binary, so the prefix is not leading! +

          +
          +
          Returns:
          +
          binary string representation of this ChangeableNumber
          +
          +
        • +
        + + + +
          +
        • +

          toBaseString

          +
          String toBaseString​(int base)
          +             throws IllegalArgumentException
          +
          Returns the string representation of this ChangeableNumber to any base. +

          + The String is not labeled by a prefix! +

          +
          +
          Parameters:
          +
          base - Base of the numeral system, in which this ChangeableNumber is represented
          +
          Returns:
          +
          String representation of this ChangeableNumber to the committed base
          +
          Throws:
          +
          IllegalArgumentException - if base leaves the range of values [2, 36]   -   see ConvertingNumbers.isValueToBase(int, String)
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +
    + + diff --git a/doc/0.1.4/en_private/bitchanger/calculations/ConvertingNumbers.html b/doc/0.1.4/en_private/bitchanger/calculations/ConvertingNumbers.html new file mode 100644 index 0000000..535a8df --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/calculations/ConvertingNumbers.html @@ -0,0 +1,1056 @@ + + + + + +ConvertingNumbers + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class ConvertingNumbers

    +
    +
    + +
    +
      +
    • +
      +
      public class ConvertingNumbers
      +extends Object
      +
      The ConvertingNumbers class contains methods for performing conversions of numbers with different numeral systems. +

      + These methods can convert positive and negative integral and float-point numbers. + Any numeral systems from base 2 to base 36 can be used. This exactly correspond to the character storage 0-9 and A-Z. + As string representation, numbers with capital and lower case letters can be handed over to methods in this class. The return + of these string only contains Numbers and upper case letters. +

      +

      + The comma sign can be selected in German (,) or English (.) with the class Preferences. + Furthermore the indicator for truncated fractional digits (...) can be activated or disabled. +

      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Muehle, Moritz Wolter
      +
      See Also:
      +
      Preferences
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeFieldDescription
        static StringFRACTIONAL_PRECISION_INDICATOR +
        Indicator for the cut fractional part in case of converting from decimal system into a system of any base
        +
        static intMAX_BASE +
        Constant for the highest possible base of 36 characters given through 0-9 and A-Z
        +
        static intMIN_BASE +
        Constant for the lowest possible base
        +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + + + +
        Constructors 
        ModifierConstructorDescription
        private ConvertingNumbers() +
        Do not let anyone instantiate this class
        +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Static Methods Concrete Methods 
        Modifier and TypeMethodDescription
        static doublebaseToDec​(int base, + String value) +
        Converts the submitted number value of any base base into a number of the base 10 in double.
        +
        private static doublebaseToDecFractionalPart​(int base, + String fractionalPart) +
        Converts the submitted decimal place of a number of any base into the decimal system.
        +
        private static doublebaseToDecIntPart​(int base, + String integerPart) +
        Converts the submitted number integerPart of any base base into the decimal system.
        +
        static StringbaseToDecString​(int base, + String value) +
        Converts the submitted number value of any base base into a number of the decimal system as string representation.
        +
        static StringbaseToDecString​(int base, + String value, + char comma) +
        Converts the submitted number value of any base base into a number of the decimal system as string representation.
        +
        private static voidcheckValue​(int base, + String value) +
        Checks if the submitted string value represents a number to the required base base and + throws an exception, if this is not given.
        +
        private static StringconvertDecFractionalToBaseString​(int newBase, + double fractionalPart, + int fractionalPrecision, + char comma) +
        Converts decimal places of decimal system into a value of any base as string representation.
        +
        private static StringconvertDecIntegerToBaseString​(int newBase, + long integerPart) +
        Converts an integer value of decimal system into a value of any base as string representation.
        +
        static StringdecToBase​(int newBase, + String decValue) +
        Converts the submitted number decValue of base 10 into a number of any base newBase as string representation.
        +
        static StringdecToBase​(int newBase, + String decValue, + char comma) +
        Converts the submitted number decValue of base 10 into a number of any base newBase as string representation.
        +
        static StringdecToBase​(int newBase, + String decValue, + char comma, + int fractionalPrecision) +
        Converts the submitted number decValue of base 10 into a number of any base newBase as string representation.
        +
        static StringdecToBaseBlocks​(int newBase, + String decValue, + char comma, + int blockSize) +
        Converts the submitted number decValue of base 10 into a number of any base newBase as string representation + and splits the number into blockt with given length.
        +
        private static chardigitOfValue​(int value) +
        Calculates the char for a value.
        +
        private static StringgetFirstComma​(String value) +
        Checks if the submitted string firstly contains a German comma (,) or an English comma (.).
        +
        private static StringBufferinsertSpace​(StringBuffer sb, + int blockSize) +
        Splits the StringBuffer sb into blocks with given length
        +
        static booleanisValueToBase​(int base, + String value) +
        Checks if value represents a number to the required base base.
        +
        private static String[]separateByComma​(String value) +
        Separated the numbers before and after the comma / point of the submitted string value, + which represents a number of the base base and returns these separated strings without + leading 0 in the decimal part.
        +
        static StringsplitInBlocks​(String value, + int blockSize) +
        Splits the String value into blocks of the given length.
        +
        private static StringtrimToNumberString​(String value) +
        Deletes the FRACTIONAL_PRECISION_INDICATOR and spaces and converts all letters to uppercase.
        +
        private static intvalueOfDigit​(char digit) +
        Calculates the place value of represented character.
        +
        + +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          MIN_BASE

          +
          public static final int MIN_BASE
          +
          Constant for the lowest possible base
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          MAX_BASE

          +
          public static final int MAX_BASE
          +
          Constant for the highest possible base of 36 characters given through 0-9 and A-Z
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          FRACTIONAL_PRECISION_INDICATOR

          +
          public static final String FRACTIONAL_PRECISION_INDICATOR
          +
          Indicator for the cut fractional part in case of converting from decimal system into a system of any base
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ConvertingNumbers

          +
          private ConvertingNumbers()
          +
          Do not let anyone instantiate this class
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          isValueToBase

          +
          public static boolean isValueToBase​(int base,
          +                                    String value)
          +                             throws IllegalArgumentException
          +
          Checks if value represents a number to the required base base. + If the indicator for truncated fractional digits is activated, it will be ignored in the evaluation. + Whitespace can be used as thousands separator and will be ignored by this method.
          +
          +
          Parameters:
          +
          value - number to be checked, represented as String
          +
          base - requested base of value - only values between 2 and 36 are allowed
          +
          Returns:
          +
          true, if value represents a number to the requested base base + , otherwise false will be returned.
          +
          Throws:
          +
          IllegalArgumentException - if basis leaves the range of value [2, 36]
          +
          +
        • +
        + + + + + + + + + + + +
          +
        • +

          baseToDecString

          +
          public static String baseToDecString​(int base,
          +                                     String value,
          +                                     char comma)
          +                              throws NullPointerException,
          +                                     NumberFormatException,
          +                                     IllegalArgumentException
          +
          Converts the submitted number value of any base base into a number of the decimal system as string representation.
          +
          +
          Parameters:
          +
          base - Specific base of the submitted value value
          +
          value - The numeric value, which should be converted as string representation
          +
          comma - The char which is used as comma for floating point numbers
          +
          Returns:
          +
          Value of the Number in decimal system as string representation
          +
          Throws:
          +
          NullPointerException - if the parameter value is null
          +
          NumberFormatException - if the parameter value is not a number of base base
          +
          IllegalArgumentException - if value is an empty string or basis leaves the range of value [2, 36]   -   see isValueToBase(int,java.lang.String)
          +
          +
        • +
        + + + +
          +
        • +

          decToBase

          +
          public static String decToBase​(int newBase,
          +                               String decValue)
          +                        throws NullPointerException,
          +                               NumberFormatException
          +
          Converts the submitted number decValue of base 10 into a number of any base newBase as string representation. +

          + If the indicator of decimal places is activated in the class Preferences + the cut decimal places caused due the maximum number of decimal places will be shown as "..." +

          +
          +
          Parameters:
          +
          newBase - Base of the new numeral system, which will the number decValue be converted in
          +
          decValue - Value of the number in decimal system as string representation
          +
          Returns:
          +
          Converted number of the submitted base as string representation with default set comma
          +
          Throws:
          +
          NullPointerException - If the parameter decValue is null
          +
          NumberFormatException - If the parameter decValue is not a number of base 10
          +
          IllegalArgumentException - If decValue is an empty string or newBase leaves the range of values [2, 36]   -   see isValueToBase(int,java.lang.String)
          +
          See Also:
          +
          Preferences
          +
          +
        • +
        + + + +
          +
        • +

          decToBase

          +
          public static String decToBase​(int newBase,
          +                               String decValue,
          +                               char comma)
          +                        throws NullPointerException,
          +                               NumberFormatException,
          +                               IllegalArgumentException
          +
          Converts the submitted number decValue of base 10 into a number of any base newBase as string representation. +

          + If the indicator of decimal places is activated in the class Preferences + the cut decimal places caused due the maximum number of decimal places will be shown as "..." +

          +
          +
          Parameters:
          +
          newBase - Base of the new numeral system, which will the number decValue be converted in
          +
          decValue - Value of the number in decimal system as string representation
          +
          comma - the char which is used as comma for floating point numbers
          +
          Returns:
          +
          Converted number of the submitted base as string representation with default set comma
          +
          Throws:
          +
          NullPointerException - If the parameter decValue is null
          +
          NumberFormatException - If the parameter decValue is not a number of base 10
          +
          IllegalArgumentException - If decValue is an empty string or newBase leaves the range of values [2, 36]   -   see isValueToBase(int,java.lang.String)
          +
          See Also:
          +
          Preferences
          +
          +
        • +
        + + + +
          +
        • +

          decToBase

          +
          public static String decToBase​(int newBase,
          +                               String decValue,
          +                               char comma,
          +                               int fractionalPrecision)
          +                        throws NullPointerException,
          +                               NumberFormatException,
          +                               IllegalArgumentException,
          +                               UnsupportedOperationException
          +
          Converts the submitted number decValue of base 10 into a number of any base newBase as string representation. +

          + If the indicator of decimal places is activated in the class Preferences + the cut decimal places caused due the maximum number of decimal places will be shown as "..." +

          +
          +
          Parameters:
          +
          newBase - Base of the new numeral system, which will the number decValue be converted in
          +
          decValue - Value of the number in decimal system as String representation
          +
          comma - the char which is used as comma for floating point numbers
          +
          fractionalPrecision - maximum number of decimal places
          +
          Returns:
          +
          Converted number of the submitted base as string representation with default set comma
          +
          Throws:
          +
          NullPointerException - If the parameter decValue is null
          +
          NumberFormatException - If the parameter decValue is not a number of base 10
          +
          IllegalArgumentException - If decValue is an empty String or newBase leaves the range of values [2, 36]   -   see isValueToBase(int,java.lang.String)
          +
          UnsupportedOperationException
          +
          See Also:
          +
          Preferences
          +
          +
        • +
        + + + +
          +
        • +

          decToBaseBlocks

          +
          public static String decToBaseBlocks​(int newBase,
          +                                     String decValue,
          +                                     char comma,
          +                                     int blockSize)
          +                              throws NullPointerException,
          +                                     NumberFormatException,
          +                                     IllegalArgumentException
          +
          Converts the submitted number decValue of base 10 into a number of any base newBase as string representation + and splits the number into blockt with given length. +

          + If the indicator of decimal places is activated in the class Preferences + the cut decimal places caused due the maximum number of decimal places will be shown as "..." +

          +
          +
          Parameters:
          +
          newBase - Base of the new numeral system, which will the number decValue be converted in
          +
          decValue - Value of the number in decimal system as string representation
          +
          comma - the char which is used as comma for floating point numbers
          +
          blockSize - length of the blocks into which the string is splitted
          +
          Returns:
          +
          Converted number of the submitted base as string representation with default set comma
          +
          Throws:
          +
          NullPointerException - If the parameter decValue is null
          +
          NumberFormatException - If the parameter decValue is not a number of base 10
          +
          IllegalArgumentException - If decValue is an empty string or newBase leaves the range of values [2, 36]   -   see isValueToBase(int,java.lang.String)
          +
          Since:
          +
          Bitchanger 0.1.4
          +
          See Also:
          +
          Preferences, +decToBase(int, String, char), +splitInBlocks(String, int)
          +
          +
        • +
        + + + +
          +
        • +

          splitInBlocks

          +
          public static String splitInBlocks​(String value,
          +                                   int blockSize)
          +
          Splits the String value into blocks of the given length. This is used e.g. to separate thousands.
          +
          +
          Parameters:
          +
          value - String that is splitted
          +
          blockSize - block's length
          +
          Returns:
          +
          splitted String with blocks
          +
          Since:
          +
          Bitchanger 0.1.4
          +
          +
        • +
        + + + + + + + +
          +
        • +

          baseToDecIntPart

          +
          private static double baseToDecIntPart​(int base,
          +                                       String integerPart)
          +
          Converts the submitted number integerPart of any base base into the decimal system. + For converting of any base into the decimal system, Horner-Schema will be used.
          +
          +
          Parameters:
          +
          base - Any base of the numeral system of integerPart in the range [2; 36]
          +
          integerPart - Number which will be converted as string representation
          +
          Returns:
          +
          Value of the submitted number as decimal representation asdouble
          +
          +
        • +
        + + + +
          +
        • +

          baseToDecFractionalPart

          +
          private static double baseToDecFractionalPart​(int base,
          +                                              String fractionalPart)
          +
          Converts the submitted decimal place of a number of any base into the decimal system. + For converting of any base into the decimal system, Horner-Schema will be used.
          +
          +
          Parameters:
          +
          base - Any base of the numeral system of fractionalPart in the range [2; 36]
          +
          fractionalPart - Decimal places of a number which will be converted without comma as an integer as string representation
          +
          Returns:
          +
          Value of the submitted decimal place as decimal representation asdouble
          +
          +
        • +
        + + + +
          +
        • +

          convertDecIntegerToBaseString

          +
          private static String convertDecIntegerToBaseString​(int newBase,
          +                                                    long integerPart)
          +
          Converts an integer value of decimal system into a value of any base as string representation.
          +
          +
          Parameters:
          +
          newBase - Base of the new numeral system
          +
          integerPart - Integer value of decimal system
          +
          Returns:
          +
          Returned value of base basis as string representation
          +
          +
        • +
        + + + +
          +
        • +

          convertDecFractionalToBaseString

          +
          private static String convertDecFractionalToBaseString​(int newBase,
          +                                                       double fractionalPart,
          +                                                       int fractionalPrecision,
          +                                                       char comma)
          +
          Converts decimal places of decimal system into a value of any base as string representation. + If the indicator of decimal places is activated in the class Preferences + the cut decimal places caused due the maximum number of decimal places will be shown as "..."
          +
          +
          Parameters:
          +
          newBase - Base of the new numeral system
          +
          fractionalPart - Decimal places of the decimal system
          +
          fractionalPrecision - Maximum number of decimal places in the result
          +
          comma - Character that is placed as comma before the part of decimal places
          +
          Returns:
          +
          converted decimal places of the new base with leading comma as string representation
          +
          See Also:
          +
          Preferences.setIndicateFractionalPrecision(boolean)
          +
          +
        • +
        + + + +
          +
        • +

          digitOfValue

          +
          private static char digitOfValue​(int value)
          +
          Calculates the char for a value. + The characters 0 to 9 correspond to the values 0 to 9 - The letters A to Z correspond to the values 10 to 35.
          +
          +
          Parameters:
          +
          value - Value of the position sought on decimal system
          +
          Returns:
          +
          Character that shows the place value of the submitted value
          +
          See Also:
          +
          valueOfDigit(char)
          +
          +
        • +
        + + + +
          +
        • +

          valueOfDigit

          +
          private static int valueOfDigit​(char digit)
          +
          Calculates the place value of represented character. + The characters 0 to 9 correspond to the values 0 to 9 - The letters A to Z correspond to the values 10 to 35.
          +
          +
          Parameters:
          +
          digit - Character whose value will be calculated
          +
          Returns:
          +
          Place value that is represented by digit
          +
          See Also:
          +
          digitOfValue(int)
          +
          +
        • +
        + + + +
          +
        • +

          separateByComma

          +
          private static String[] separateByComma​(String value)
          +                                 throws NumberFormatException
          +
          Separated the numbers before and after the comma / point of the submitted string value, + which represents a number of the base base and returns these separated strings without + leading 0 in the decimal part.
          +
          +
          Parameters:
          +
          value - Number to be disassembled
          +
          Returns:
          +
          Integer in index 0 and decimal place in index 1, both as integer as string representation
          +
          Throws:
          +
          NumberFormatException - If value is not a number represented as string, caused due to many commas
          +
          +
        • +
        + + + +
          +
        • +

          getFirstComma

          +
          private static String getFirstComma​(String value)
          +
          Checks if the submitted string firstly contains a German comma (,) or an English comma (.).
          +
          +
          Parameters:
          +
          value - String, which is checked if it contains a comma
          +
          Returns:
          +
          the comma which is on the front position or nullif it does not contain a comma
          +
          +
        • +
        + + + +
          +
        • +

          trimToNumberString

          +
          private static String trimToNumberString​(String value)
          +
          Deletes the FRACTIONAL_PRECISION_INDICATOR and spaces and converts all letters to uppercase. + Returns the formatted String.
          +
          +
          Parameters:
          +
          value - String to be formatted
          +
          Returns:
          +
          formatted String
          +
          +
        • +
        + + + +
          +
        • +

          insertSpace

          +
          private static StringBuffer insertSpace​(StringBuffer sb,
          +                                        int blockSize)
          +
          Splits the StringBuffer sb into blocks with given length
          +
          +
          Parameters:
          +
          sb - StringBuffer that gets split
          +
          blockSize - block's length
          +
          Returns:
          +
          modified StringBuffer, that is same as the argument
          +
          Since:
          +
          Bitchanger 0.1.4
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/calculations/SimpleChangeableNumber.html b/doc/0.1.4/en_private/bitchanger/calculations/SimpleChangeableNumber.html new file mode 100644 index 0000000..bc67b6e --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/calculations/SimpleChangeableNumber.html @@ -0,0 +1,817 @@ + + + + + +SimpleChangeableNumber + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class SimpleChangeableNumber

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      ChangeableNumber
      +
      +
      +
      public class SimpleChangeableNumber
      +extends Object
      +implements ChangeableNumber
      +
      The class SimpleChangeableNumber offers a complete implementation of ChangeableNumber. +

      + Each instance of this class wraps a value, that gets set from different numeral systems and can get + converted into any numeral system. The strings in these numeral systems do not contain any prefixes + that refer to the base. +

      +

      + The string representations of the number systems are splitted into blocks for better readability. + The blocks are four characters long in the hexadecimal and binary systems, in all other number systems + the blocks are three characters long. +

      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Muehle, Moritz Wolter
      +
      See Also:
      +
      ChangeableNumber
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeFieldDescription
        private StringbinValue +
        wrapped value as binary String representation
        +
        private StringdecValue +
        wrapped value as decimal String representation
        +
        private StringhexValue +
        wrapped value as hexadecimal String representation
        +
        private StringoctalValue +
        wrapped value as octal String representation
        +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + + + + + +
        Constructors 
        ConstructorDescription
        SimpleChangeableNumber() +
        Generates a new instance with 0 as wrapped value
        +
        SimpleChangeableNumber​(String decValue) +
        Generates a new instance that represents the committed decimal value
        +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethodDescription
        private voidinitDecimal​(String decValue) +
        Sets the wrapped value of this SimpleChangeableNumber to the committed decimal value.
        +
        voidreset() +
        Resets the wrapped value.
        +
        voidsetBin​(String binValue) +
        Sets the value of this ChangeableNumber to the value of a binary string
        +
        voidsetDec​(String decValue) +
        Sets the value of this ChangeableNumber to the value of a decimal string
        +
        voidsetHex​(String hexValue) +
        Sets the value of this ChangeableNumber to the value of a hexadecimal string
        +
        voidsetOct​(String octValue) +
        Sets the value of this ChangeableNumber to the value of an octal string
        +
        voidsetValue​(String value, + int baseOfValue) +
        Sets the value of this ChangeableNumber to a value of any numeral system
        +
        StringtoBaseString​(int base) +
        Returns the string representation of this ChangeableNumber to any base.
        +
        StringtoBinString() +
        Returns the string representation of this ChangeableNumber as a binary string.
        +
        StringtoDecString() +
        Returns the string representation of this ChangeableNumber as a decimal string.
        +
        StringtoHexString() +
        Returns the string representation of this ChangeableNumber as a hexadecimal string.
        +
        StringtoOctString() +
        Returns the string representation of this ChangeableNumber as an octal string.
        +
        StringtoString() +
        Returns a String that includes the hexadecimal, decimal, octal and binary + presentation of the wrapped value.
        +
        + + +
      • +
      +
      +
    • +
    +
    +
    + +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/calculations/class-use/Calculable.html b/doc/0.1.4/en_private/bitchanger/calculations/class-use/Calculable.html new file mode 100644 index 0000000..4272016 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/calculations/class-use/Calculable.html @@ -0,0 +1,149 @@ + + + + + +Uses of Interface bitchanger.calculations.Calculable + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    bitchanger.calculations.Calculable

    +
    +
    No usage of bitchanger.calculations.Calculable
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/calculations/class-use/ChangeableNumber.html b/doc/0.1.4/en_private/bitchanger/calculations/class-use/ChangeableNumber.html new file mode 100644 index 0000000..351c3e9 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/calculations/class-use/ChangeableNumber.html @@ -0,0 +1,227 @@ + + + + + +Uses of Interface bitchanger.calculations.ChangeableNumber + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    bitchanger.calculations.ChangeableNumber

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/calculations/class-use/ConvertingNumbers.html b/doc/0.1.4/en_private/bitchanger/calculations/class-use/ConvertingNumbers.html new file mode 100644 index 0000000..7a95f09 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/calculations/class-use/ConvertingNumbers.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.calculations.ConvertingNumbers + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.calculations.ConvertingNumbers

    +
    +
    No usage of bitchanger.calculations.ConvertingNumbers
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/calculations/class-use/SimpleChangeableNumber.html b/doc/0.1.4/en_private/bitchanger/calculations/class-use/SimpleChangeableNumber.html new file mode 100644 index 0000000..0c58544 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/calculations/class-use/SimpleChangeableNumber.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.calculations.SimpleChangeableNumber + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.calculations.SimpleChangeableNumber

    +
    +
    No usage of bitchanger.calculations.SimpleChangeableNumber
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/calculations/package-summary.html b/doc/0.1.4/en_private/bitchanger/calculations/package-summary.html new file mode 100644 index 0000000..6053597 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/calculations/package-summary.html @@ -0,0 +1,201 @@ + + + + + +bitchanger.calculations + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package bitchanger.calculations

    +
    +
    +
    + + +
    Contains all classes that are needed for calculating the data.
    +
    +
      +
    • + + + + + + + + + + + + + + + + +
      Interface Summary 
      InterfaceDescription
      Calculable 
      ChangeableNumber +
      Interface that defines methods to convert numbers from any numeral system into another numeral system
      +
      +
    • +
    • + + + + + + + + + + + + + + + + +
      Class Summary 
      ClassDescription
      ConvertingNumbers +
      The ConvertingNumbers class contains methods for performing conversions of numbers with different numeral systems.
      +
      SimpleChangeableNumber +
      The class SimpleChangeableNumber offers a complete implementation of ChangeableNumber.
      +
      +
    • +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/bitchanger/calculations/package-tree.html b/doc/0.1.4/en_private/bitchanger/calculations/package-tree.html new file mode 100644 index 0000000..853412f --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/calculations/package-tree.html @@ -0,0 +1,172 @@ + + + + + +bitchanger.calculations Class Hierarchy + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package bitchanger.calculations

    +Package Hierarchies: + +
    +
    +
    +

    Class Hierarchy

    + +
    +
    +

    Interface Hierarchy

    + +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/bitchanger/calculations/package-use.html b/doc/0.1.4/en_private/bitchanger/calculations/package-use.html new file mode 100644 index 0000000..1ec8a41 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/calculations/package-use.html @@ -0,0 +1,213 @@ + + + + + +Uses of Package bitchanger.calculations + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    bitchanger.calculations

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/class-use/BitchangerLauncherApp.html b/doc/0.1.4/en_private/bitchanger/class-use/BitchangerLauncherApp.html new file mode 100644 index 0000000..e8d351d --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/class-use/BitchangerLauncherApp.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.BitchangerLauncherApp + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.BitchangerLauncherApp

    +
    +
    No usage of bitchanger.BitchangerLauncherApp
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/components/Calculable.html b/doc/0.1.4/en_private/bitchanger/components/Calculable.html new file mode 100644 index 0000000..2acf1e0 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/components/Calculable.html @@ -0,0 +1,191 @@ + + + + + +Calculable + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface Calculable

    +
    +
    +
    +
      +
    • +
      +
      public interface Calculable
      +
    • +
    +
    +
    +
    + +
    + +
    + + diff --git a/doc/0.1.4/en_private/bitchanger/components/ChangeableNumber.html b/doc/0.1.4/en_private/bitchanger/components/ChangeableNumber.html new file mode 100644 index 0000000..fa57366 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/components/ChangeableNumber.html @@ -0,0 +1,447 @@ + + + + + +ChangeableNumber + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface ChangeableNumber

    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    + +
    + +
    + + diff --git a/doc/0.1.4/en_private/bitchanger/components/ConvertingNumbers.html b/doc/0.1.4/en_private/bitchanger/components/ConvertingNumbers.html new file mode 100644 index 0000000..1a48758 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/components/ConvertingNumbers.html @@ -0,0 +1,926 @@ + + + + + +ConvertingNumbers + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class ConvertingNumbers

    +
    +
    + +
    +
      +
    • +
      +
      public class ConvertingNumbers
      +extends Object
      +
      The ConvertingNumbers class contains methods for performing conversions of numbers with different numeral systems. +

      + These methods can convert positive and negative integral and float-point numbers. + Any numeral systems from base 2 to base 36 can be used. This exactly correspond to the character storage 0-9 and A-Z. + As string representation, numbers with capital and lower case letters can be handed over to methods in this class. The return + of these string only contains Numbers and upper case letters. +

      +

      + The comma sign can be selected in German (,) or English (.) with the class Preferences. + Furthermore the indicator for truncated fractional digits (...) can be activated or disabled. +

      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle, Moritz Wolter
      +
      See Also:
      +
      Preferences
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeFieldDescription
        static StringFRACTIONAL_PRECISION_INDICATOR +
        Indicator for the cut fractional part in case of converting from decimal system into a system of any base
        +
        static intMAX_BASE +
        Constant for the highest possible base of 36 characters given through 0-9 and A-Z
        +
        static intMIN_BASE +
        Constant for the lowest possible base
        +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + + + +
        Constructors 
        ModifierConstructorDescription
        private ConvertingNumbers() +
        Do not let anyone instantiate this class
        +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Static Methods Concrete Methods 
        Modifier and TypeMethodDescription
        static doublebaseToDec​(int base, + String value) +
        Converts the submitted number value of any base base into a number of the base 10 in double.
        +
        private static doublebaseToDecFractionalPart​(int base, + String fractionalPart) +
        Converts the submitted decimal place of a number of any base into the decimal system.
        +
        private static doublebaseToDecIntPart​(int base, + String integerPart) +
        Converts the submitted number integerPart of any base base into the decimal system.
        +
        static StringbaseToDecString​(int base, + String value) +
        Converts the submitted number value of any base base into a number of the decimal system as string representation.
        +
        static StringbaseToDecString​(int base, + String value, + char comma) +
        Converts the submitted number value of any base base into a number of the decimal system as string representation.
        +
        private static voidcheckValue​(int base, + String value) +
        Checks if the submitted string value represents a number to the required base base and + throws an exception, if this is not given.
        +
        private static StringconvertDecFractionalToBaseString​(int newBase, + double fractionalPart, + int fractionalPrecision, + char comma) +
        Converts decimal places of decimal system into a value of any base as string representation.
        +
        private static StringconvertDecIntegerToBaseString​(int newBase, + long integerPart) +
        Converts an integer value of decimal system into a value of any base as string representation.
        +
        static StringdecToBase​(int newBase, + String decValue) +
        Converts the submitted number decValue of base 10 into a number of any base newBase as string representation.
        +
        static StringdecToBase​(int newBase, + String decValue, + char comma) +
        Converts the submitted number decValue of base 10 into a number of any base newBase as string representation.
        +
        static StringdecToBase​(int newBase, + String decValue, + char comma, + int fractionalPrecision) +
        Converts the submitted number decValue of base 10 into a number of any base newBase as string representation.
        +
        private static chardigitOfValue​(int value) +
        Calculates the char for a value.
        +
        private static StringgetFirstComma​(String value) +
        Checks if the submitted string firstly contains a German comma (,) or an English comma (.).
        +
        static booleanisValueToBase​(int base, + String value) +
        Checks if value represents a number to the required base base.
        +
        private static String[]separateByComma​(int base, + String value) +
        Separated the numbers before and after the comma / point of the submitted string value, + which represents a number of the base base and returns these separated strings without + leading 0 in the decimal part.
        +
        private static intvalueOfDigit​(char digit) +
        Calculates the place value of represented character.
        +
        + +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          MIN_BASE

          +
          public static final int MIN_BASE
          +
          Constant for the lowest possible base
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          MAX_BASE

          +
          public static final int MAX_BASE
          +
          Constant for the highest possible base of 36 characters given through 0-9 and A-Z
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          FRACTIONAL_PRECISION_INDICATOR

          +
          public static final String FRACTIONAL_PRECISION_INDICATOR
          +
          Indicator for the cut fractional part in case of converting from decimal system into a system of any base
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ConvertingNumbers

          +
          private ConvertingNumbers()
          +
          Do not let anyone instantiate this class
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          isValueToBase

          +
          public static boolean isValueToBase​(int base,
          +                                    String value)
          +                             throws IllegalArgumentException
          +
          Checks if value represents a number to the required base base. + If the indicator for truncated fractional digits is activated, it will be ignored in the evaluation. + Whitespace can be used as thousands separator and will be ignored by this method.
          +
          +
          Parameters:
          +
          value - number to be checked, represented as String
          +
          base - requested base of value - only values between 2 and 36 are allowed
          +
          Returns:
          +
          true, if value represents a number to the requested base base + , otherwise false will be returned.
          +
          Throws:
          +
          IllegalArgumentException - if basis leaves the range of value [2, 36]
          +
          +
        • +
        + + + + + + + + + + + +
          +
        • +

          baseToDecString

          +
          public static String baseToDecString​(int base,
          +                                     String value,
          +                                     char comma)
          +                              throws NullPointerException,
          +                                     NumberFormatException,
          +                                     IllegalArgumentException
          +
          Converts the submitted number value of any base base into a number of the decimal system as string representation.
          +
          +
          Parameters:
          +
          base - Specific base of the submitted value value
          +
          value - The numeric value, which should be converted as string representation
          +
          comma - The char which is used as comma for floating point numbers
          +
          Returns:
          +
          Value of the Number in decimal system as string representation
          +
          Throws:
          +
          NullPointerException - if the parameter value is null
          +
          NumberFormatException - if the parameter value is not a number of base base
          +
          IllegalArgumentException - if value is an empty string or basis leaves the range of value [2, 36]   -   see isValueToBase(int,java.lang.String)
          +
          +
        • +
        + + + +
          +
        • +

          decToBase

          +
          public static String decToBase​(int newBase,
          +                               String decValue)
          +                        throws NullPointerException,
          +                               NumberFormatException
          +
          Converts the submitted number decValue of base 10 into a number of any base newBase as string representation. +

          + If the indicator of decimal places is activated in the class Preferences + the cut decimal places caused due the maximum number of decimal places will be shown as "..." +

          +
          +
          Parameters:
          +
          newBase - Base of the new numeral system, which will the number decValue be converted in
          +
          decValue - Value of the number in decimal system as string representation
          +
          Returns:
          +
          Converted number of the submitted base as string representation with default set comma
          +
          Throws:
          +
          NullPointerException - If the parameter decValue is null
          +
          NumberFormatException - If the parameter decValue is not a number of base 10
          +
          IllegalArgumentException - If decValue is an empty string or newBase leaves the range of value [2, 36]   -   see isValueToBase(int,java.lang.String)
          +
          See Also:
          +
          Preferences
          +
          +
        • +
        + + + +
          +
        • +

          decToBase

          +
          public static String decToBase​(int newBase,
          +                               String decValue,
          +                               char comma)
          +                        throws NullPointerException,
          +                               NumberFormatException,
          +                               IllegalArgumentException
          +
          Converts the submitted number decValue of base 10 into a number of any base newBase as string representation. +

          + If the indicator of decimal places is activated in the class Preferences + the cut decimal places caused due the maximum number of decimal places will be shown as "..." +

          +
          +
          Parameters:
          +
          newBase - Base of the new numeral system, which will the number decValue be converted in
          +
          decValue - Value of the number in decimal system as string representation
          +
          comma - the char which is used as comma for floating point numbers
          +
          Returns:
          +
          Converted number of the submitted base as string representation with default set comma
          +
          Throws:
          +
          NullPointerException - If the parameter decValue is null
          +
          NumberFormatException - If the parameter decValue is not a number of base 10
          +
          IllegalArgumentException - If decValue is an empty string or newBase leaves the range of value [2, 36]   -   see isValueToBase(int,java.lang.String)
          +
          See Also:
          +
          Preferences
          +
          +
        • +
        + + + +
          +
        • +

          decToBase

          +
          public static String decToBase​(int newBase,
          +                               String decValue,
          +                               char comma,
          +                               int fractionalPrecision)
          +                        throws NullPointerException,
          +                               NumberFormatException,
          +                               IllegalArgumentException
          +
          Converts the submitted number decValue of base 10 into a number of any base newBase as string representation. +

          + If the indicator of decimal places is activated in the class Preferences + the cut decimal places caused due the maximum number of decimal places will be shown as "..." +

          +
          +
          Parameters:
          +
          newBase - Base of the new numeral system, which will the number decValue be converted in
          +
          decValue - Value of the number in decimal system as string representation
          +
          comma - the char which is used as comma for floating point numbers
          +
          fractionalPrecision - maximum number of decimal places
          +
          Returns:
          +
          Converted number of the submitted base as string representation with default set comma
          +
          Throws:
          +
          NullPointerException - If the parameter decValue is null
          +
          NumberFormatException - If the parameter decValue is not a number of base 10
          +
          IllegalArgumentException - If decValue is an empty string or newBase leaves the range of value [2, 36]   -   see isValueToBase(int,java.lang.String)
          +
          See Also:
          +
          Preferences
          +
          +
        • +
        + + + + + + + +
          +
        • +

          baseToDecIntPart

          +
          private static double baseToDecIntPart​(int base,
          +                                       String integerPart)
          +
          Converts the submitted number integerPart of any base base into the decimal system. + For converting of any base into the decimal system, Horner-Schema will be used.
          +
          +
          Parameters:
          +
          base - Any base of the numeral system of integerPart in the range [2; 36]
          +
          integerPart - Number which will be converted as string representation
          +
          Returns:
          +
          Value of the submitted number as decimal representation asdouble
          +
          +
        • +
        + + + +
          +
        • +

          baseToDecFractionalPart

          +
          private static double baseToDecFractionalPart​(int base,
          +                                              String fractionalPart)
          +
          Converts the submitted decimal place of a number of any base into the decimal system. + For converting of any base into the decimal system, Horner-Schema will be used.
          +
          +
          Parameters:
          +
          base - Any base of the numeral system of fractionalPart in the range [2; 36]
          +
          fractionalPart - Decimal places of a number which will be converted without comma as an integer as string representation
          +
          Returns:
          +
          Value of the submitted decimal place as decimal representation asdouble
          +
          +
        • +
        + + + +
          +
        • +

          convertDecIntegerToBaseString

          +
          private static String convertDecIntegerToBaseString​(int newBase,
          +                                                    long integerPart)
          +
          Converts an integer value of decimal system into a value of any base as string representation.
          +
          +
          Parameters:
          +
          newBase - Base of the new numeral system
          +
          integerPart - Integer value of decimal system
          +
          Returns:
          +
          Returned value of base basis as string representation
          +
          +
        • +
        + + + +
          +
        • +

          convertDecFractionalToBaseString

          +
          private static String convertDecFractionalToBaseString​(int newBase,
          +                                                       double fractionalPart,
          +                                                       int fractionalPrecision,
          +                                                       char comma)
          +
          Converts decimal places of decimal system into a value of any base as string representation. + If the indicator of decimal places is activated in the class Preferences + the cut decimal places caused due the maximum number of decimal places will be shown as "..."
          +
          +
          Parameters:
          +
          newBase - Base of the new numeral system
          +
          fractionalPart - Decimal places of the decimal system
          +
          fractionalPrecision - Maximum number of decimal places in the result
          +
          comma - Character that is placed as comma before the part of decimal places
          +
          Returns:
          +
          converted decimal places of the new base with leading comma as string representation
          +
          See Also:
          +
          Preferences.setIndicateFractionalPrecision(boolean)
          +
          +
        • +
        + + + +
          +
        • +

          digitOfValue

          +
          private static char digitOfValue​(int value)
          +
          Calculates the char for a value. + The characters 0 to 9 correspond to the values 0 to 9 - The letters A to Z correspond to the values 10 to 35.
          +
          +
          Parameters:
          +
          value - Value of the position sought on decimal system
          +
          Returns:
          +
          Character that shows the place value of the submitted value
          +
          See Also:
          +
          valueOfDigit(char)
          +
          +
        • +
        + + + +
          +
        • +

          valueOfDigit

          +
          private static int valueOfDigit​(char digit)
          +
          Calculates the place value of represented character. + The characters 0 to 9 correspond to the values 0 to 9 - The letters A to Z correspond to the values 10 to 35.
          +
          +
          Parameters:
          +
          digit - Character whose value will be calculated
          +
          Returns:
          +
          Place value that is represented by digit
          +
          See Also:
          +
          digitOfValue(int)
          +
          +
        • +
        + + + +
          +
        • +

          separateByComma

          +
          private static String[] separateByComma​(int base,
          +                                        String value)
          +                                 throws NumberFormatException
          +
          Separated the numbers before and after the comma / point of the submitted string value, + which represents a number of the base base and returns these separated strings without + leading 0 in the decimal part.
          +
          +
          Parameters:
          +
          base - Base of the numeral system of value
          +
          value - Number to be disassembled
          +
          Returns:
          +
          Integer in index 0 and decimal place in index 1, both as integer as string representation
          +
          Throws:
          +
          NumberFormatException - If value is not a number represented as string, caused due to many commas
          +
          +
        • +
        + + + +
          +
        • +

          getFirstComma

          +
          private static String getFirstComma​(String value)
          +
          Checks if the submitted string firstly contains a German comma (,) or an English comma (.).
          +
          +
          Parameters:
          +
          value - String, which is checked if it contains a comma
          +
          Returns:
          +
          the comma which is on the front position or nullif it does not contain a comma
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/components/SimpleChangeableNumber.html b/doc/0.1.4/en_private/bitchanger/components/SimpleChangeableNumber.html new file mode 100644 index 0000000..205631a --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/components/SimpleChangeableNumber.html @@ -0,0 +1,672 @@ + + + + + +SimpleChangeableNumber + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class SimpleChangeableNumber

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/components/class-use/Calculable.html b/doc/0.1.4/en_private/bitchanger/components/class-use/Calculable.html new file mode 100644 index 0000000..70ab246 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/components/class-use/Calculable.html @@ -0,0 +1,149 @@ + + + + + +Uses of Interface bitchanger.components.Calculable + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    bitchanger.components.Calculable

    +
    +
    No usage of bitchanger.components.Calculable
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/components/class-use/ChangeableNumber.html b/doc/0.1.4/en_private/bitchanger/components/class-use/ChangeableNumber.html new file mode 100644 index 0000000..814841c --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/components/class-use/ChangeableNumber.html @@ -0,0 +1,219 @@ + + + + + +Uses of Interface bitchanger.components.ChangeableNumber + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    bitchanger.components.ChangeableNumber

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/components/class-use/ConvertingNumbers.html b/doc/0.1.4/en_private/bitchanger/components/class-use/ConvertingNumbers.html new file mode 100644 index 0000000..e1cef66 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/components/class-use/ConvertingNumbers.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.components.ConvertingNumbers + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.components.ConvertingNumbers

    +
    +
    No usage of bitchanger.components.ConvertingNumbers
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/components/class-use/SimpleChangeableNumber.html b/doc/0.1.4/en_private/bitchanger/components/class-use/SimpleChangeableNumber.html new file mode 100644 index 0000000..7ed77a8 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/components/class-use/SimpleChangeableNumber.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.components.SimpleChangeableNumber + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.components.SimpleChangeableNumber

    +
    +
    No usage of bitchanger.components.SimpleChangeableNumber
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/components/package-summary.html b/doc/0.1.4/en_private/bitchanger/components/package-summary.html new file mode 100644 index 0000000..f239793 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/components/package-summary.html @@ -0,0 +1,192 @@ + + + + + +bitchanger.components + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package bitchanger.components

    +
    +
    +
      +
    • + + + + + + + + + + + + + + + + +
      Interface Summary 
      InterfaceDescription
      Calculable 
      ChangeableNumber 
      +
    • +
    • + + + + + + + + + + + + + + + + +
      Class Summary 
      ClassDescription
      ConvertingNumbers +
      The ConvertingNumbers class contains methods for performing conversions of numbers with different numeral systems.
      +
      SimpleChangeableNumber 
      +
    • +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/bitchanger/components/package-tree.html b/doc/0.1.4/en_private/bitchanger/components/package-tree.html new file mode 100644 index 0000000..c70b668 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/components/package-tree.html @@ -0,0 +1,172 @@ + + + + + +bitchanger.components Class Hierarchy + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package bitchanger.components

    +Package Hierarchies: + +
    +
    +
    +

    Class Hierarchy

    + +
    +
    +

    Interface Hierarchy

    + +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/bitchanger/components/package-use.html b/doc/0.1.4/en_private/bitchanger/components/package-use.html new file mode 100644 index 0000000..c15ddd8 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/components/package-use.html @@ -0,0 +1,205 @@ + + + + + +Uses of Package bitchanger.components + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    bitchanger.components

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/Hauptfenster.html b/doc/0.1.4/en_private/bitchanger/gui/Hauptfenster.html new file mode 100644 index 0000000..f1042c3 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/Hauptfenster.html @@ -0,0 +1,528 @@ + + + + + +Hauptfenster + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class Hauptfenster

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • javafx.application.Application
      • +
      • +
          +
        • bitchanger.gui.Hauptfenster
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      public class Hauptfenster
      +extends javafx.application.Application
      +
      Main window of the application with javaFX +

      + The window contains several scenes for calculations and converting of several numeral systems. + These scenes can be changed and program settings can be opened via the menu bar. +

      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim
      +
      See Also:
      +
      ConverterView, +ConverterController
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Nested Class Summary

        +
          +
        • + + +

          Nested classes/interfaces inherited from class javafx.application.Application

          +javafx.application.Application.Parameters
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeFieldDescription
        private ViewableconverterView +
        View for converting of numeral systems
        +
        private ViewablecurrentView +
        View currently displayed in the window
        +
        +
          +
        • + + +

          Fields inherited from class javafx.application.Application

          +STYLESHEET_CASPIAN, STYLESHEET_MODENA
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + +
        Constructors 
        ConstructorDescription
        Hauptfenster() 
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Static Methods Instance Methods Concrete Methods 
        Modifier and TypeMethodDescription
        private javafx.scene.control.MenuBarcreateMenuBar() +
        Creates a menu bar, that allows to select between different scenes, shows informations about this application + and includes settings.
        +
        static voidmain​(String[] args) +
        Starts the applications and opens the application window.
        +
        private voidsetStageSize​(javafx.stage.Stage primaryStage) +
        Adjusts the minimum and maximum size of the window to the size of the current scene (currentView).
        +
        voidstart​(javafx.stage.Stage primaryStage) +
        This method creates the content for the main window and opens it.
        +
        +
          +
        • + + +

          Methods inherited from class javafx.application.Application

          +getHostServices, getParameters, getUserAgentStylesheet, init, launch, launch, notifyPreloader, setUserAgentStylesheet, stop
        • +
        + +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          currentView

          +
          private Viewable currentView
          +
          View currently displayed in the window
          +
        • +
        + + + +
          +
        • +

          converterView

          +
          private Viewable converterView
          +
          View for converting of numeral systems
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Hauptfenster

          +
          public Hauptfenster()
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          main

          +
          public static void main​(String[] args)
          +
          Starts the applications and opens the application window.
          +
          +
          Parameters:
          +
          args - Arguments that are committed at the beginning of the application. These arguments are committed to the method launch and otherwise they will be ignored.
          +
          See Also:
          +
          Application.launch(String...)
          +
          +
        • +
        + + + +
          +
        • +

          start

          +
          public void start​(javafx.stage.Stage primaryStage)
          +           throws Exception
          +
          This method creates the content for the main window and opens it. +

          + - A menu bar is created, which allows to control the main window in every scene. +

          +

          + - Different views for the various surfaces are created. +

          +

          + - The latest scene is loaded. +

          +

          + - The in settings selected stylesheet is loaded. +

          +

          + - The window is formatted and opened. +

          + + This method will end after the main window is closed.
          +
          +
          Specified by:
          +
          start in class javafx.application.Application
          +
          Throws:
          +
          Exception
          +
          See Also:
          +
          createMenuBar(), +ConverterView, +setStageSize(Stage)
          +
          +
        • +
        + + + + + + + +
          +
        • +

          createMenuBar

          +
          private javafx.scene.control.MenuBar createMenuBar()
          +
          Creates a menu bar, that allows to select between different scenes, shows informations about this application + and includes settings. +

          + Each required element is added to a new MenuBar. + Every action is set and does not need to be adjusted. +

          +
          +
          Returns:
          +
          a new MenuBar with the required content
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/class-use/Hauptfenster.html b/doc/0.1.4/en_private/bitchanger/gui/class-use/Hauptfenster.html new file mode 100644 index 0000000..6c5a261 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/class-use/Hauptfenster.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.Hauptfenster + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.Hauptfenster

    +
    +
    No usage of bitchanger.gui.Hauptfenster
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controller/AlphaNumGridController.html b/doc/0.1.4/en_private/bitchanger/gui/controller/AlphaNumGridController.html new file mode 100644 index 0000000..5116c4c --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controller/AlphaNumGridController.html @@ -0,0 +1,647 @@ + + + + + +AlphaNumGridController + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class AlphaNumGridController

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          buttonList

          +
          private ArrayList<javafx.scene.Node> buttonList
          +
        • +
        + + + +
          +
        • +

          keyboardBtn

          +
          private javafx.scene.control.Button keyboardBtn
          +
        • +
        + + + +
          +
        • +

          previousBtn

          +
          private javafx.scene.control.Button previousBtn
          +
        • +
        + + + +
          +
        • +

          nextBtn

          +
          private javafx.scene.control.Button nextBtn
          +
        • +
        + + + +
          +
        • +

          signBtn

          +
          private javafx.scene.control.Button signBtn
          +
        • +
        + + + +
          +
        • +

          zeroBtn

          +
          private javafx.scene.control.Button zeroBtn
          +
        • +
        + + + +
          +
        • +

          commaBtn

          +
          private javafx.scene.control.Button commaBtn
          +
        • +
        + + + +
          +
        • +

          arrowButtons

          +
          private javafx.scene.layout.HBox arrowButtons
          +
        • +
        + + + +
          +
        • +

          isShowingKeyboard

          +
          private boolean isShowingKeyboard
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          AlphaNumGridController

          +
          public AlphaNumGridController​(AlphaNumGrid view)
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + + + + + +
          +
        • +

          setActions

          +
          public void setActions()
          +
        • +
        + + + +
          +
        • +

          setAlphaButtons

          +
          private void setAlphaButtons​(char startLetter)
          +
        • +
        + + + +
          +
        • +

          setNumButtons

          +
          private void setNumButtons()
          +
        • +
        + + + +
          +
        • +

          setAllToKeyboard

          +
          private void setAllToKeyboard​(char startLetter)
          +
        • +
        + + + +
          +
        • +

          setCommaBinding

          +
          private void setCommaBinding()
          +
        • +
        + + + +
          +
        • +

          setNextBtnDisable

          +
          private void setNextBtnDisable()
          +
        • +
        + + + +
          +
        • +

          setPreviousBtnDisable

          +
          private void setPreviousBtnDisable()
          +
        • +
        + + + +
          +
        • +

          setNextBtnAction

          +
          private void setNextBtnAction()
          +
        • +
        + + + +
          +
        • +

          setPreviousBtnAction

          +
          private void setPreviousBtnAction()
          +
        • +
        + + + +
          +
        • +

          setKeyboardBtnAction

          +
          private void setKeyboardBtnAction()
          +
        • +
        + + + +
          +
        • +

          changeToKeyboard

          +
          private void changeToKeyboard()
          +
        • +
        + + + +
          +
        • +

          changeToNums

          +
          private void changeToNums()
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controller/AlphaNumKeysController.html b/doc/0.1.4/en_private/bitchanger/gui/controller/AlphaNumKeysController.html new file mode 100644 index 0000000..7023e52 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controller/AlphaNumKeysController.html @@ -0,0 +1,926 @@ + + + + + +AlphaNumKeysController + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class AlphaNumKeysController

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Controller
      +
      +
      +
      public class AlphaNumKeysController
      +extends ControllerBase<AlphaNumKeys>
      +
      This controller gives the operating elements of an instance of AlphaNumKeys a function and links the simulation + of the keyboard to the encapsulated scene. +

      + The main function is the simulation of a keyboard with alphanumeric buttons. By clicking on one of these buttons, + the required KeyEvents get triggered and transfered to the linked scene. + The available functions are switching between keyboard modes, scroll trough keyboard and updating the comma button + if CommaProperty from Preferences is changing. +

      +

      + The function of the +/- button to change the sign of the number is free, because other operating elements are required. + The function of this button needs to be implemented in an other controller. +

      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeFieldDescription
        private javafx.scene.layout.HBoxarrowButtons +
        HBox with buttons, that functions are, to scroll through the different keyboard layouts.
        +
        private ArrayList<javafx.scene.Node>buttonList +
        List that contains all buttons off the keyboard matrix
        +
        private javafx.scene.control.ButtoncommaBtn +
        Button that is used to enter a comma
        +
        private booleanisShowingKeyboard +
        Flag for the currently used keyboard mode
        +
        private javafx.scene.control.ButtonkeyboardBtn +
        Button to switch between numbers and alphabet on the keyboard
        +
        private SVGIconkeyboardCloseGraphic 
        private SVGIconkeyboardOpenGraphic 
        private javafx.scene.control.ButtonnextBtn +
        Button that is used to scroll forwards on the keyboard
        +
        private javafx.scene.control.ButtonpreviousBtn +
        Button that is used to scroll backwards on the keyboard
        +
        private javafx.scene.Scenescene +
        Scene where this controller is linked to and that contains all simulated KeyEvents
        +
        private javafx.scene.control.ButtonsignBtn +
        Button that is used to change the sign of the entered number
        +
        private javafx.scene.control.ButtonzeroBtn +
        Button that is used to enter the number 0
        +
        + + +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + +
        Constructors 
        ConstructorDescription
        AlphaNumKeysController​(AlphaNumKeys keys, + javafx.scene.Scene scene) +
        Produces a new controller that gives function to an AlphaNumKeys.
        +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethodDescription
        private voidchangeToKeyboard() +
        Changes the keyboard layout into the alphabetic view
        +
        private voidchangeToNums() +
        Changes the keyboard layout into the combination consisting out of six letters and numbers between 0 and 10.
        +
        protected voidinitControls()
        voidsetActions() +
        Sets actions to switch the keyboard mode, to scroll between the different keyboard layouts, to update the comma button + and simulates the keyboard inputs for the alphanumeric buttons
        +
        private voidsetAllToKeyboard​(char startLetter) +
        Sets the texts of all Buttons.
        +
        private voidsetAlphaButtonTexts​(char startLetter) +
        Sets the texts of the alpha buttons into the order of AlphaNumKeys.ALPHA_KEYS.
        +
        private voidsetArrowScaleFactors​(double factor) 
        private voidsetCommaBinding() +
        Links the text of the comma buttons to the CommaProperty.
        +
        private voidsetKeyboardBtnAction() +
        Sets the function to switch the keyboard mode by clicking on the button keyboardBtn.
        +
        private voidsetNextBtnAction() +
        Sets the function to scroll the alpha keyboard forwards, by clicking on the button nextBtn.
        +
        private voidsetNextBtnDisable() +
        Sets ChangeListener at the last alpha button and at the last number button to control, if the end of the alphabet is reached.
        +
        private voidsetNumButtonTexts() +
        Sets the texts of the numeric Buttons in order of AlphaNumKeys.NUM_KEYS.
        +
        private voidsetPreviousBtnAction() +
        Sets the function to scroll the alpha keyboard backwards, by clicking on the button previousBtn.
        +
        private voidsetPreviousBtnDisable() +
        Sets a ChangeListener at the first alpha button, to control if the beginning of the alphabet is reached.
        +
        private voidsetSimulateKeyEvents() +
        Sets actions of all alphanumeric buttons and of the comma button, to simulate a keyboard with thse buttons.
        +
        private voidsetSimulateKeyOnAction​(javafx.scene.control.Button b) +
        Adds a function to a button, so that this button simulates a feedback by clicking it.
        +
        private voidsimulateKey​(javafx.scene.control.Button b, + javafx.scene.input.KeyCode keycode) +
        Simulates the click on a key of the keyboard with the specific keycode and fires the KeyEvents + KeyEvent.KEY_PRESSED, KeyEvent.KEY_TYPED und KeyEvent.KEY_RELEASED successively.
        +
        + + +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          buttonList

          +
          private final ArrayList<javafx.scene.Node> buttonList
          +
          List that contains all buttons off the keyboard matrix
          +
        • +
        + + + +
          +
        • +

          scene

          +
          private final javafx.scene.Scene scene
          +
          Scene where this controller is linked to and that contains all simulated KeyEvents
          +
        • +
        + + + +
          +
        • +

          keyboardOpenGraphic

          +
          private final SVGIcon keyboardOpenGraphic
          +
        • +
        + + + +
          +
        • +

          keyboardCloseGraphic

          +
          private final SVGIcon keyboardCloseGraphic
          +
        • +
        + + + +
          +
        • +

          keyboardBtn

          +
          private javafx.scene.control.Button keyboardBtn
          +
          Button to switch between numbers and alphabet on the keyboard
          +
        • +
        + + + +
          +
        • +

          previousBtn

          +
          private javafx.scene.control.Button previousBtn
          +
          Button that is used to scroll backwards on the keyboard
          +
        • +
        + + + +
          +
        • +

          nextBtn

          +
          private javafx.scene.control.Button nextBtn
          +
          Button that is used to scroll forwards on the keyboard
          +
        • +
        + + + +
          +
        • +

          signBtn

          +
          private javafx.scene.control.Button signBtn
          +
          Button that is used to change the sign of the entered number
          +
        • +
        + + + +
          +
        • +

          zeroBtn

          +
          private javafx.scene.control.Button zeroBtn
          +
          Button that is used to enter the number 0
          +
        • +
        + + + +
          +
        • +

          commaBtn

          +
          private javafx.scene.control.Button commaBtn
          +
          Button that is used to enter a comma
          +
        • +
        + + + +
          +
        • +

          arrowButtons

          +
          private javafx.scene.layout.HBox arrowButtons
          +
          HBox with buttons, that functions are, to scroll through the different keyboard layouts.
          +
        • +
        + + + +
          +
        • +

          isShowingKeyboard

          +
          private boolean isShowingKeyboard
          +
          Flag for the currently used keyboard mode
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          AlphaNumKeysController

          +
          public AlphaNumKeysController​(AlphaNumKeys keys,
          +                              javafx.scene.Scene scene)
          +
          Produces a new controller that gives function to an AlphaNumKeys.
          +
          +
          Parameters:
          +
          keys - AlphaNumKeys, that is linked to this controller
          +
          scene - Scene, where this controller is linked to, to share all KeyEvents to simulate a keyboard
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + + + + + +
          +
        • +

          setActions

          +
          public void setActions()
          +
          Sets actions to switch the keyboard mode, to scroll between the different keyboard layouts, to update the comma button + and simulates the keyboard inputs for the alphanumeric buttons +

          + The function of the +/- button to change the sign of the number is free, because other operating elements are required. + The function of this button needs to be implemented in an other controller. +

          +
        • +
        + + + +
          +
        • +

          changeToKeyboard

          +
          private void changeToKeyboard()
          +
          Changes the keyboard layout into the alphabetic view
          +
        • +
        + + + +
          +
        • +

          changeToNums

          +
          private void changeToNums()
          +
          Changes the keyboard layout into the combination consisting out of six letters and numbers between 0 and 10.
          +
        • +
        + + + +
          +
        • +

          setArrowScaleFactors

          +
          private void setArrowScaleFactors​(double factor)
          +
        • +
        + + + +
          +
        • +

          setAlphaButtonTexts

          +
          private void setAlphaButtonTexts​(char startLetter)
          +
          Sets the texts of the alpha buttons into the order of AlphaNumKeys.ALPHA_KEYS. + The character for the text gets incremented with each button. This method only sets the characters 'A' to 'Z' as Button + texts. If this range is leaved, an empty string is set and the Button is set to be invisible.
          +
          +
          Parameters:
          +
          startLetter - Character that is contained in the first alpha button
          +
          +
        • +
        + + + +
          +
        • +

          setNumButtonTexts

          +
          private void setNumButtonTexts()
          +
          Sets the texts of the numeric Buttons in order of AlphaNumKeys.NUM_KEYS. + Each Button is allocated to the number of the key of AlphaNumKeys.NUM_KEYS.
          +
        • +
        + + + +
          +
        • +

          setAllToKeyboard

          +
          private void setAllToKeyboard​(char startLetter)
          +
          Sets the texts of all Buttons. The first button receives the committed letter as text, for each following + Button in buttonList the letter is incremented. This method only sets the characters 'A' to 'Z' Button texts. + If this range is leaved, an empty string is set and the Button is set to be invisible.
          +
          +
          Parameters:
          +
          startLetter - Letter of the first keyboard button
          +
          +
        • +
        + + + + + + + +
          +
        • +

          setNextBtnDisable

          +
          private void setNextBtnDisable()
          +
          Sets ChangeListener at the last alpha button and at the last number button to control, if the end of the alphabet is reached. + Thereby the button to scroll the alpha keyboard forwards (in both keyboard modes) is activated and disabled automatically.
          +
        • +
        + + + +
          +
        • +

          setPreviousBtnDisable

          +
          private void setPreviousBtnDisable()
          +
          Sets a ChangeListener at the first alpha button, to control if the beginning of the alphabet is reached. + Thereby the button to scroll the alpha keyboard backwards (in both keyboard modes) is activated and disabled automatically.
          +
        • +
        + + + +
          +
        • +

          setNextBtnAction

          +
          private void setNextBtnAction()
          +
          Sets the function to scroll the alpha keyboard forwards, by clicking on the button nextBtn.
          +
        • +
        + + + +
          +
        • +

          setPreviousBtnAction

          +
          private void setPreviousBtnAction()
          +
          Sets the function to scroll the alpha keyboard backwards, by clicking on the button previousBtn.
          +
        • +
        + + + +
          +
        • +

          setKeyboardBtnAction

          +
          private void setKeyboardBtnAction()
          +
          Sets the function to switch the keyboard mode by clicking on the button keyboardBtn. + Changes the keyboard layout between a combination of 6 letters and numbers and a keyboard only consisting out of letters.
          +
          +
          See Also:
          +
          changeToKeyboard(), +changeToNums()
          +
          +
        • +
        + + + +
          +
        • +

          setSimulateKeyEvents

          +
          private void setSimulateKeyEvents()
          +
          Sets actions of all alphanumeric buttons and of the comma button, to simulate a keyboard with thse buttons.
          +
          +
          Since:
          +
          Bitchanger 0.1.4
          +
          See Also:
          +
          setSimulateKeyOnAction(Button)
          +
          +
        • +
        + + + +
          +
        • +

          setSimulateKeyOnAction

          +
          private void setSimulateKeyOnAction​(javafx.scene.control.Button b)
          +
          Adds a function to a button, so that this button simulates a feedback by clicking it. + The simulated key is set by text of the button.
          +
          +
          Parameters:
          +
          b - Button, that action is set
          +
          Since:
          +
          Bitchanger 0.1.4
          +
          See Also:
          +
          simulateKey(Button, KeyCode)
          +
          +
        • +
        + + + +
          +
        • +

          simulateKey

          +
          private void simulateKey​(javafx.scene.control.Button b,
          +                         javafx.scene.input.KeyCode keycode)
          +
          Simulates the click on a key of the keyboard with the specific keycode and fires the KeyEvents + KeyEvent.KEY_PRESSED, KeyEvent.KEY_TYPED und KeyEvent.KEY_RELEASED successively. + The Events are transfered to the scene, where the controller is linked to.
          +
          +
          Parameters:
          +
          b - Source for the fired events
          +
          keycode - KeyCode of the simulated keys
          +
          Since:
          +
          Bitchanger 0.1.4
          +
          See Also:
          +
          ControllerBase.simulateKeyEvents(Button, Node, Scene, String, String, KeyCode)
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controller/BasicMenuController.html b/doc/0.1.4/en_private/bitchanger/gui/controller/BasicMenuController.html new file mode 100644 index 0000000..44eeb93 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controller/BasicMenuController.html @@ -0,0 +1,687 @@ + + + + + +BasicMenuController + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class BasicMenuController

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          modusConverter

          +
          protected javafx.scene.control.MenuItem modusConverter
          +
        • +
        + + + +
          +
        • +

          modusIEEE

          +
          protected javafx.scene.control.MenuItem modusIEEE
          +
        • +
        + + + +
          +
        • +

          modusCalculator

          +
          protected javafx.scene.control.MenuItem modusCalculator
          +
        • +
        + + + +
          +
        • +

          options

          +
          protected javafx.scene.control.Menu options
          +
        • +
        + + + +
          +
        • +

          styleMenu

          +
          protected javafx.scene.control.Menu styleMenu
          +
        • +
        + + + +
          +
        • +

          styleLight

          +
          protected javafx.scene.control.MenuItem styleLight
          +
        • +
        + + + +
          +
        • +

          styleDark

          +
          protected javafx.scene.control.MenuItem styleDark
          +
        • +
        + + + +
          +
        • +

          moveToScreen

          +
          protected javafx.scene.control.Menu moveToScreen
          +
        • +
        + + + +
          +
        • +

          showFullscreen

          +
          protected javafx.scene.control.CheckMenuItem showFullscreen
          +
        • +
        + + + +
          +
        • +

          about

          +
          protected javafx.scene.control.MenuItem about
          +
        • +
        + + + +
          +
        • +

          version

          +
          protected javafx.scene.control.MenuItem version
          +
        • +
        + + + +
          +
        • +

          resetPreferences

          +
          protected javafx.scene.control.MenuItem resetPreferences
          +
        • +
        + + + + +
      • +
      +
      + +
      + +
      + +
      +
        +
      • + + +

        Method Detail

        + + + + + + + +
          +
        • +

          setActions

          +
          public void setActions()
          +
          Sets all functions that are needed for the view.
          +
        • +
        + + + +
          +
        • +

          changeToViewAction

          +
          private void changeToViewAction​(javafx.scene.control.MenuItem source,
          +                                Viewable view)
          +
        • +
        + + + +
          +
        • +

          changeStyleAction

          +
          private void changeStyleAction()
          +
        • +
        + + + +
          +
        • +

          switchFullscreenAction

          +
          private void switchFullscreenAction()
          +
        • +
        + + + +
          +
        • +

          showAboutAction

          +
          private void showAboutAction()
          +
        • +
        + + + +
          +
        • +

          showVersionAction

          +
          private void showVersionAction()
          +
        • +
        + + + +
          +
        • +

          resetPreferencesAction

          +
          private void resetPreferencesAction()
          +
        • +
        + + + +
          +
        • +

          listenScreenConfig

          +
          private void listenScreenConfig()
          +
        • +
        + + + +
          +
        • +

          setScreenItems

          +
          private void setScreenItems()
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controller/Controllable.html b/doc/0.1.4/en_private/bitchanger/gui/controller/Controllable.html new file mode 100644 index 0000000..a310e07 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controller/Controllable.html @@ -0,0 +1,423 @@ + + + + + +Controllable + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface Controllable

    +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeFieldDescription
        static Map<String,​javafx.scene.control.Button>EMPTY_BUTTON_MAP +
        empty and immutable map that can be used as placeholder if any Controllable does not have to pass buttons to its Controller
        +
        static Map<String,​javafx.scene.Node>EMPTY_NODE_MAP +
        empty and immutable map that can be used as placeholder if any Controllable does not have to pass nodes to its Controller
        +
        static Map<String,​javafx.scene.control.TextField>EMPTY_TEXTFIELD_MAP +
        empty and immutable map that can be used as placeholder if any Controllable does not have to pass textfields to its Controller
        +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Abstract Methods 
        Modifier and TypeMethodDescription
        Map<String,​javafx.scene.control.Button>getButtonMap() +
        Returns a Map with all buttons of the controllable.
        +
        Map<String,​javafx.scene.Node>getNodeMap() +
        Returns a Map with all elements (Nodes) of the controllable, that are not buttons or text fields and are required in the controller.
        +
        Map<String,​javafx.scene.control.TextField>getTextFieldMap() +
        Returns a Map with all text fields of the controllable.
        +
        +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          EMPTY_TEXTFIELD_MAP

          +
          static final Map<String,​javafx.scene.control.TextField> EMPTY_TEXTFIELD_MAP
          +
          empty and immutable map that can be used as placeholder if any Controllable does not have to pass textfields to its Controller
          +
          +
          See Also:
          +
          Collections.emptyMap()
          +
          +
        • +
        + + + +
          +
        • +

          EMPTY_BUTTON_MAP

          +
          static final Map<String,​javafx.scene.control.Button> EMPTY_BUTTON_MAP
          +
          empty and immutable map that can be used as placeholder if any Controllable does not have to pass buttons to its Controller
          +
          +
          See Also:
          +
          Collections.emptyMap()
          +
          +
        • +
        + + + +
          +
        • +

          EMPTY_NODE_MAP

          +
          static final Map<String,​javafx.scene.Node> EMPTY_NODE_MAP
          +
          empty and immutable map that can be used as placeholder if any Controllable does not have to pass nodes to its Controller
          +
          +
          See Also:
          +
          Collections.emptyMap()
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTextFieldMap

          +
          Map<String,​javafx.scene.control.TextField> getTextFieldMap()
          +
          Returns a Map with all text fields of the controllable. Each text field is allocated to a unique keyword, + which is used to find the text field out of the map. +

          + Each keyword should have a useful connection to the use of the text field! +

          +
          +
          Returns:
          +
          Map, that contains all text fields of the controllable
          +
          +
        • +
        + + + +
          +
        • +

          getButtonMap

          +
          Map<String,​javafx.scene.control.Button> getButtonMap()
          +
          Returns a Map with all buttons of the controllable. Each button is allocated to a unique keyword, + which is used to find the button out of the map. +

          + Each Keyword should have a useful connection to the use of the button! +

          +
          +
          Returns:
          +
          Map, that contains all buttons of the controllable
          +
          +
        • +
        + + + +
          +
        • +

          getNodeMap

          +
          Map<String,​javafx.scene.Node> getNodeMap()
          +
          Returns a Map with all elements (Nodes) of the controllable, that are not buttons or text fields and are required in the controller. + Each element is allocated to a unique keyword, which is used to find the element out of the map. +

          + Each keyword should have a useful connection to the use of the elements! +

          +
          +
          Returns:
          +
          Map, which contains all elements of a controllable, that are not buttons or text fields and are required in the controller
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controller/ControllableApplication.html b/doc/0.1.4/en_private/bitchanger/gui/controller/ControllableApplication.html new file mode 100644 index 0000000..2b965ef --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controller/ControllableApplication.html @@ -0,0 +1,332 @@ + + + + + +ControllableApplication + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface ControllableApplication

    +
    +
    +
    +
      +
    • +
      +
      All Known Implementing Classes:
      +
      PrimaryFXApp
      +
      +
      +
      public interface ControllableApplication
      +
      Interface that defines methods to connect a Application with a controller.
      +
      +
      Since:
      +
      Bitchanger 0.1.4
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Muehle
      +
      See Also:
      +
      Viewable, +Controller
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          changeView

          +
          default void changeView​(Viewable newView)
          +
          Changes the primaryStage's Scene to the Scene of the given Viewable
          +
          +
          Parameters:
          +
          newView - New View to be presented
          +
          +
        • +
        + + + +
          +
        • +

          getPrimaryStage

          +
          javafx.stage.Stage getPrimaryStage()
          +
        • +
        + + + +
          +
        • +

          getViewable

          +
          Viewable getViewable​(String key)
          +
          Returns the view that is associated to the string key
          +
          +
          Parameters:
          +
          key - key whose associated View is to be returned
          +
          Returns:
          +
          View to which the specified key is mapped, or null if there is no associated View for the given key
          +
          +
        • +
        + + + +
          +
        • +

          getCurrentViewProperty

          +
          javafx.beans.property.ObjectProperty<Viewable> getCurrentViewProperty()
          +
          Returns the CurrentViewProperty
          +
          +
          Returns:
          +
          CurrentViewProperty
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +
    + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controller/Controller.html b/doc/0.1.4/en_private/bitchanger/gui/controller/Controller.html new file mode 100644 index 0000000..402d5d7 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controller/Controller.html @@ -0,0 +1,439 @@ + + + + + +Controller + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface Controller

    +
    +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          REGISTERED_CONTROLLERS

          +
          static final HashMap<Class<? extends Controllable>,​Class<? extends Controller>> REGISTERED_CONTROLLERS
          +
          Map that saves the Controllers registered for a Controllable and associates them
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          register

          +
          static void register​(Class<? extends Controllable> controllable,
          +                     Class<? extends Controller> controller)
          +
          Registers a Controller class for the factory method of(Controllable) + and assigns it to a Controllable class.
          +
          +
          Parameters:
          +
          controllable - Controllable class to which the Controller class is assigned
          +
          controller - Controller class that is registered
          +
          +
        • +
        + + + +
          +
        • +

          of

          +
          static Controller of​(Controllable c)
          +
          Factory method that creates and returns a new Controller for the given Controllable. +

          + Note that the registered Controller must have a public Constructor that takes the + Controllable as the only parameter. +

          +

          + A suitable Controller can only be returned if a suitable value pair is available in the Map + REGISTERED_CONTROLLERS. A Controllable can be assigned a Controller with the method + register(Class, Class). +

          +
          +
          Parameters:
          +
          c - Controllable, which should be given a function by the new Controller
          +
          Returns:
          +
          new Controller that is bound to the Controllable or null if no Controller has been registered
          +
          Since:
          +
          Bitchanger 0.1.4
          +
          See Also:
          +
          register(Class, Class)
          +
          +
        • +
        + + + +
          +
        • +

          ofArg

          +
          static Controller ofArg​(Controllable c,
          +                        Object... args)
          +
          Factory method that creates and returns a new Controller for the given Controllable. +

          + Note that the registered Controller must have a public constructor that takes the Controllable as the first + argument and also receives all other transferred Objects in the same order as given. +

          +

          + A suitable Controller can only be returned if a suitable value pair is available in the Map + REGISTERED_CONTROLLERS. A Controllable can be assigned a Controller with the method + register(Class, Class). +

          +
          +
          Parameters:
          +
          c - Controllable, which should be given a function by the new Controller
          +
          args - Arguments in the order they are required by the constructor
          +
          Returns:
          +
          new Controller that is bound to the Controllable or null if no Controller has been registered
          +
          Since:
          +
          Bitchanger 0.1.4
          +
          See Also:
          +
          register(Class, Class)
          +
          +
        • +
        + + + +
          +
        • +

          getConstructorForArgs

          +
          private static Controller getConstructorForArgs​(Class<? extends Controller> controllerClass,
          +                                                Class<?>[] argClasses,
          +                                                Object[] constructorArgs)
          +
        • +
        + + + +
          +
        • +

          setActions

          +
          void setActions()
          +
          Sets all functions that are needed for the view.
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controller/ControllerBase.html b/doc/0.1.4/en_private/bitchanger/gui/controller/ControllerBase.html new file mode 100644 index 0000000..3f1ca24 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controller/ControllerBase.html @@ -0,0 +1,474 @@ + + + + + +ControllerBase + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class ControllerBase<T extends Controllable>

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          textFieldMap

          +
          protected Map<String,​javafx.scene.control.TextField> textFieldMap
          +
        • +
        + + + +
          +
        • +

          buttonMap

          +
          protected Map<String,​javafx.scene.control.Button> buttonMap
          +
        • +
        + + + +
          +
        • +

          nodeMap

          +
          protected Map<String,​javafx.scene.Node> nodeMap
          +
        • +
        + + + +
          +
        • +

          controllable

          +
          protected final T extends Controllable controllable
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + + + +
          +
        • +

          ControllerBase

          +
          protected ControllerBase​(T controllable)
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          initControls

          +
          protected abstract void initControls()
          +
        • +
        + + + +
          +
        • +

          simulateKeyEvents

          +
          protected void simulateKeyEvents​(javafx.scene.control.Button source,
          +                                 javafx.scene.Node target,
          +                                 javafx.scene.Scene scene,
          +                                 String character,
          +                                 String text,
          +                                 javafx.scene.input.KeyCode keycode,
          +                                 boolean shiftDown,
          +                                 boolean controlDown,
          +                                 boolean altDown,
          +                                 boolean metaDown)
          +
        • +
        + + + +
          +
        • +

          simulateKeyEvents

          +
          protected void simulateKeyEvents​(javafx.scene.control.Button source,
          +                                 javafx.scene.Node target,
          +                                 javafx.scene.Scene scene,
          +                                 String character,
          +                                 String text,
          +                                 javafx.scene.input.KeyCode keycode)
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controller/ConverterController.html b/doc/0.1.4/en_private/bitchanger/gui/controller/ConverterController.html new file mode 100644 index 0000000..2b92d5a --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controller/ConverterController.html @@ -0,0 +1,1027 @@ + + + + + +ConverterController + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class ConverterController

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Controller
      +
      +
      +
      public class ConverterController
      +extends ControllerBase<ConverterView>
      +
      Controller that provides the function for a ConverterView.
      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Muehle
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeFieldDescription
        private javafx.scene.control.Button[]alphaNumButtons +
        alphanumeric keys to simulate a keyboard
        +
        private BaseSpinneranyBase +
        Spinner for the eligible base
        +
        private javafx.scene.control.ButtonbackspcBtn 
        private javafx.beans.property.IntegerPropertybaseProperty +
        Property to adjust the base of the currently focused text field
        +
        private javafx.scene.control.ButtonclearBtn +
        Button to delete or remove value
        +
        private ValueFieldfocusedTF +
        Auxiliary variable with reference to the current or last focused text field
        +
        private javafx.scene.control.ButtonsignBtn +
        Button that action is to change the sign of the number
        +
        private ValueFieldtfAny +
        Text field for the representation of a number of any base
        +
        private ValueFieldtfBin +
        Text field for the binary representation
        +
        private ValueFieldtfDec +
        Text field for the decimal representation
        +
        private ValueFieldtfHex +
        Text field for the hexadecimal representation
        +
        private ValueFieldtfOct +
        Text field for the octal representation
        +
        private ChangeableNumbervalue +
        Number which gets converted into any numeral system
        +
        + + +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + +
        Constructors 
        ConstructorDescription
        ConverterController​(ConverterView view) +
        Construct a new controller for a ConverterView and links the necessary attributes with + references to the operating elements of the ConverterView.
        +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethodDescription
        private voidfocusTF​(javafx.event.Event e) +
        Focuses the text field focusedTF.
        +
        private voidinitButtons() +
        Searches the necessary references to the buttons of the buttonMap and stores these in the attributes
        +
        protected voidinitControls()
        private voidinitTextFields() +
        Searches the necessary references to the text fields of the buttonMap, stores these in the attributes and sets the base of each text field.
        +
        private booleanisArrowButton​(javafx.scene.Node n) +
        Checks if the committed node is one of the button, which is used to scroll the spinner.
        +
        voidsetActions() +
        Sets all functions that are needed for the view.
        +
        private voidsetAlphaNumBindings() +
        Links the baseProperty of all alphanumeric buttons to the attribute baseProperty, + to show or hide the buttons automatically if the base is changing.
        +
        private voidsetAnyValListener() +
        Sets the listener for tfAny, to convert the input and update the other text fields immediately.
        +
        private voidsetBackspaceAction() +
        Simulates the backspace button an the keyboard.
        +
        private voidsetBinValListener() +
        Sets the listener for tfBin, to convert the input and update the other text fields immediately.
        +
        private voidsetButtonActions() +
        Sets actions for all buttons
        +
        private voidsetClearAction() +
        Resets value by clicking on clear button and updates all text fields.
        +
        private voidsetDecValListener() +
        Sets the listener for tfDec, to convert the input and update the other text fields immediately.
        +
        private voidsetHexValListener() +
        Sets the listener for tfHex, to convert the input and update the other text fields immediately.
        +
        private voidsetInitialState() +
        Sets the attributes to the initial condition.
        +
        private voidsetOctValListener() +
        Sets the listener for tfOct, to convert the input and update the other text fields immediately.
        +
        private voidsetSignAction() +
        Turns the sign of value by clicking onto the sign button and updates all text fields.
        +
        private voidsetSpinnerActions() +
        Updates the base of tfAny, if the valueProperty of anyBase changes.
        +
        private voidsetTextFieldActions() +
        Sets listener for the text fields, to convert the input in any numeral system immediately.
        +
        private voidsetTexts​(boolean setHex, + boolean setDec, + boolean setOct, + boolean setBin, + boolean setAny) +
        Refreshes the texts of the chosen text fields to the new value of value.
        +
        private voidsetTFSelection() +
        Updates the attribute focusedTF by selecting a text filed with the cursor + and connects baseProperty with the baseProperty of the text field.
        +
        + + +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          value

          +
          private ChangeableNumber value
          +
          Number which gets converted into any numeral system
          +
        • +
        + + + +
          +
        • +

          anyBase

          +
          private BaseSpinner anyBase
          +
          Spinner for the eligible base
          +
        • +
        + + + +
          +
        • +

          baseProperty

          +
          private javafx.beans.property.IntegerProperty baseProperty
          +
          Property to adjust the base of the currently focused text field
          +
        • +
        + + + +
          +
        • +

          tfHex

          +
          private ValueField tfHex
          +
          Text field for the hexadecimal representation
          +
        • +
        + + + +
          +
        • +

          tfDec

          +
          private ValueField tfDec
          +
          Text field for the decimal representation
          +
        • +
        + + + +
          +
        • +

          tfBin

          +
          private ValueField tfBin
          +
          Text field for the binary representation
          +
        • +
        + + + +
          +
        • +

          tfOct

          +
          private ValueField tfOct
          +
          Text field for the octal representation
          +
        • +
        + + + +
          +
        • +

          tfAny

          +
          private ValueField tfAny
          +
          Text field for the representation of a number of any base
          +
        • +
        + + + +
          +
        • +

          focusedTF

          +
          private ValueField focusedTF
          +
          Auxiliary variable with reference to the current or last focused text field
          +
        • +
        + + + + + + + +
          +
        • +

          backspcBtn

          +
          private javafx.scene.control.Button backspcBtn
          +
        • +
        + + + +
          +
        • +

          alphaNumButtons

          +
          private javafx.scene.control.Button[] alphaNumButtons
          +
          alphanumeric keys to simulate a keyboard
          +
        • +
        + + + +
          +
        • +

          signBtn

          +
          private javafx.scene.control.Button signBtn
          +
          Button that action is to change the sign of the number
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ConverterController

          +
          public ConverterController​(ConverterView view)
          +
          Construct a new controller for a ConverterView and links the necessary attributes with + references to the operating elements of the ConverterView.
          +
          +
          Parameters:
          +
          view - ConverterView, where the controller is linked to
          +
          See Also:
          +
          initControls()
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + + + + + +
          +
        • +

          setActions

          +
          public void setActions()
          +
          Sets all functions that are needed for the view.
          +
        • +
        + + + +
          +
        • +

          initButtons

          +
          private void initButtons()
          +
          Searches the necessary references to the buttons of the buttonMap and stores these in the attributes
          +
        • +
        + + + +
          +
        • +

          initTextFields

          +
          private void initTextFields()
          +
          Searches the necessary references to the text fields of the buttonMap, stores these in the attributes and sets the base of each text field.
          +
        • +
        + + + +
          +
        • +

          isArrowButton

          +
          private boolean isArrowButton​(javafx.scene.Node n)
          +
          Checks if the committed node is one of the button, which is used to scroll the spinner. + If the StyleClass contains the string "arrow-button", the button is used to scroll the spinner.
          +
          +
          Parameters:
          +
          n - Test for an arrow-button
          +
          Returns:
          +
          true, if the StyleClass of n contains the string arrow-button", if not false
          +
          +
        • +
        + + + +
          +
        • +

          setInitialState

          +
          private void setInitialState()
          +
          Sets the attributes to the initial condition.
          +
        • +
        + + + + + + + +
          +
        • +

          setTexts

          +
          private void setTexts​(boolean setHex,
          +                      boolean setDec,
          +                      boolean setOct,
          +                      boolean setBin,
          +                      boolean setAny)
          +
          Refreshes the texts of the chosen text fields to the new value of value. + This new value is always shown in the base which refers to the text field.
          +
          +
          Parameters:
          +
          setHex - true, wenn der Text von tfHex gesetzt werden soll
          +
          setDec - true, wenn der Text von tfDec gesetzt werden soll
          +
          setOct - true, wenn der Text von tfOct gesetzt werden soll
          +
          setBin - true, wenn der Text von tfBin gesetzt werden soll
          +
          setAny - true, wenn der Text von tfAny gesetzt werden soll
          +
          +
        • +
        + + + + + + + + + + + + + + + + + + + + + + + +
          +
        • +

          setTFSelection

          +
          private void setTFSelection()
          +
          Updates the attribute focusedTF by selecting a text filed with the cursor + and connects baseProperty with the baseProperty of the text field.
          +
        • +
        + + + +
          +
        • +

          setSpinnerActions

          +
          private void setSpinnerActions()
          +
          Updates the base of tfAny, if the valueProperty of anyBase changes. + Furthermore makes sure that anyBase is focused on focusedTF after an input of a base or using the increment and decrement buttons.
          +
        • +
        + + + +
          +
        • +

          focusTF

          +
          private void focusTF​(javafx.event.Event e)
          +
          Focuses the text field focusedTF. + This method is used as reference for an EventHandler.
          +
          +
          Parameters:
          +
          e - Event that causes an EventHandler
          +
          +
        • +
        + + + + + + + +
          +
        • +

          setAlphaNumBindings

          +
          private void setAlphaNumBindings()
          +
          Links the baseProperty of all alphanumeric buttons to the attribute baseProperty, + to show or hide the buttons automatically if the base is changing.
          +
        • +
        + + + + + + + +
          +
        • +

          setBackspaceAction

          +
          private void setBackspaceAction()
          +
          Simulates the backspace button an the keyboard.
          +
        • +
        + + + +
          +
        • +

          setSignAction

          +
          private void setSignAction()
          +
          Turns the sign of value by clicking onto the sign button and updates all text fields.
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controller/ConverterMenuController.html b/doc/0.1.4/en_private/bitchanger/gui/controller/ConverterMenuController.html new file mode 100644 index 0000000..d35a13c --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controller/ConverterMenuController.html @@ -0,0 +1,433 @@ + + + + + +ConverterMenuController + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class ConverterMenuController

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          indicateFractionalInaccuracy

          +
          protected javafx.scene.control.CheckMenuItem indicateFractionalInaccuracy
          +
        • +
        +
      • +
      +
      + +
      + +
      + +
      + +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controller/IEEEController.html b/doc/0.1.4/en_private/bitchanger/gui/controller/IEEEController.html new file mode 100644 index 0000000..e686739 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controller/IEEEController.html @@ -0,0 +1,367 @@ + + + + + +IEEEController + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class IEEEController

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          IEEEController

          +
          public IEEEController​(IEEEView controllable)
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + + + + + +
          +
        • +

          setActions

          +
          public void setActions()
          +
          Sets all functions that are needed for the view.
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controller/IEEEMenuController.html b/doc/0.1.4/en_private/bitchanger/gui/controller/IEEEMenuController.html new file mode 100644 index 0000000..76b52dc --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controller/IEEEMenuController.html @@ -0,0 +1,334 @@ + + + + + +IEEEMenuController + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class IEEEMenuController

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controller/class-use/AlphaNumGridController.html b/doc/0.1.4/en_private/bitchanger/gui/controller/class-use/AlphaNumGridController.html new file mode 100644 index 0000000..962ad9d --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controller/class-use/AlphaNumGridController.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controller.AlphaNumGridController + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controller.AlphaNumGridController

    +
    +
    No usage of bitchanger.gui.controller.AlphaNumGridController
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controller/class-use/AlphaNumKeysController.html b/doc/0.1.4/en_private/bitchanger/gui/controller/class-use/AlphaNumKeysController.html new file mode 100644 index 0000000..bafe32b --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controller/class-use/AlphaNumKeysController.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controller.AlphaNumKeysController + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controller.AlphaNumKeysController

    +
    +
    No usage of bitchanger.gui.controller.AlphaNumKeysController
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controller/class-use/BasicMenuController.html b/doc/0.1.4/en_private/bitchanger/gui/controller/class-use/BasicMenuController.html new file mode 100644 index 0000000..8707b0f --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controller/class-use/BasicMenuController.html @@ -0,0 +1,200 @@ + + + + + +Uses of Class bitchanger.gui.controller.BasicMenuController + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controller.BasicMenuController

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controller/class-use/Controllable.html b/doc/0.1.4/en_private/bitchanger/gui/controller/class-use/Controllable.html new file mode 100644 index 0000000..d6c64a9 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controller/class-use/Controllable.html @@ -0,0 +1,376 @@ + + + + + +Uses of Interface bitchanger.gui.controller.Controllable + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    bitchanger.gui.controller.Controllable

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controller/class-use/ControllableApplication.html b/doc/0.1.4/en_private/bitchanger/gui/controller/class-use/ControllableApplication.html new file mode 100644 index 0000000..9d08fa5 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controller/class-use/ControllableApplication.html @@ -0,0 +1,314 @@ + + + + + +Uses of Interface bitchanger.gui.controller.ControllableApplication + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    bitchanger.gui.controller.ControllableApplication

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controller/class-use/Controller.html b/doc/0.1.4/en_private/bitchanger/gui/controller/class-use/Controller.html new file mode 100644 index 0000000..2845a63 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controller/class-use/Controller.html @@ -0,0 +1,352 @@ + + + + + +Uses of Interface bitchanger.gui.controller.Controller + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    bitchanger.gui.controller.Controller

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controller/class-use/ControllerBase.html b/doc/0.1.4/en_private/bitchanger/gui/controller/class-use/ControllerBase.html new file mode 100644 index 0000000..b24a416 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controller/class-use/ControllerBase.html @@ -0,0 +1,225 @@ + + + + + +Uses of Class bitchanger.gui.controller.ControllerBase + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controller.ControllerBase

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controller/class-use/ConverterController.html b/doc/0.1.4/en_private/bitchanger/gui/controller/class-use/ConverterController.html new file mode 100644 index 0000000..a2552bb --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controller/class-use/ConverterController.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controller.ConverterController + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controller.ConverterController

    +
    +
    No usage of bitchanger.gui.controller.ConverterController
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controller/class-use/ConverterMenuController.html b/doc/0.1.4/en_private/bitchanger/gui/controller/class-use/ConverterMenuController.html new file mode 100644 index 0000000..2e2e35f --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controller/class-use/ConverterMenuController.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controller.ConverterMenuController + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controller.ConverterMenuController

    +
    +
    No usage of bitchanger.gui.controller.ConverterMenuController
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controller/class-use/IEEEController.html b/doc/0.1.4/en_private/bitchanger/gui/controller/class-use/IEEEController.html new file mode 100644 index 0000000..d2617e7 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controller/class-use/IEEEController.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controller.IEEEController + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controller.IEEEController

    +
    +
    No usage of bitchanger.gui.controller.IEEEController
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controller/class-use/IEEEMenuController.html b/doc/0.1.4/en_private/bitchanger/gui/controller/class-use/IEEEMenuController.html new file mode 100644 index 0000000..63b7e3a --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controller/class-use/IEEEMenuController.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controller.IEEEMenuController + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controller.IEEEMenuController

    +
    +
    No usage of bitchanger.gui.controller.IEEEMenuController
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controller/package-summary.html b/doc/0.1.4/en_private/bitchanger/gui/controller/package-summary.html new file mode 100644 index 0000000..b777cc8 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controller/package-summary.html @@ -0,0 +1,230 @@ + + + + + +bitchanger.gui.controller + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package bitchanger.gui.controller

    +
    +
    +
    + + +
    Provides controller, that gives functions to the views.
    +
    + +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controller/package-tree.html b/doc/0.1.4/en_private/bitchanger/gui/controller/package-tree.html new file mode 100644 index 0000000..8353325 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controller/package-tree.html @@ -0,0 +1,184 @@ + + + + + +bitchanger.gui.controller Class Hierarchy + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package bitchanger.gui.controller

    +Package Hierarchies: + +
    +
    +
    +

    Class Hierarchy

    + +
    +
    +

    Interface Hierarchy

    + +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controller/package-use.html b/doc/0.1.4/en_private/bitchanger/gui/controller/package-use.html new file mode 100644 index 0000000..fa5f89f --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controller/package-use.html @@ -0,0 +1,307 @@ + + + + + +Uses of Package bitchanger.gui.controller + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    bitchanger.gui.controller

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controls/AlphaNumGrid.html b/doc/0.1.4/en_private/bitchanger/gui/controls/AlphaNumGrid.html new file mode 100644 index 0000000..fb29006 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controls/AlphaNumGrid.html @@ -0,0 +1,780 @@ + + + + + +AlphaNumGrid + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class AlphaNumGrid

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          +
        • +

          ALPHA_KEYS

          +
          public static final String[] ALPHA_KEYS
          +
        • +
        + + + +
          +
        • +

          NUM_KEYS

          +
          public static final String[] NUM_KEYS
          +
        • +
        + + + +
          +
        • +

          buttonList

          +
          private ArrayList<javafx.scene.Node> buttonList
          +
        • +
        + + + +
          +
        • +

          buttonMap

          +
          private HashMap<String,​javafx.scene.control.Button> buttonMap
          +
        • +
        + + + +
          +
        • +

          keyboardBtn

          +
          private javafx.scene.control.Button keyboardBtn
          +
        • +
        + + + +
          +
        • +

          previousBtn

          +
          private javafx.scene.control.Button previousBtn
          +
        • +
        + + + +
          +
        • +

          nextBtn

          +
          private javafx.scene.control.Button nextBtn
          +
        • +
        + + + +
          +
        • +

          commaBtn

          +
          private javafx.scene.control.Button commaBtn
          +
        • +
        + + + +
          +
        • +

          arrowButtons

          +
          private javafx.scene.layout.HBox arrowButtons
          +
        • +
        + + + +
          +
        • +

          spacing

          +
          private double spacing
          +
        • +
        + + + + +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          AlphaNumGrid

          +
          public AlphaNumGrid​(double spacing)
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTextFieldMap

          +
          public HashMap<String,​javafx.scene.control.TextField> getTextFieldMap()
          +
          Description copied from interface: Controllable
          +
          Returns a Map with all text fields of the view. Each text field is allocated to a unique keyword, + which is used to find the text field out of the map. +

          + Each keyword should have a useful connection to the use of the text field! +

          +
          +
          Specified by:
          +
          getTextFieldMap in interface Controllable
          +
          Returns:
          +
          Map, that contains all text fields of the view
          +
          +
        • +
        + + + +
          +
        • +

          getButtonMap

          +
          public HashMap<String,​javafx.scene.control.Button> getButtonMap()
          +
          Description copied from interface: Controllable
          +
          Returns a Map with all buttons of the view. Each button is allocated to a unique keyword, + which is used to find the button out of the map. +

          + Each Keyword should have a useful connection to the use of the button! +

          +
          +
          Specified by:
          +
          getButtonMap in interface Controllable
          +
          Returns:
          +
          Map, that contains all buttons of the view
          +
          +
        • +
        + + + +
          +
        • +

          getNodeMap

          +
          public HashMap<String,​javafx.scene.Node> getNodeMap()
          +
          Description copied from interface: Controllable
          +
          Returns a Map with all elements (Nodes) of the view, that are not buttons or text fields and are required in the controller. + Each element is allocated to a unique keyword, which is used to find the element out of the map. +

          + Each keyword should have a useful connection to the use of the elements! +

          +
          +
          Specified by:
          +
          getNodeMap in interface Controllable
          +
          Returns:
          +
          Map, which contains all elements of a view, that are not buttons or text fields and are required in the controller
          +
          +
        • +
        + + + +
          +
        • +

          getArrowButtons

          +
          public javafx.scene.layout.HBox getArrowButtons()
          +
        • +
        + + + +
          +
        • +

          getButtonMatrix

          +
          public ArrayList<javafx.scene.Node> getButtonMatrix()
          +
        • +
        + + + +
          +
        • +

          setNextButton

          +
          private void setNextButton​(javafx.scene.Node button,
          +                           int column,
          +                           int row,
          +                           String key)
          +
        • +
        + + + +
          +
        • +

          setNextButton

          +
          private void setNextButton​(javafx.scene.Node button,
          +                           int column,
          +                           int row)
          +
        • +
        + + + +
          +
        • +

          createButtons

          +
          private void createButtons()
          +
        • +
        + + + +
          +
        • +

          createControlButtons

          +
          private void createControlButtons()
          +
        • +
        + + + +
          +
        • +

          createMainMatrix

          +
          private void createMainMatrix()
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controls/AlphaNumKeys.html b/doc/0.1.4/en_private/bitchanger/gui/controls/AlphaNumKeys.html new file mode 100644 index 0000000..722f260 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controls/AlphaNumKeys.html @@ -0,0 +1,873 @@ + + + + + +AlphaNumKeys + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class AlphaNumKeys

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          +
        • +

          ALPHA_KEYS

          +
          public static final String[] ALPHA_KEYS
          +
        • +
        + + + +
          +
        • +

          NUM_KEYS

          +
          public static final String[] NUM_KEYS
          +
        • +
        + + + + + + + + + + + +
          +
        • +

          spacingProperty

          +
          public final javafx.beans.property.DoubleProperty spacingProperty
          +
        • +
        + + + +
          +
        • +

          buttonList

          +
          private final ArrayList<javafx.scene.Node> buttonList
          +
        • +
        + + + +
          +
        • +

          buttonMap

          +
          private final HashMap<String,​javafx.scene.control.Button> buttonMap
          +
        • +
        + + + +
          +
        • +

          keyboardBtn

          +
          private javafx.scene.control.Button keyboardBtn
          +
        • +
        + + + +
          +
        • +

          previousBtn

          +
          private javafx.scene.control.Button previousBtn
          +
        • +
        + + + +
          +
        • +

          nextBtn

          +
          private javafx.scene.control.Button nextBtn
          +
        • +
        + + + +
          +
        • +

          commaBtn

          +
          private javafx.scene.control.Button commaBtn
          +
        • +
        + + + +
          +
        • +

          arrowButtons

          +
          private javafx.scene.layout.HBox arrowButtons
          +
        • +
        + + + +
          +
        • +

          firstRow

          +
          private int firstRow
          +
        • +
        + + + +
          +
        • +

          firstColumn

          +
          private int firstColumn
          +
        • +
        + + + +
          +
        • +

          controller

          +
          private final Controller controller
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          AlphaNumKeys

          +
          public AlphaNumKeys​(int firstRow,
          +                    int firstColumn,
          +                    double spacing,
          +                    javafx.scene.Scene scene)
          +
        • +
        + + + +
          +
        • +

          AlphaNumKeys

          +
          public AlphaNumKeys​(int firstRow,
          +                    int firstColumn,
          +                    javafx.beans.property.DoubleProperty spacingProperty,
          +                    javafx.scene.Scene scene)
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTextFieldMap

          +
          public Map<String,​javafx.scene.control.TextField> getTextFieldMap()
          +
          Returns a Map with all text fields of the controllable. Each text field is allocated to a unique keyword, + which is used to find the text field out of the map. +

          + Each keyword should have a useful connection to the use of the text field! +

          +
          +
          Specified by:
          +
          getTextFieldMap in interface Controllable
          +
          Returns:
          +
          Map, that contains all text fields of the controllable
          +
          +
        • +
        + + + +
          +
        • +

          getButtonMap

          +
          public Map<String,​javafx.scene.control.Button> getButtonMap()
          +
          Returns a Map with all buttons of the controllable. Each button is allocated to a unique keyword, + which is used to find the button out of the map. +

          + Each Keyword should have a useful connection to the use of the button! +

          +
          +
          Specified by:
          +
          getButtonMap in interface Controllable
          +
          Returns:
          +
          Map, that contains all buttons of the controllable
          +
          +
        • +
        + + + +
          +
        • +

          getNodeMap

          +
          public Map<String,​javafx.scene.Node> getNodeMap()
          +
          Returns a Map with all elements (Nodes) of the controllable, that are not buttons or text fields and are required in the controller. + Each element is allocated to a unique keyword, which is used to find the element out of the map. +

          + Each keyword should have a useful connection to the use of the elements! +

          +
          +
          Specified by:
          +
          getNodeMap in interface Controllable
          +
          Returns:
          +
          Map, which contains all elements of a controllable, that are not buttons or text fields and are required in the controller
          +
          +
        • +
        + + + +
          +
        • +

          getArrowButtons

          +
          public javafx.scene.layout.HBox getArrowButtons()
          +
        • +
        + + + +
          +
        • +

          getButtonMatrix

          +
          public ArrayList<javafx.scene.Node> getButtonMatrix()
          +
        • +
        + + + +
          +
        • +

          addButton

          +
          private void addButton​(javafx.scene.Node button,
          +                       int column,
          +                       int row,
          +                       String key)
          +
        • +
        + + + +
          +
        • +

          addButton

          +
          private void addButton​(javafx.scene.Node button,
          +                       int column,
          +                       int row)
          +
        • +
        + + + +
          +
        • +

          createButtons

          +
          private void createButtons()
          +
        • +
        + + + +
          +
        • +

          createMainMatrix

          +
          private void createMainMatrix()
          +
        • +
        + + + +
          +
        • +

          createControlButtons

          +
          private void createControlButtons()
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controls/BaseSpinner.html b/doc/0.1.4/en_private/bitchanger/gui/controls/BaseSpinner.html new file mode 100644 index 0000000..b19b60f --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controls/BaseSpinner.html @@ -0,0 +1,455 @@ + + + + + +BaseSpinner + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class BaseSpinner

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • javafx.scene.Node
      • +
      • +
          +
        • javafx.scene.Parent
        • +
        • +
            +
          • javafx.scene.layout.Region
          • +
          • +
              +
            • javafx.scene.control.Control
            • +
            • +
                +
              • javafx.scene.control.Spinner<Integer>
              • +
              • +
                  +
                • bitchanger.gui.controls.BaseSpinner
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      javafx.css.Styleable, javafx.event.EventTarget, javafx.scene.control.Skinnable
      +
      +
      +
      public class BaseSpinner
      +extends javafx.scene.control.Spinner<Integer>
      +
      Spinner for choosing the base of a numeral system. + +

      + This class extends the function of the class Spinner<T>,so that the user + is able to give input into the editor of the spinner and that this input is updated automatically if it is a valid value. +

      +
      +
      Since:
      +
      Bitchanger 0.1.2
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Summary

        +
          +
        • + + +

          Fields inherited from class javafx.scene.control.Spinner

          +STYLE_CLASS_ARROWS_ON_LEFT_HORIZONTAL, STYLE_CLASS_ARROWS_ON_LEFT_VERTICAL, STYLE_CLASS_ARROWS_ON_RIGHT_HORIZONTAL, STYLE_CLASS_SPLIT_ARROWS_HORIZONTAL, STYLE_CLASS_SPLIT_ARROWS_VERTICAL
        • +
        +
          +
        • + + +

          Fields inherited from class javafx.scene.layout.Region

          +USE_COMPUTED_SIZE, USE_PREF_SIZE
        • +
        +
          +
        • + + +

          Fields inherited from class javafx.scene.Node

          +BASELINE_OFFSET_SAME_AS_HEIGHT
        • +
        +
      • +
      +
      + +
      + +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethodDescription
        private booleanhasValidValue() +
        Checks if the text inside the editor has a valid value an can be updated with the method Spinner.commitValue().
        +
        private voidsetActions() +
        Sets an EventHandler that controls the input into the editor automatically and + updates it with the method Spinner.commitValue() if possible.
        +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Spinner

          +cancelEdit, commitValue, createDefaultSkin, decrement, decrement, editableProperty, editorProperty, executeAccessibleAction, getClassCssMetaData, getControlCssMetaData, getEditor, getInitialDelay, getPromptText, getRepeatDelay, getValue, getValueFactory, increment, increment, initialDelayProperty, isEditable, promptTextProperty, queryAccessibleAttribute, repeatDelayProperty, setEditable, setInitialDelay, setPromptText, setRepeatDelay, setValueFactory, valueFactoryProperty, valueProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Control

          +computeMaxHeight, computeMaxWidth, computeMinHeight, computeMinWidth, computePrefHeight, computePrefWidth, contextMenuProperty, getBaselineOffset, getContextMenu, getCssMetaData, getInitialFocusTraversable, getSkin, getTooltip, isResizable, layoutChildren, setContextMenu, setSkin, setTooltip, skinProperty, tooltipProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.layout.Region

          +backgroundProperty, borderProperty, cacheShapeProperty, centerShapeProperty, getBackground, getBorder, getHeight, getInsets, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getOpaqueInsets, getPadding, getPrefHeight, getPrefWidth, getShape, getUserAgentStylesheet, getWidth, heightProperty, insetsProperty, isCacheShape, isCenterShape, isScaleShape, isSnapToPixel, layoutInArea, layoutInArea, layoutInArea, layoutInArea, maxHeight, maxHeightProperty, maxWidth, maxWidthProperty, minHeight, minHeightProperty, minWidth, minWidthProperty, opaqueInsetsProperty, paddingProperty, positionInArea, positionInArea, prefHeight, prefHeightProperty, prefWidth, prefWidthProperty, resize, scaleShapeProperty, setBackground, setBorder, setCacheShape, setCenterShape, setHeight, setMaxHeight, setMaxSize, setMaxWidth, setMinHeight, setMinSize, setMinWidth, setOpaqueInsets, setPadding, setPrefHeight, setPrefSize, setPrefWidth, setScaleShape, setShape, setSnapToPixel, setWidth, shapeProperty, snappedBottomInset, snappedLeftInset, snappedRightInset, snappedTopInset, snapPosition, snapPositionX, snapPositionY, snapSize, snapSizeX, snapSizeY, snapSpace, snapSpaceX, snapSpaceY, snapToPixelProperty, widthProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Parent

          +getChildren, getChildrenUnmodifiable, getManagedChildren, getStylesheets, isNeedsLayout, layout, lookup, needsLayoutProperty, requestLayout, requestParentLayout, setNeedsLayout, updateBounds
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Node

          +accessibleHelpProperty, accessibleRoleDescriptionProperty, accessibleRoleProperty, accessibleTextProperty, addEventFilter, addEventHandler, applyCss, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen, contains, contains, cursorProperty, depthTestProperty, disabledProperty, disableProperty, effectiveNodeOrientationProperty, effectProperty, eventDispatcherProperty, fireEvent, focusedProperty, focusTraversableProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getContentBias, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInitialCursor, getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY, getLocalToParentTransform, getLocalToSceneTransform, getNodeOrientation, getOnContextMenuRequested, getOnDragDetected, getOnDragDone, getOnDragDropped, getOnDragEntered, getOnDragExited, getOnDragOver, getOnInputMethodTextChanged, getOnKeyPressed, getOnKeyReleased, getOnKeyTyped, getOnMouseClicked, getOnMouseDragEntered, getOnMouseDragExited, getOnMouseDragged, getOnMouseDragOver, getOnMouseDragReleased, getOnMouseEntered, getOnMouseExited, getOnMouseMoved, getOnMousePressed, getOnMouseReleased, getOnRotate, getOnRotationFinished, getOnRotationStarted, getOnScroll, getOnScrollFinished, getOnScrollStarted, getOnSwipeDown, getOnSwipeLeft, getOnSwipeRight, getOnSwipeUp, getOnTouchMoved, getOnTouchPressed, getOnTouchReleased, getOnTouchStationary, getOnZoom, getOnZoomFinished, getOnZoomStarted, getOpacity, getParent, getProperties, getPseudoClassStates, getRotate, getRotationAxis, getScaleX, getScaleY, getScaleZ, getScene, getStyle, getStyleableParent, getStyleClass, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getTypeSelector, getUserData, getViewOrder, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, isVisible, layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent, localToParent, localToParent, localToParent, localToParent, localToParentTransformProperty, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToSceneTransformProperty, localToScreen, localToScreen, localToScreen, localToScreen, localToScreen, lookupAll, managedProperty, mouseTransparentProperty, nodeOrientationProperty, notifyAccessibleAttributeChanged, onContextMenuRequestedProperty, onDragDetectedProperty, onDragDoneProperty, onDragDroppedProperty, onDragEnteredProperty, onDragExitedProperty, onDragOverProperty, onInputMethodTextChangedProperty, onKeyPressedProperty, onKeyReleasedProperty, onKeyTypedProperty, onMouseClickedProperty, onMouseDragEnteredProperty, onMouseDragExitedProperty, onMouseDraggedProperty, onMouseDragOverProperty, onMouseDragReleasedProperty, onMouseEnteredProperty, onMouseExitedProperty, onMouseMovedProperty, onMousePressedProperty, onMouseReleasedProperty, onRotateProperty, onRotationFinishedProperty, onRotationStartedProperty, onScrollFinishedProperty, onScrollProperty, onScrollStartedProperty, onSwipeDownProperty, onSwipeLeftProperty, onSwipeRightProperty, onSwipeUpProperty, onTouchMovedProperty, onTouchPressedProperty, onTouchReleasedProperty, onTouchStationaryProperty, onZoomFinishedProperty, onZoomProperty, onZoomStartedProperty, opacityProperty, parentProperty, parentToLocal, parentToLocal, parentToLocal, parentToLocal, parentToLocal, pickOnBoundsProperty, pressedProperty, pseudoClassStateChanged, relocate, removeEventFilter, removeEventHandler, requestFocus, resizeRelocate, rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty, scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, screenToLocal, screenToLocal, screenToLocal, setAccessibleHelp, setAccessibleRole, setAccessibleRoleDescription, setAccessibleText, setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest, setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler, setFocused, setFocusTraversable, setHover, setId, setInputMethodRequests, setLayoutX, setLayoutY, setManaged, setMouseTransparent, setNodeOrientation, setOnContextMenuRequested, setOnDragDetected, setOnDragDone, setOnDragDropped, setOnDragEntered, setOnDragExited, setOnDragOver, setOnInputMethodTextChanged, setOnKeyPressed, setOnKeyReleased, setOnKeyTyped, setOnMouseClicked, setOnMouseDragEntered, setOnMouseDragExited, setOnMouseDragged, setOnMouseDragOver, setOnMouseDragReleased, setOnMouseEntered, setOnMouseExited, setOnMouseMoved, setOnMousePressed, setOnMouseReleased, setOnRotate, setOnRotationFinished, setOnRotationStarted, setOnScroll, setOnScrollFinished, setOnScrollStarted, setOnSwipeDown, setOnSwipeLeft, setOnSwipeRight, setOnSwipeUp, setOnTouchMoved, setOnTouchPressed, setOnTouchReleased, setOnTouchStationary, setOnZoom, setOnZoomFinished, setOnZoomStarted, setOpacity, setPickOnBounds, setPressed, setRotate, setRotationAxis, setScaleX, setScaleY, setScaleZ, setStyle, setTranslateX, setTranslateY, setTranslateZ, setUserData, setViewOrder, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, toString, translateXProperty, translateYProperty, translateZProperty, usesMirroring, viewOrderProperty, visibleProperty
        • +
        + +
          +
        • + + +

          Methods inherited from interface javafx.css.Styleable

          +getStyleableNode
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      + +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          setActions

          +
          private void setActions()
          +
          Sets an EventHandler that controls the input into the editor automatically and + updates it with the method Spinner.commitValue() if possible.
          +
        • +
        + + + +
          +
        • +

          hasValidValue

          +
          private boolean hasValidValue()
          +
          Checks if the text inside the editor has a valid value an can be updated with the method Spinner.commitValue().
          +
          +
          Returns:
          +
          true if the text inside the editor is a valid value, if not false
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controls/BasicMenuBar.html b/doc/0.1.4/en_private/bitchanger/gui/controls/BasicMenuBar.html new file mode 100644 index 0000000..465d535 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controls/BasicMenuBar.html @@ -0,0 +1,992 @@ + + + + + +BasicMenuBar + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class BasicMenuBar

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • javafx.scene.Node
      • +
      • +
          +
        • javafx.scene.Parent
        • +
        • +
            +
          • javafx.scene.layout.Region
          • +
          • +
              +
            • javafx.scene.control.Control
            • +
            • +
                +
              • javafx.scene.control.MenuBar
              • +
              • +
                  +
                • bitchanger.gui.controls.BasicMenuBar
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Controllable, javafx.css.Styleable, javafx.event.EventTarget, javafx.scene.control.Skinnable
      +
      +
      +
      Direct Known Subclasses:
      +
      ConverterMenuBar
      +
      +
      +
      public class BasicMenuBar
      +extends javafx.scene.control.MenuBar
      +implements Controllable
      +
      Basic MenuBar containing the MenuItems that are generally required. + The Preferences.commaProperty is changed accordingly via the MenuItems, + which are available in Options -> Set Comma. + Further functions can be added via Controllers.
      +
      +
      Since:
      +
      Bitchanger 0.1.4
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      See Also:
      +
      BasicMenuController
      +
      +
    • +
    +
    +
    +
      +
    • + +
      + +
      + +
      +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + + + + + +
        Constructors 
        ConstructorDescription
        BasicMenuBar() +
        Constructs a new BasicMenuBar with all MenuItems.
        +
        BasicMenuBar​(ControllableApplication controllableApp) +
        Constructs a new BasicMenuBar with all MenuItems that are already assigned the basic functions.
        +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethodDescription
        private voidaddMenu​(javafx.scene.control.Menu m, + String key) +
        Adds the given Menu to this MenuBar and puts it in the Map menuItemMap + with the given key
        +
        private voidcreateMenuHelp() +
        Creates the Menu "Hilfe" with its Items "Ãœber" and "Version"
        +
        private voidcreateMenuModus() +
        Creates the Menu "Modus" with its Items "Umrechner", "IEEE" and "Berechnungen"
        +
        private voidcreateMenuOptions() +
        Creates the Menu "Optionen" with its Items "Komma wählen" and the sub-elements + "deutsch" and "englisch"
        +
        private voidcreateMenuView() +
        Creates the Menu "Ansicht" with its Items "Stil", "Auf Monitor bewegen" and "Vollbild"
        +
        Map<String,​javafx.scene.control.Button>getButtonMap() +
        Returns a Map with all buttons of the controllable.
        +
        Map<String,​javafx.scene.Node>getNodeMap() +
        Returns a Map with all elements (Nodes) of the controllable, that are not buttons or text fields and are required in the controller.
        +
        Map<String,​javafx.scene.control.TextField>getTextFieldMap() +
        Returns a Map with all text fields of the controllable.
        +
        private voidsetChooseCommaAction​(javafx.scene.control.MenuItem chooseComma, + Comma comma) +
        Sets the action of the given MenuItem so that the specific Comma is set in the Preferences.
        +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.MenuBar

          +createDefaultSkin, getClassCssMetaData, getControlCssMetaData, getInitialFocusTraversable, getMenus, isUseSystemMenuBar, setUseSystemMenuBar, useSystemMenuBarProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Control

          +computeMaxHeight, computeMaxWidth, computeMinHeight, computeMinWidth, computePrefHeight, computePrefWidth, contextMenuProperty, executeAccessibleAction, getBaselineOffset, getContextMenu, getCssMetaData, getSkin, getTooltip, isResizable, layoutChildren, queryAccessibleAttribute, setContextMenu, setSkin, setTooltip, skinProperty, tooltipProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.layout.Region

          +backgroundProperty, borderProperty, cacheShapeProperty, centerShapeProperty, getBackground, getBorder, getHeight, getInsets, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getOpaqueInsets, getPadding, getPrefHeight, getPrefWidth, getShape, getUserAgentStylesheet, getWidth, heightProperty, insetsProperty, isCacheShape, isCenterShape, isScaleShape, isSnapToPixel, layoutInArea, layoutInArea, layoutInArea, layoutInArea, maxHeight, maxHeightProperty, maxWidth, maxWidthProperty, minHeight, minHeightProperty, minWidth, minWidthProperty, opaqueInsetsProperty, paddingProperty, positionInArea, positionInArea, prefHeight, prefHeightProperty, prefWidth, prefWidthProperty, resize, scaleShapeProperty, setBackground, setBorder, setCacheShape, setCenterShape, setHeight, setMaxHeight, setMaxSize, setMaxWidth, setMinHeight, setMinSize, setMinWidth, setOpaqueInsets, setPadding, setPrefHeight, setPrefSize, setPrefWidth, setScaleShape, setShape, setSnapToPixel, setWidth, shapeProperty, snappedBottomInset, snappedLeftInset, snappedRightInset, snappedTopInset, snapPosition, snapPositionX, snapPositionY, snapSize, snapSizeX, snapSizeY, snapSpace, snapSpaceX, snapSpaceY, snapToPixelProperty, widthProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Parent

          +getChildren, getChildrenUnmodifiable, getManagedChildren, getStylesheets, isNeedsLayout, layout, lookup, needsLayoutProperty, requestLayout, requestParentLayout, setNeedsLayout, updateBounds
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Node

          +accessibleHelpProperty, accessibleRoleDescriptionProperty, accessibleRoleProperty, accessibleTextProperty, addEventFilter, addEventHandler, applyCss, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen, contains, contains, cursorProperty, depthTestProperty, disabledProperty, disableProperty, effectiveNodeOrientationProperty, effectProperty, eventDispatcherProperty, fireEvent, focusedProperty, focusTraversableProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getContentBias, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInitialCursor, getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY, getLocalToParentTransform, getLocalToSceneTransform, getNodeOrientation, getOnContextMenuRequested, getOnDragDetected, getOnDragDone, getOnDragDropped, getOnDragEntered, getOnDragExited, getOnDragOver, getOnInputMethodTextChanged, getOnKeyPressed, getOnKeyReleased, getOnKeyTyped, getOnMouseClicked, getOnMouseDragEntered, getOnMouseDragExited, getOnMouseDragged, getOnMouseDragOver, getOnMouseDragReleased, getOnMouseEntered, getOnMouseExited, getOnMouseMoved, getOnMousePressed, getOnMouseReleased, getOnRotate, getOnRotationFinished, getOnRotationStarted, getOnScroll, getOnScrollFinished, getOnScrollStarted, getOnSwipeDown, getOnSwipeLeft, getOnSwipeRight, getOnSwipeUp, getOnTouchMoved, getOnTouchPressed, getOnTouchReleased, getOnTouchStationary, getOnZoom, getOnZoomFinished, getOnZoomStarted, getOpacity, getParent, getProperties, getPseudoClassStates, getRotate, getRotationAxis, getScaleX, getScaleY, getScaleZ, getScene, getStyle, getStyleableParent, getStyleClass, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getTypeSelector, getUserData, getViewOrder, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, isVisible, layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent, localToParent, localToParent, localToParent, localToParent, localToParentTransformProperty, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToSceneTransformProperty, localToScreen, localToScreen, localToScreen, localToScreen, localToScreen, lookupAll, managedProperty, mouseTransparentProperty, nodeOrientationProperty, notifyAccessibleAttributeChanged, onContextMenuRequestedProperty, onDragDetectedProperty, onDragDoneProperty, onDragDroppedProperty, onDragEnteredProperty, onDragExitedProperty, onDragOverProperty, onInputMethodTextChangedProperty, onKeyPressedProperty, onKeyReleasedProperty, onKeyTypedProperty, onMouseClickedProperty, onMouseDragEnteredProperty, onMouseDragExitedProperty, onMouseDraggedProperty, onMouseDragOverProperty, onMouseDragReleasedProperty, onMouseEnteredProperty, onMouseExitedProperty, onMouseMovedProperty, onMousePressedProperty, onMouseReleasedProperty, onRotateProperty, onRotationFinishedProperty, onRotationStartedProperty, onScrollFinishedProperty, onScrollProperty, onScrollStartedProperty, onSwipeDownProperty, onSwipeLeftProperty, onSwipeRightProperty, onSwipeUpProperty, onTouchMovedProperty, onTouchPressedProperty, onTouchReleasedProperty, onTouchStationaryProperty, onZoomFinishedProperty, onZoomProperty, onZoomStartedProperty, opacityProperty, parentProperty, parentToLocal, parentToLocal, parentToLocal, parentToLocal, parentToLocal, pickOnBoundsProperty, pressedProperty, pseudoClassStateChanged, relocate, removeEventFilter, removeEventHandler, requestFocus, resizeRelocate, rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty, scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, screenToLocal, screenToLocal, screenToLocal, setAccessibleHelp, setAccessibleRole, setAccessibleRoleDescription, setAccessibleText, setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest, setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler, setFocused, setFocusTraversable, setHover, setId, setInputMethodRequests, setLayoutX, setLayoutY, setManaged, setMouseTransparent, setNodeOrientation, setOnContextMenuRequested, setOnDragDetected, setOnDragDone, setOnDragDropped, setOnDragEntered, setOnDragExited, setOnDragOver, setOnInputMethodTextChanged, setOnKeyPressed, setOnKeyReleased, setOnKeyTyped, setOnMouseClicked, setOnMouseDragEntered, setOnMouseDragExited, setOnMouseDragged, setOnMouseDragOver, setOnMouseDragReleased, setOnMouseEntered, setOnMouseExited, setOnMouseMoved, setOnMousePressed, setOnMouseReleased, setOnRotate, setOnRotationFinished, setOnRotationStarted, setOnScroll, setOnScrollFinished, setOnScrollStarted, setOnSwipeDown, setOnSwipeLeft, setOnSwipeRight, setOnSwipeUp, setOnTouchMoved, setOnTouchPressed, setOnTouchReleased, setOnTouchStationary, setOnZoom, setOnZoomFinished, setOnZoomStarted, setOpacity, setPickOnBounds, setPressed, setRotate, setRotationAxis, setScaleX, setScaleY, setScaleZ, setStyle, setTranslateX, setTranslateY, setTranslateZ, setUserData, setViewOrder, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, toString, translateXProperty, translateYProperty, translateZProperty, usesMirroring, viewOrderProperty, visibleProperty
        • +
        + +
          +
        • + + +

          Methods inherited from interface javafx.css.Styleable

          +getStyleableNode
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      + +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          BasicMenuBar

          +
          public BasicMenuBar()
          +
          Constructs a new BasicMenuBar with all MenuItems. The only function provided is changing the + CommaProperty in Preferences.getPrefs() to English or German.
          +
        • +
        + + + +
          +
        • +

          BasicMenuBar

          +
          public BasicMenuBar​(ControllableApplication controllableApp)
          +             throws NullPointerException
          +
          Constructs a new BasicMenuBar with all MenuItems that are already assigned the basic functions.
          +
          +
          Parameters:
          +
          controllableApp - Application class with that the basic functions are associated
          +
          Throws:
          +
          NullPointerException - if the argument controllableApp is null
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTextFieldMap

          +
          public Map<String,​javafx.scene.control.TextField> getTextFieldMap()
          +
          Returns a Map with all text fields of the controllable. Each text field is allocated to a unique keyword, + which is used to find the text field out of the map. +

          + Each keyword should have a useful connection to the use of the text field! +

          +
          +
          Specified by:
          +
          getTextFieldMap in interface Controllable
          +
          Returns:
          +
          Map, that contains all text fields of the controllable
          +
          +
        • +
        + + + +
          +
        • +

          getButtonMap

          +
          public Map<String,​javafx.scene.control.Button> getButtonMap()
          +
          Returns a Map with all buttons of the controllable. Each button is allocated to a unique keyword, + which is used to find the button out of the map. +

          + Each Keyword should have a useful connection to the use of the button! +

          +
          +
          Specified by:
          +
          getButtonMap in interface Controllable
          +
          Returns:
          +
          Map, that contains all buttons of the controllable
          +
          +
        • +
        + + + +
          +
        • +

          getNodeMap

          +
          public Map<String,​javafx.scene.Node> getNodeMap()
          +
          Returns a Map with all elements (Nodes) of the controllable, that are not buttons or text fields and are required in the controller. + Each element is allocated to a unique keyword, which is used to find the element out of the map. +

          + Each keyword should have a useful connection to the use of the elements! +

          +
          +
          Specified by:
          +
          getNodeMap in interface Controllable
          +
          Returns:
          +
          Map, which contains all elements of a controllable, that are not buttons or text fields and are required in the controller
          +
          +
        • +
        + + + +
          +
        • +

          setChooseCommaAction

          +
          private void setChooseCommaAction​(javafx.scene.control.MenuItem chooseComma,
          +                                  Comma comma)
          +
          Sets the action of the given MenuItem so that the specific Comma is set in the Preferences.
          +
          +
          Parameters:
          +
          chooseComma - MenuItem receiving the action
          +
          comma - specific Comma that is set in the Preferences
          +
          +
        • +
        + + + +
          +
        • +

          createMenuModus

          +
          private void createMenuModus()
          +
          Creates the Menu "Modus" with its Items "Umrechner", "IEEE" and "Berechnungen"
          +
        • +
        + + + +
          +
        • +

          createMenuOptions

          +
          private void createMenuOptions()
          +
          Creates the Menu "Optionen" with its Items "Komma wählen" and the sub-elements + "deutsch" and "englisch"
          +
        • +
        + + + +
          +
        • +

          createMenuView

          +
          private void createMenuView()
          +
          Creates the Menu "Ansicht" with its Items "Stil", "Auf Monitor bewegen" and "Vollbild"
          +
        • +
        + + + +
          +
        • +

          createMenuHelp

          +
          private void createMenuHelp()
          +
          Creates the Menu "Hilfe" with its Items "Ãœber" and "Version"
          +
        • +
        + + + +
          +
        • +

          addMenu

          +
          private void addMenu​(javafx.scene.control.Menu m,
          +                     String key)
          +
          Adds the given Menu to this MenuBar and puts it in the Map menuItemMap + with the given key
          +
          +
          Parameters:
          +
          m - Menu that is added
          +
          key - key with which the Menu m is to be associated in the Map menuItemMap
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controls/ConverterMenuBar.html b/doc/0.1.4/en_private/bitchanger/gui/controls/ConverterMenuBar.html new file mode 100644 index 0000000..daeeca1 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controls/ConverterMenuBar.html @@ -0,0 +1,485 @@ + + + + + +ConverterMenuBar + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class ConverterMenuBar

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • javafx.scene.Node
      • +
      • +
          +
        • javafx.scene.Parent
        • +
        • +
            +
          • javafx.scene.layout.Region
          • +
          • + +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Controllable, javafx.css.Styleable, javafx.event.EventTarget, javafx.scene.control.Skinnable
      +
      +
      +
      public class ConverterMenuBar
      +extends BasicMenuBar
      +
    • +
    +
    +
    +
      +
    • + +
      + +
      + +
      + +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethodDescription
        private voidaddItems() 
        + +
          +
        • + + +

          Methods inherited from class javafx.scene.control.MenuBar

          +createDefaultSkin, getClassCssMetaData, getControlCssMetaData, getInitialFocusTraversable, getMenus, isUseSystemMenuBar, setUseSystemMenuBar, useSystemMenuBarProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Control

          +computeMaxHeight, computeMaxWidth, computeMinHeight, computeMinWidth, computePrefHeight, computePrefWidth, contextMenuProperty, executeAccessibleAction, getBaselineOffset, getContextMenu, getCssMetaData, getSkin, getTooltip, isResizable, layoutChildren, queryAccessibleAttribute, setContextMenu, setSkin, setTooltip, skinProperty, tooltipProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.layout.Region

          +backgroundProperty, borderProperty, cacheShapeProperty, centerShapeProperty, getBackground, getBorder, getHeight, getInsets, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getOpaqueInsets, getPadding, getPrefHeight, getPrefWidth, getShape, getUserAgentStylesheet, getWidth, heightProperty, insetsProperty, isCacheShape, isCenterShape, isScaleShape, isSnapToPixel, layoutInArea, layoutInArea, layoutInArea, layoutInArea, maxHeight, maxHeightProperty, maxWidth, maxWidthProperty, minHeight, minHeightProperty, minWidth, minWidthProperty, opaqueInsetsProperty, paddingProperty, positionInArea, positionInArea, prefHeight, prefHeightProperty, prefWidth, prefWidthProperty, resize, scaleShapeProperty, setBackground, setBorder, setCacheShape, setCenterShape, setHeight, setMaxHeight, setMaxSize, setMaxWidth, setMinHeight, setMinSize, setMinWidth, setOpaqueInsets, setPadding, setPrefHeight, setPrefSize, setPrefWidth, setScaleShape, setShape, setSnapToPixel, setWidth, shapeProperty, snappedBottomInset, snappedLeftInset, snappedRightInset, snappedTopInset, snapPosition, snapPositionX, snapPositionY, snapSize, snapSizeX, snapSizeY, snapSpace, snapSpaceX, snapSpaceY, snapToPixelProperty, widthProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Parent

          +getChildren, getChildrenUnmodifiable, getManagedChildren, getStylesheets, isNeedsLayout, layout, lookup, needsLayoutProperty, requestLayout, requestParentLayout, setNeedsLayout, updateBounds
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Node

          +accessibleHelpProperty, accessibleRoleDescriptionProperty, accessibleRoleProperty, accessibleTextProperty, addEventFilter, addEventHandler, applyCss, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen, contains, contains, cursorProperty, depthTestProperty, disabledProperty, disableProperty, effectiveNodeOrientationProperty, effectProperty, eventDispatcherProperty, fireEvent, focusedProperty, focusTraversableProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getContentBias, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInitialCursor, getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY, getLocalToParentTransform, getLocalToSceneTransform, getNodeOrientation, getOnContextMenuRequested, getOnDragDetected, getOnDragDone, getOnDragDropped, getOnDragEntered, getOnDragExited, getOnDragOver, getOnInputMethodTextChanged, getOnKeyPressed, getOnKeyReleased, getOnKeyTyped, getOnMouseClicked, getOnMouseDragEntered, getOnMouseDragExited, getOnMouseDragged, getOnMouseDragOver, getOnMouseDragReleased, getOnMouseEntered, getOnMouseExited, getOnMouseMoved, getOnMousePressed, getOnMouseReleased, getOnRotate, getOnRotationFinished, getOnRotationStarted, getOnScroll, getOnScrollFinished, getOnScrollStarted, getOnSwipeDown, getOnSwipeLeft, getOnSwipeRight, getOnSwipeUp, getOnTouchMoved, getOnTouchPressed, getOnTouchReleased, getOnTouchStationary, getOnZoom, getOnZoomFinished, getOnZoomStarted, getOpacity, getParent, getProperties, getPseudoClassStates, getRotate, getRotationAxis, getScaleX, getScaleY, getScaleZ, getScene, getStyle, getStyleableParent, getStyleClass, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getTypeSelector, getUserData, getViewOrder, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, isVisible, layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent, localToParent, localToParent, localToParent, localToParent, localToParentTransformProperty, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToSceneTransformProperty, localToScreen, localToScreen, localToScreen, localToScreen, localToScreen, lookupAll, managedProperty, mouseTransparentProperty, nodeOrientationProperty, notifyAccessibleAttributeChanged, onContextMenuRequestedProperty, onDragDetectedProperty, onDragDoneProperty, onDragDroppedProperty, onDragEnteredProperty, onDragExitedProperty, onDragOverProperty, onInputMethodTextChangedProperty, onKeyPressedProperty, onKeyReleasedProperty, onKeyTypedProperty, onMouseClickedProperty, onMouseDragEnteredProperty, onMouseDragExitedProperty, onMouseDraggedProperty, onMouseDragOverProperty, onMouseDragReleasedProperty, onMouseEnteredProperty, onMouseExitedProperty, onMouseMovedProperty, onMousePressedProperty, onMouseReleasedProperty, onRotateProperty, onRotationFinishedProperty, onRotationStartedProperty, onScrollFinishedProperty, onScrollProperty, onScrollStartedProperty, onSwipeDownProperty, onSwipeLeftProperty, onSwipeRightProperty, onSwipeUpProperty, onTouchMovedProperty, onTouchPressedProperty, onTouchReleasedProperty, onTouchStationaryProperty, onZoomFinishedProperty, onZoomProperty, onZoomStartedProperty, opacityProperty, parentProperty, parentToLocal, parentToLocal, parentToLocal, parentToLocal, parentToLocal, pickOnBoundsProperty, pressedProperty, pseudoClassStateChanged, relocate, removeEventFilter, removeEventHandler, requestFocus, resizeRelocate, rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty, scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, screenToLocal, screenToLocal, screenToLocal, setAccessibleHelp, setAccessibleRole, setAccessibleRoleDescription, setAccessibleText, setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest, setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler, setFocused, setFocusTraversable, setHover, setId, setInputMethodRequests, setLayoutX, setLayoutY, setManaged, setMouseTransparent, setNodeOrientation, setOnContextMenuRequested, setOnDragDetected, setOnDragDone, setOnDragDropped, setOnDragEntered, setOnDragExited, setOnDragOver, setOnInputMethodTextChanged, setOnKeyPressed, setOnKeyReleased, setOnKeyTyped, setOnMouseClicked, setOnMouseDragEntered, setOnMouseDragExited, setOnMouseDragged, setOnMouseDragOver, setOnMouseDragReleased, setOnMouseEntered, setOnMouseExited, setOnMouseMoved, setOnMousePressed, setOnMouseReleased, setOnRotate, setOnRotationFinished, setOnRotationStarted, setOnScroll, setOnScrollFinished, setOnScrollStarted, setOnSwipeDown, setOnSwipeLeft, setOnSwipeRight, setOnSwipeUp, setOnTouchMoved, setOnTouchPressed, setOnTouchReleased, setOnTouchStationary, setOnZoom, setOnZoomFinished, setOnZoomStarted, setOpacity, setPickOnBounds, setPressed, setRotate, setRotationAxis, setScaleX, setScaleY, setScaleZ, setStyle, setTranslateX, setTranslateY, setTranslateZ, setUserData, setViewOrder, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, toString, translateXProperty, translateYProperty, translateZProperty, usesMirroring, viewOrderProperty, visibleProperty
        • +
        + +
          +
        • + + +

          Methods inherited from interface javafx.css.Styleable

          +getStyleableNode
        • +
        +
      • +
      +
      +
    • +
    +
    +
    + +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controls/InformationDialog.InformationType.html b/doc/0.1.4/en_private/bitchanger/gui/controls/InformationDialog.InformationType.html new file mode 100644 index 0000000..66d3acc --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controls/InformationDialog.InformationType.html @@ -0,0 +1,438 @@ + + + + + +InformationDialog.InformationType + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Enum InformationDialog.InformationType

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      + +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          InformationType

          +
          private InformationType()
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          values

          +
          public static InformationDialog.InformationType[] values()
          +
          Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
          +for (InformationDialog.InformationType c : InformationDialog.InformationType.values())
          +    System.out.println(c);
          +
          +
          +
          Returns:
          +
          an array containing the constants of this enum type, in the order they are declared
          +
          +
        • +
        + + + +
          +
        • +

          valueOf

          +
          public static InformationDialog.InformationType valueOf​(String name)
          +
          Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
          +
          +
          Parameters:
          +
          name - the name of the enum constant to be returned.
          +
          Returns:
          +
          the enum constant with the specified name
          +
          Throws:
          +
          IllegalArgumentException - if this enum type has no constant with the specified name
          +
          NullPointerException - if the argument is null
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controls/InformationDialog.html b/doc/0.1.4/en_private/bitchanger/gui/controls/InformationDialog.html new file mode 100644 index 0000000..5d3a518 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controls/InformationDialog.html @@ -0,0 +1,392 @@ + + + + + +InformationDialog + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class InformationDialog

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • javafx.scene.control.Dialog<javafx.scene.control.ButtonType>
      • +
      • +
          +
        • javafx.scene.control.Alert
        • +
        • +
            +
          • bitchanger.gui.controls.InformationDialog
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      javafx.event.EventTarget
      +
      +
      +
      public class InformationDialog
      +extends javafx.scene.control.Alert
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Nested Class Summary

        + + + + + + + + + + + + +
        Nested Classes 
        Modifier and TypeClassDescription
        static class InformationDialog.InformationType 
        +
          +
        • + + +

          Nested classes/interfaces inherited from class javafx.scene.control.Alert

          +javafx.scene.control.Alert.AlertType
        • +
        +
      • +
      +
      + +
      + +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethodDescription
        private voidcreateAboutDialog() 
        private voidcreateVersionDialog() 
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Alert

          +alertTypeProperty, getAlertType, getButtonTypes, setAlertType
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Dialog

          +buildEventDispatchChain, close, contentTextProperty, dialogPaneProperty, getContentText, getDialogPane, getGraphic, getHeaderText, getHeight, getModality, getOnCloseRequest, getOnHidden, getOnHiding, getOnShowing, getOnShown, getOwner, getResult, getResultConverter, getTitle, getWidth, getX, getY, graphicProperty, headerTextProperty, heightProperty, hide, initModality, initOwner, initStyle, isResizable, isShowing, onCloseRequestProperty, onHiddenProperty, onHidingProperty, onShowingProperty, onShownProperty, resizableProperty, resultConverterProperty, resultProperty, setContentText, setDialogPane, setGraphic, setHeaderText, setHeight, setOnCloseRequest, setOnHidden, setOnHiding, setOnShowing, setOnShown, setResizable, setResult, setResultConverter, setTitle, setWidth, setX, setY, show, showAndWait, showingProperty, titleProperty, widthProperty, xProperty, yProperty
        • +
        + +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      + +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          createAboutDialog

          +
          private void createAboutDialog()
          +
        • +
        + + + +
          +
        • +

          createVersionDialog

          +
          private void createVersionDialog()
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controls/SVGIcon.html b/doc/0.1.4/en_private/bitchanger/gui/controls/SVGIcon.html new file mode 100644 index 0000000..74569cb --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controls/SVGIcon.html @@ -0,0 +1,443 @@ + + + + + +SVGIcon + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class SVGIcon

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • javafx.scene.Node
      • +
      • +
          +
        • javafx.scene.shape.Shape
        • +
        • +
            +
          • javafx.scene.shape.SVGPath
          • +
          • +
              +
            • bitchanger.gui.controls.SVGIcon
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      javafx.css.Styleable, javafx.event.EventTarget
      +
      +
      +
      public class SVGIcon
      +extends javafx.scene.shape.SVGPath
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + +
        Fields 
        Modifier and TypeFieldDescription
        private booleanhasPath 
        +
          +
        • + + +

          Fields inherited from class javafx.scene.Node

          +BASELINE_OFFSET_SAME_AS_HEIGHT
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + + + + + + + + + +
        Constructors 
        ConstructorDescription
        SVGIcon() 
        SVGIcon​(File svgFile) 
        SVGIcon​(javafx.scene.shape.SVGPath svgPath) 
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethodDescription
        booleanhasPath() 
        voidsetSVG​(javafx.scene.shape.SVGPath svgPath) 
        +
          +
        • + + +

          Methods inherited from class javafx.scene.shape.SVGPath

          +contentProperty, fillRuleProperty, getContent, getFillRule, setContent, setFillRule, toString
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.shape.Shape

          +fillProperty, getClassCssMetaData, getCssMetaData, getFill, getStroke, getStrokeDashArray, getStrokeDashOffset, getStrokeLineCap, getStrokeLineJoin, getStrokeMiterLimit, getStrokeType, getStrokeWidth, intersect, isSmooth, setFill, setSmooth, setStroke, setStrokeDashOffset, setStrokeLineCap, setStrokeLineJoin, setStrokeMiterLimit, setStrokeType, setStrokeWidth, smoothProperty, strokeDashOffsetProperty, strokeLineCapProperty, strokeLineJoinProperty, strokeMiterLimitProperty, strokeProperty, strokeTypeProperty, strokeWidthProperty, subtract, union
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Node

          +accessibleHelpProperty, accessibleRoleDescriptionProperty, accessibleRoleProperty, accessibleTextProperty, addEventFilter, addEventHandler, applyCss, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen, contains, contains, cursorProperty, depthTestProperty, disabledProperty, disableProperty, effectiveNodeOrientationProperty, effectProperty, eventDispatcherProperty, executeAccessibleAction, fireEvent, focusedProperty, focusTraversableProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBaselineOffset, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getContentBias, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInitialCursor, getInitialFocusTraversable, getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY, getLocalToParentTransform, getLocalToSceneTransform, getNodeOrientation, getOnContextMenuRequested, getOnDragDetected, getOnDragDone, getOnDragDropped, getOnDragEntered, getOnDragExited, getOnDragOver, getOnInputMethodTextChanged, getOnKeyPressed, getOnKeyReleased, getOnKeyTyped, getOnMouseClicked, getOnMouseDragEntered, getOnMouseDragExited, getOnMouseDragged, getOnMouseDragOver, getOnMouseDragReleased, getOnMouseEntered, getOnMouseExited, getOnMouseMoved, getOnMousePressed, getOnMouseReleased, getOnRotate, getOnRotationFinished, getOnRotationStarted, getOnScroll, getOnScrollFinished, getOnScrollStarted, getOnSwipeDown, getOnSwipeLeft, getOnSwipeRight, getOnSwipeUp, getOnTouchMoved, getOnTouchPressed, getOnTouchReleased, getOnTouchStationary, getOnZoom, getOnZoomFinished, getOnZoomStarted, getOpacity, getParent, getProperties, getPseudoClassStates, getRotate, getRotationAxis, getScaleX, getScaleY, getScaleZ, getScene, getStyle, getStyleableParent, getStyleClass, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getTypeSelector, getUserData, getViewOrder, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, isResizable, isVisible, layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent, localToParent, localToParent, localToParent, localToParent, localToParentTransformProperty, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToSceneTransformProperty, localToScreen, localToScreen, localToScreen, localToScreen, localToScreen, lookup, lookupAll, managedProperty, maxHeight, maxWidth, minHeight, minWidth, mouseTransparentProperty, nodeOrientationProperty, notifyAccessibleAttributeChanged, onContextMenuRequestedProperty, onDragDetectedProperty, onDragDoneProperty, onDragDroppedProperty, onDragEnteredProperty, onDragExitedProperty, onDragOverProperty, onInputMethodTextChangedProperty, onKeyPressedProperty, onKeyReleasedProperty, onKeyTypedProperty, onMouseClickedProperty, onMouseDragEnteredProperty, onMouseDragExitedProperty, onMouseDraggedProperty, onMouseDragOverProperty, onMouseDragReleasedProperty, onMouseEnteredProperty, onMouseExitedProperty, onMouseMovedProperty, onMousePressedProperty, onMouseReleasedProperty, onRotateProperty, onRotationFinishedProperty, onRotationStartedProperty, onScrollFinishedProperty, onScrollProperty, onScrollStartedProperty, onSwipeDownProperty, onSwipeLeftProperty, onSwipeRightProperty, onSwipeUpProperty, onTouchMovedProperty, onTouchPressedProperty, onTouchReleasedProperty, onTouchStationaryProperty, onZoomFinishedProperty, onZoomProperty, onZoomStartedProperty, opacityProperty, parentProperty, parentToLocal, parentToLocal, parentToLocal, parentToLocal, parentToLocal, pickOnBoundsProperty, prefHeight, prefWidth, pressedProperty, pseudoClassStateChanged, queryAccessibleAttribute, relocate, removeEventFilter, removeEventHandler, requestFocus, resize, resizeRelocate, rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty, scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, screenToLocal, screenToLocal, screenToLocal, setAccessibleHelp, setAccessibleRole, setAccessibleRoleDescription, setAccessibleText, setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest, setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler, setFocused, setFocusTraversable, setHover, setId, setInputMethodRequests, setLayoutX, setLayoutY, setManaged, setMouseTransparent, setNodeOrientation, setOnContextMenuRequested, setOnDragDetected, setOnDragDone, setOnDragDropped, setOnDragEntered, setOnDragExited, setOnDragOver, setOnInputMethodTextChanged, setOnKeyPressed, setOnKeyReleased, setOnKeyTyped, setOnMouseClicked, setOnMouseDragEntered, setOnMouseDragExited, setOnMouseDragged, setOnMouseDragOver, setOnMouseDragReleased, setOnMouseEntered, setOnMouseExited, setOnMouseMoved, setOnMousePressed, setOnMouseReleased, setOnRotate, setOnRotationFinished, setOnRotationStarted, setOnScroll, setOnScrollFinished, setOnScrollStarted, setOnSwipeDown, setOnSwipeLeft, setOnSwipeRight, setOnSwipeUp, setOnTouchMoved, setOnTouchPressed, setOnTouchReleased, setOnTouchStationary, setOnZoom, setOnZoomFinished, setOnZoomStarted, setOpacity, setPickOnBounds, setPressed, setRotate, setRotationAxis, setScaleX, setScaleY, setScaleZ, setStyle, setTranslateX, setTranslateY, setTranslateZ, setUserData, setViewOrder, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, translateXProperty, translateYProperty, translateZProperty, usesMirroring, viewOrderProperty, visibleProperty
        • +
        + +
          +
        • + + +

          Methods inherited from interface javafx.css.Styleable

          +getStyleableNode
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          hasPath

          +
          private boolean hasPath
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          SVGIcon

          +
          public SVGIcon()
          +
        • +
        + + + +
          +
        • +

          SVGIcon

          +
          public SVGIcon​(File svgFile)
          +
        • +
        + + + +
          +
        • +

          SVGIcon

          +
          public SVGIcon​(javafx.scene.shape.SVGPath svgPath)
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          setSVG

          +
          public void setSVG​(javafx.scene.shape.SVGPath svgPath)
          +
        • +
        + + + +
          +
        • +

          hasPath

          +
          public boolean hasPath()
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controls/UnfocusedButton.html b/doc/0.1.4/en_private/bitchanger/gui/controls/UnfocusedButton.html new file mode 100644 index 0000000..e6ac34f --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controls/UnfocusedButton.html @@ -0,0 +1,611 @@ + + + + + +UnfocusedButton + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class UnfocusedButton

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • javafx.scene.Node
      • +
      • +
          +
        • javafx.scene.Parent
        • +
        • +
            +
          • javafx.scene.layout.Region
          • +
          • +
              +
            • javafx.scene.control.Control
            • +
            • +
                +
              • javafx.scene.control.Labeled
              • +
              • +
                  +
                • javafx.scene.control.ButtonBase
                • +
                • +
                    +
                  • javafx.scene.control.Button
                  • +
                  • +
                      +
                    • bitchanger.gui.controls.UnfocusedButton
                    • +
                    +
                  • +
                  +
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      javafx.css.Styleable, javafx.event.EventTarget, javafx.scene.control.Skinnable
      +
      +
      +
      Direct Known Subclasses:
      +
      ValueButton
      +
      +
      +
      public class UnfocusedButton
      +extends javafx.scene.control.Button
      +
      Button that does not get focus by clicking and has a rectangle without rounded corners as basic form.
      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeFieldDescription
        static doubleDEFAULT_GRAPHIC_SCALE_FACTOR 
        private javafx.beans.property.DoublePropertygraphicScaleFactorProperty 
        private javafx.beans.property.DoublePropertygraphicScaleProperty 
        +
          +
        • + + +

          Fields inherited from class javafx.scene.layout.Region

          +USE_COMPUTED_SIZE, USE_PREF_SIZE
        • +
        +
          +
        • + + +

          Fields inherited from class javafx.scene.Node

          +BASELINE_OFFSET_SAME_AS_HEIGHT
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + + + + + + + + + + + + + +
        Constructors 
        ConstructorDescription
        UnfocusedButton() +
        Creates an UnfocusedButton with an empty string as label
        +
        UnfocusedButton​(String text) +
        Creates an UnfocusedButton with a specific string as label
        +
        UnfocusedButton​(String text, + javafx.scene.Node graphic) +
        Creates an UnfocusedButton with a specific string and an icon as label
        +
        UnfocusedButton​(javafx.scene.Node graphic) 
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethodDescription
        private voidbindScaleProperty​(javafx.beans.value.ObservableValue<? extends Number> observable, + Number oldValue, + Number newValue) 
        private voidinitShape() +
        Disables the focus for this button and sets rectangle without rounded corners as basic form for this button.
        +
        private voidobserveGraphicScaling() 
        voidsetGraphicScaleFactor​(Double factor) 
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Button

          +cancelButtonProperty, createDefaultSkin, defaultButtonProperty, fire, isCancelButton, isDefaultButton, setCancelButton, setDefaultButton
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.ButtonBase

          +arm, armedProperty, disarm, executeAccessibleAction, getOnAction, isArmed, onActionProperty, setOnAction
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Labeled

          +alignmentProperty, contentDisplayProperty, ellipsisStringProperty, fontProperty, getAlignment, getClassCssMetaData, getContentBias, getContentDisplay, getControlCssMetaData, getEllipsisString, getFont, getGraphic, getGraphicTextGap, getInitialAlignment, getLabelPadding, getLineSpacing, getText, getTextAlignment, getTextFill, getTextOverrun, graphicProperty, graphicTextGapProperty, isMnemonicParsing, isUnderline, isWrapText, labelPaddingProperty, lineSpacingProperty, mnemonicParsingProperty, setAlignment, setContentDisplay, setEllipsisString, setFont, setGraphic, setGraphicTextGap, setLineSpacing, setMnemonicParsing, setText, setTextAlignment, setTextFill, setTextOverrun, setUnderline, setWrapText, textAlignmentProperty, textFillProperty, textOverrunProperty, textProperty, toString, underlineProperty, wrapTextProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Control

          +computeMaxHeight, computeMaxWidth, computeMinHeight, computeMinWidth, computePrefHeight, computePrefWidth, contextMenuProperty, getBaselineOffset, getContextMenu, getCssMetaData, getInitialFocusTraversable, getSkin, getTooltip, isResizable, layoutChildren, queryAccessibleAttribute, setContextMenu, setSkin, setTooltip, skinProperty, tooltipProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.layout.Region

          +backgroundProperty, borderProperty, cacheShapeProperty, centerShapeProperty, getBackground, getBorder, getHeight, getInsets, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getOpaqueInsets, getPadding, getPrefHeight, getPrefWidth, getShape, getUserAgentStylesheet, getWidth, heightProperty, insetsProperty, isCacheShape, isCenterShape, isScaleShape, isSnapToPixel, layoutInArea, layoutInArea, layoutInArea, layoutInArea, maxHeight, maxHeightProperty, maxWidth, maxWidthProperty, minHeight, minHeightProperty, minWidth, minWidthProperty, opaqueInsetsProperty, paddingProperty, positionInArea, positionInArea, prefHeight, prefHeightProperty, prefWidth, prefWidthProperty, resize, scaleShapeProperty, setBackground, setBorder, setCacheShape, setCenterShape, setHeight, setMaxHeight, setMaxSize, setMaxWidth, setMinHeight, setMinSize, setMinWidth, setOpaqueInsets, setPadding, setPrefHeight, setPrefSize, setPrefWidth, setScaleShape, setShape, setSnapToPixel, setWidth, shapeProperty, snappedBottomInset, snappedLeftInset, snappedRightInset, snappedTopInset, snapPosition, snapPositionX, snapPositionY, snapSize, snapSizeX, snapSizeY, snapSpace, snapSpaceX, snapSpaceY, snapToPixelProperty, widthProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Parent

          +getChildren, getChildrenUnmodifiable, getManagedChildren, getStylesheets, isNeedsLayout, layout, lookup, needsLayoutProperty, requestLayout, requestParentLayout, setNeedsLayout, updateBounds
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Node

          +accessibleHelpProperty, accessibleRoleDescriptionProperty, accessibleRoleProperty, accessibleTextProperty, addEventFilter, addEventHandler, applyCss, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen, contains, contains, cursorProperty, depthTestProperty, disabledProperty, disableProperty, effectiveNodeOrientationProperty, effectProperty, eventDispatcherProperty, fireEvent, focusedProperty, focusTraversableProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInitialCursor, getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY, getLocalToParentTransform, getLocalToSceneTransform, getNodeOrientation, getOnContextMenuRequested, getOnDragDetected, getOnDragDone, getOnDragDropped, getOnDragEntered, getOnDragExited, getOnDragOver, getOnInputMethodTextChanged, getOnKeyPressed, getOnKeyReleased, getOnKeyTyped, getOnMouseClicked, getOnMouseDragEntered, getOnMouseDragExited, getOnMouseDragged, getOnMouseDragOver, getOnMouseDragReleased, getOnMouseEntered, getOnMouseExited, getOnMouseMoved, getOnMousePressed, getOnMouseReleased, getOnRotate, getOnRotationFinished, getOnRotationStarted, getOnScroll, getOnScrollFinished, getOnScrollStarted, getOnSwipeDown, getOnSwipeLeft, getOnSwipeRight, getOnSwipeUp, getOnTouchMoved, getOnTouchPressed, getOnTouchReleased, getOnTouchStationary, getOnZoom, getOnZoomFinished, getOnZoomStarted, getOpacity, getParent, getProperties, getPseudoClassStates, getRotate, getRotationAxis, getScaleX, getScaleY, getScaleZ, getScene, getStyle, getStyleableParent, getStyleClass, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getTypeSelector, getUserData, getViewOrder, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, isVisible, layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent, localToParent, localToParent, localToParent, localToParent, localToParentTransformProperty, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToSceneTransformProperty, localToScreen, localToScreen, localToScreen, localToScreen, localToScreen, lookupAll, managedProperty, mouseTransparentProperty, nodeOrientationProperty, notifyAccessibleAttributeChanged, onContextMenuRequestedProperty, onDragDetectedProperty, onDragDoneProperty, onDragDroppedProperty, onDragEnteredProperty, onDragExitedProperty, onDragOverProperty, onInputMethodTextChangedProperty, onKeyPressedProperty, onKeyReleasedProperty, onKeyTypedProperty, onMouseClickedProperty, onMouseDragEnteredProperty, onMouseDragExitedProperty, onMouseDraggedProperty, onMouseDragOverProperty, onMouseDragReleasedProperty, onMouseEnteredProperty, onMouseExitedProperty, onMouseMovedProperty, onMousePressedProperty, onMouseReleasedProperty, onRotateProperty, onRotationFinishedProperty, onRotationStartedProperty, onScrollFinishedProperty, onScrollProperty, onScrollStartedProperty, onSwipeDownProperty, onSwipeLeftProperty, onSwipeRightProperty, onSwipeUpProperty, onTouchMovedProperty, onTouchPressedProperty, onTouchReleasedProperty, onTouchStationaryProperty, onZoomFinishedProperty, onZoomProperty, onZoomStartedProperty, opacityProperty, parentProperty, parentToLocal, parentToLocal, parentToLocal, parentToLocal, parentToLocal, pickOnBoundsProperty, pressedProperty, pseudoClassStateChanged, relocate, removeEventFilter, removeEventHandler, requestFocus, resizeRelocate, rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty, scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, screenToLocal, screenToLocal, screenToLocal, setAccessibleHelp, setAccessibleRole, setAccessibleRoleDescription, setAccessibleText, setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest, setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler, setFocused, setFocusTraversable, setHover, setId, setInputMethodRequests, setLayoutX, setLayoutY, setManaged, setMouseTransparent, setNodeOrientation, setOnContextMenuRequested, setOnDragDetected, setOnDragDone, setOnDragDropped, setOnDragEntered, setOnDragExited, setOnDragOver, setOnInputMethodTextChanged, setOnKeyPressed, setOnKeyReleased, setOnKeyTyped, setOnMouseClicked, setOnMouseDragEntered, setOnMouseDragExited, setOnMouseDragged, setOnMouseDragOver, setOnMouseDragReleased, setOnMouseEntered, setOnMouseExited, setOnMouseMoved, setOnMousePressed, setOnMouseReleased, setOnRotate, setOnRotationFinished, setOnRotationStarted, setOnScroll, setOnScrollFinished, setOnScrollStarted, setOnSwipeDown, setOnSwipeLeft, setOnSwipeRight, setOnSwipeUp, setOnTouchMoved, setOnTouchPressed, setOnTouchReleased, setOnTouchStationary, setOnZoom, setOnZoomFinished, setOnZoomStarted, setOpacity, setPickOnBounds, setPressed, setRotate, setRotationAxis, setScaleX, setScaleY, setScaleZ, setStyle, setTranslateX, setTranslateY, setTranslateZ, setUserData, setViewOrder, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, translateXProperty, translateYProperty, translateZProperty, usesMirroring, viewOrderProperty, visibleProperty
        • +
        + +
          +
        • + + +

          Methods inherited from interface javafx.css.Styleable

          +getStyleableNode
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          DEFAULT_GRAPHIC_SCALE_FACTOR

          +
          public static final double DEFAULT_GRAPHIC_SCALE_FACTOR
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          graphicScaleProperty

          +
          private final javafx.beans.property.DoubleProperty graphicScaleProperty
          +
        • +
        + + + +
          +
        • +

          graphicScaleFactorProperty

          +
          private final javafx.beans.property.DoubleProperty graphicScaleFactorProperty
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          UnfocusedButton

          +
          public UnfocusedButton()
          +
          Creates an UnfocusedButton with an empty string as label
          +
        • +
        + + + +
          +
        • +

          UnfocusedButton

          +
          public UnfocusedButton​(javafx.scene.Node graphic)
          +
        • +
        + + + +
          +
        • +

          UnfocusedButton

          +
          public UnfocusedButton​(String text,
          +                       javafx.scene.Node graphic)
          +
          Creates an UnfocusedButton with a specific string and an icon as label
          +
          +
          Parameters:
          +
          text - Text for the label of this button
          +
          graphic - Icon for the label of this button
          +
          +
        • +
        + + + +
          +
        • +

          UnfocusedButton

          +
          public UnfocusedButton​(String text)
          +
          Creates an UnfocusedButton with a specific string as label
          +
          +
          Parameters:
          +
          text - Text for the label of this button
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          initShape

          +
          private void initShape()
          +
          Disables the focus for this button and sets rectangle without rounded corners as basic form for this button.
          +
        • +
        + + + +
          +
        • +

          observeGraphicScaling

          +
          private void observeGraphicScaling()
          +
        • +
        + + + +
          +
        • +

          bindScaleProperty

          +
          private void bindScaleProperty​(javafx.beans.value.ObservableValue<? extends Number> observable,
          +                               Number oldValue,
          +                               Number newValue)
          +
        • +
        + + + +
          +
        • +

          setGraphicScaleFactor

          +
          public void setGraphicScaleFactor​(Double factor)
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controls/ValueButton.html b/doc/0.1.4/en_private/bitchanger/gui/controls/ValueButton.html new file mode 100644 index 0000000..4bc9b03 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controls/ValueButton.html @@ -0,0 +1,628 @@ + + + + + +ValueButton + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class ValueButton

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • javafx.scene.Node
      • +
      • +
          +
        • javafx.scene.Parent
        • +
        • +
            +
          • javafx.scene.layout.Region
          • +
          • +
              +
            • javafx.scene.control.Control
            • +
            • +
                +
              • javafx.scene.control.Labeled
              • +
              • + +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      javafx.css.Styleable, javafx.event.EventTarget, javafx.scene.control.Skinnable
      +
      +
      +
      public class ValueButton
      +extends UnfocusedButton
      +
      UnfocusedButton with an extra Property to adjust the base. + If the value, that gets represented by this button, is not available for the chosen base, + this button disables itself. If the base is changing and the value agrees to it, + this button gets activated automatically.
      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + +
        Fields 
        Modifier and TypeFieldDescription
        private javafx.beans.property.IntegerPropertybaseProperty +
        Property that is used to adjust the base of the current numeral system
        +
        + +
          +
        • + + +

          Fields inherited from class javafx.scene.layout.Region

          +USE_COMPUTED_SIZE, USE_PREF_SIZE
        • +
        +
          +
        • + + +

          Fields inherited from class javafx.scene.Node

          +BASELINE_OFFSET_SAME_AS_HEIGHT
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + + + + + + + + + +
        Constructors 
        ConstructorDescription
        ValueButton() +
        Creates a ValueButton with an empty string as caption
        +
        ValueButton​(String text) +
        Creates a ValueButton with a specific string as caption
        +
        ValueButton​(String text, + javafx.scene.Node graphic) +
        Creates a ValueButton with a specific string and an icon as caption
        +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethodDescription
        javafx.beans.property.IntegerPropertygetBaseProperty() +
        Returns the value of the baseProperty
        +
        private voidinit() +
        Sets listener to activate and disable this button + by the selected base
        +
        voidsetBase​(int base) +
        Sets the value of the base
        +
        private voidsetBaseListener() +
        Checks the baseProperty and activates or disables this button if the text + agrees or disagrees to the new value of the baseProperty
        +
        private voidsetTextListener() +
        Checks the textProperty and activates or disables this button if the new text + agrees or disagrees to the baseProperty
        +
        + +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Button

          +cancelButtonProperty, createDefaultSkin, defaultButtonProperty, fire, isCancelButton, isDefaultButton, setCancelButton, setDefaultButton
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.ButtonBase

          +arm, armedProperty, disarm, executeAccessibleAction, getOnAction, isArmed, onActionProperty, setOnAction
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Labeled

          +alignmentProperty, contentDisplayProperty, ellipsisStringProperty, fontProperty, getAlignment, getClassCssMetaData, getContentBias, getContentDisplay, getControlCssMetaData, getEllipsisString, getFont, getGraphic, getGraphicTextGap, getInitialAlignment, getLabelPadding, getLineSpacing, getText, getTextAlignment, getTextFill, getTextOverrun, graphicProperty, graphicTextGapProperty, isMnemonicParsing, isUnderline, isWrapText, labelPaddingProperty, lineSpacingProperty, mnemonicParsingProperty, setAlignment, setContentDisplay, setEllipsisString, setFont, setGraphic, setGraphicTextGap, setLineSpacing, setMnemonicParsing, setText, setTextAlignment, setTextFill, setTextOverrun, setUnderline, setWrapText, textAlignmentProperty, textFillProperty, textOverrunProperty, textProperty, toString, underlineProperty, wrapTextProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Control

          +computeMaxHeight, computeMaxWidth, computeMinHeight, computeMinWidth, computePrefHeight, computePrefWidth, contextMenuProperty, getBaselineOffset, getContextMenu, getCssMetaData, getInitialFocusTraversable, getSkin, getTooltip, isResizable, layoutChildren, queryAccessibleAttribute, setContextMenu, setSkin, setTooltip, skinProperty, tooltipProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.layout.Region

          +backgroundProperty, borderProperty, cacheShapeProperty, centerShapeProperty, getBackground, getBorder, getHeight, getInsets, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getOpaqueInsets, getPadding, getPrefHeight, getPrefWidth, getShape, getUserAgentStylesheet, getWidth, heightProperty, insetsProperty, isCacheShape, isCenterShape, isScaleShape, isSnapToPixel, layoutInArea, layoutInArea, layoutInArea, layoutInArea, maxHeight, maxHeightProperty, maxWidth, maxWidthProperty, minHeight, minHeightProperty, minWidth, minWidthProperty, opaqueInsetsProperty, paddingProperty, positionInArea, positionInArea, prefHeight, prefHeightProperty, prefWidth, prefWidthProperty, resize, scaleShapeProperty, setBackground, setBorder, setCacheShape, setCenterShape, setHeight, setMaxHeight, setMaxSize, setMaxWidth, setMinHeight, setMinSize, setMinWidth, setOpaqueInsets, setPadding, setPrefHeight, setPrefSize, setPrefWidth, setScaleShape, setShape, setSnapToPixel, setWidth, shapeProperty, snappedBottomInset, snappedLeftInset, snappedRightInset, snappedTopInset, snapPosition, snapPositionX, snapPositionY, snapSize, snapSizeX, snapSizeY, snapSpace, snapSpaceX, snapSpaceY, snapToPixelProperty, widthProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Parent

          +getChildren, getChildrenUnmodifiable, getManagedChildren, getStylesheets, isNeedsLayout, layout, lookup, needsLayoutProperty, requestLayout, requestParentLayout, setNeedsLayout, updateBounds
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Node

          +accessibleHelpProperty, accessibleRoleDescriptionProperty, accessibleRoleProperty, accessibleTextProperty, addEventFilter, addEventHandler, applyCss, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen, contains, contains, cursorProperty, depthTestProperty, disabledProperty, disableProperty, effectiveNodeOrientationProperty, effectProperty, eventDispatcherProperty, fireEvent, focusedProperty, focusTraversableProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInitialCursor, getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY, getLocalToParentTransform, getLocalToSceneTransform, getNodeOrientation, getOnContextMenuRequested, getOnDragDetected, getOnDragDone, getOnDragDropped, getOnDragEntered, getOnDragExited, getOnDragOver, getOnInputMethodTextChanged, getOnKeyPressed, getOnKeyReleased, getOnKeyTyped, getOnMouseClicked, getOnMouseDragEntered, getOnMouseDragExited, getOnMouseDragged, getOnMouseDragOver, getOnMouseDragReleased, getOnMouseEntered, getOnMouseExited, getOnMouseMoved, getOnMousePressed, getOnMouseReleased, getOnRotate, getOnRotationFinished, getOnRotationStarted, getOnScroll, getOnScrollFinished, getOnScrollStarted, getOnSwipeDown, getOnSwipeLeft, getOnSwipeRight, getOnSwipeUp, getOnTouchMoved, getOnTouchPressed, getOnTouchReleased, getOnTouchStationary, getOnZoom, getOnZoomFinished, getOnZoomStarted, getOpacity, getParent, getProperties, getPseudoClassStates, getRotate, getRotationAxis, getScaleX, getScaleY, getScaleZ, getScene, getStyle, getStyleableParent, getStyleClass, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getTypeSelector, getUserData, getViewOrder, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, isVisible, layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent, localToParent, localToParent, localToParent, localToParent, localToParentTransformProperty, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToSceneTransformProperty, localToScreen, localToScreen, localToScreen, localToScreen, localToScreen, lookupAll, managedProperty, mouseTransparentProperty, nodeOrientationProperty, notifyAccessibleAttributeChanged, onContextMenuRequestedProperty, onDragDetectedProperty, onDragDoneProperty, onDragDroppedProperty, onDragEnteredProperty, onDragExitedProperty, onDragOverProperty, onInputMethodTextChangedProperty, onKeyPressedProperty, onKeyReleasedProperty, onKeyTypedProperty, onMouseClickedProperty, onMouseDragEnteredProperty, onMouseDragExitedProperty, onMouseDraggedProperty, onMouseDragOverProperty, onMouseDragReleasedProperty, onMouseEnteredProperty, onMouseExitedProperty, onMouseMovedProperty, onMousePressedProperty, onMouseReleasedProperty, onRotateProperty, onRotationFinishedProperty, onRotationStartedProperty, onScrollFinishedProperty, onScrollProperty, onScrollStartedProperty, onSwipeDownProperty, onSwipeLeftProperty, onSwipeRightProperty, onSwipeUpProperty, onTouchMovedProperty, onTouchPressedProperty, onTouchReleasedProperty, onTouchStationaryProperty, onZoomFinishedProperty, onZoomProperty, onZoomStartedProperty, opacityProperty, parentProperty, parentToLocal, parentToLocal, parentToLocal, parentToLocal, parentToLocal, pickOnBoundsProperty, pressedProperty, pseudoClassStateChanged, relocate, removeEventFilter, removeEventHandler, requestFocus, resizeRelocate, rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty, scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, screenToLocal, screenToLocal, screenToLocal, setAccessibleHelp, setAccessibleRole, setAccessibleRoleDescription, setAccessibleText, setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest, setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler, setFocused, setFocusTraversable, setHover, setId, setInputMethodRequests, setLayoutX, setLayoutY, setManaged, setMouseTransparent, setNodeOrientation, setOnContextMenuRequested, setOnDragDetected, setOnDragDone, setOnDragDropped, setOnDragEntered, setOnDragExited, setOnDragOver, setOnInputMethodTextChanged, setOnKeyPressed, setOnKeyReleased, setOnKeyTyped, setOnMouseClicked, setOnMouseDragEntered, setOnMouseDragExited, setOnMouseDragged, setOnMouseDragOver, setOnMouseDragReleased, setOnMouseEntered, setOnMouseExited, setOnMouseMoved, setOnMousePressed, setOnMouseReleased, setOnRotate, setOnRotationFinished, setOnRotationStarted, setOnScroll, setOnScrollFinished, setOnScrollStarted, setOnSwipeDown, setOnSwipeLeft, setOnSwipeRight, setOnSwipeUp, setOnTouchMoved, setOnTouchPressed, setOnTouchReleased, setOnTouchStationary, setOnZoom, setOnZoomFinished, setOnZoomStarted, setOpacity, setPickOnBounds, setPressed, setRotate, setRotationAxis, setScaleX, setScaleY, setScaleZ, setStyle, setTranslateX, setTranslateY, setTranslateZ, setUserData, setViewOrder, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, translateXProperty, translateYProperty, translateZProperty, usesMirroring, viewOrderProperty, visibleProperty
        • +
        + +
          +
        • + + +

          Methods inherited from interface javafx.css.Styleable

          +getStyleableNode
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          baseProperty

          +
          private final javafx.beans.property.IntegerProperty baseProperty
          +
          Property that is used to adjust the base of the current numeral system
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ValueButton

          +
          public ValueButton()
          +
          Creates a ValueButton with an empty string as caption
          +
        • +
        + + + +
          +
        • +

          ValueButton

          +
          public ValueButton​(String text,
          +                   javafx.scene.Node graphic)
          +
          Creates a ValueButton with a specific string and an icon as caption
          +
          +
          Parameters:
          +
          text - Text for the caption if this button
          +
          graphic - Icon for the caption if this button
          +
          +
        • +
        + + + +
          +
        • +

          ValueButton

          +
          public ValueButton​(String text)
          +
          Creates a ValueButton with a specific string as caption
          +
          +
          Parameters:
          +
          text - Text for the caption of this button
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          setBase

          +
          public void setBase​(int base)
          +
          Sets the value of the base
          +
          +
          Parameters:
          +
          base - new base
          +
          +
        • +
        + + + +
          +
        • +

          getBaseProperty

          +
          public javafx.beans.property.IntegerProperty getBaseProperty()
          +
          Returns the value of the baseProperty
          +
          +
          Returns:
          +
          baseProperty of this ValueButton
          +
          +
        • +
        + + + + + + + +
          +
        • +

          setTextListener

          +
          private void setTextListener()
          +
          Checks the textProperty and activates or disables this button if the new text + agrees or disagrees to the baseProperty
          +
        • +
        + + + +
          +
        • +

          setBaseListener

          +
          private void setBaseListener()
          +
          Checks the baseProperty and activates or disables this button if the text + agrees or disagrees to the new value of the baseProperty
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controls/ValueField.html b/doc/0.1.4/en_private/bitchanger/gui/controls/ValueField.html new file mode 100644 index 0000000..1d7b27c --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controls/ValueField.html @@ -0,0 +1,744 @@ + + + + + +ValueField + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class ValueField

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • javafx.scene.Node
      • +
      • +
          +
        • javafx.scene.Parent
        • +
        • +
            +
          • javafx.scene.layout.Region
          • +
          • +
              +
            • javafx.scene.control.Control
            • +
            • +
                +
              • javafx.scene.control.TextInputControl
              • +
              • +
                  +
                • javafx.scene.control.TextField
                • +
                • +
                    +
                  • bitchanger.gui.controls.ValueField
                  • +
                  +
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      javafx.css.Styleable, javafx.event.EventTarget, javafx.scene.control.Skinnable
      +
      +
      +
      public class ValueField
      +extends javafx.scene.control.TextField
      +
      Text field in which a number of a certain numeral system can be entered. + Only characters that are available in this selected numeral system can be entered. + The only exception is the space, that can be used as thousands separator for example. + The current base gets set by the baseProperty. + The basic form is a rectangle without rounded corners. + +

      + As aditional function the input is split into blocks, if the chosen numeral system is the binary system. +

      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Nested Class Summary

        +
          +
        • + + +

          Nested classes/interfaces inherited from class javafx.scene.control.TextInputControl

          +javafx.scene.control.TextInputControl.Content
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeFieldDescription
        private javafx.beans.property.IntegerPropertybaseProperty +
        Property for the base of the numeral system
        +
        private intlastCaretPosition +
        Auxiliary variable for the last known position in the text field
        +
        +
          +
        • + + +

          Fields inherited from class javafx.scene.control.TextField

          +DEFAULT_PREF_COLUMN_COUNT
        • +
        +
          +
        • + + +

          Fields inherited from class javafx.scene.layout.Region

          +USE_COMPUTED_SIZE, USE_PREF_SIZE
        • +
        +
          +
        • + + +

          Fields inherited from class javafx.scene.Node

          +BASELINE_OFFSET_SAME_AS_HEIGHT
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + + + + + + + + + + + + + +
        Constructors 
        ConstructorDescription
        ValueField() +
        Creates a new ValueField with empty text and the base 10
        +
        ValueField​(int base) +
        Creates a new ValueFiled with an empty text and the committed base
        +
        ValueField​(String text) +
        Creates a new ValueField that contains the committed text and the base 10
        +
        ValueField​(String text, + int base) +
        Creates a new ValueField that contains the committed text and the committed base
        +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethodDescription
        private voidcheckText​(javafx.beans.value.ObservableValue<? extends String> observable, + String oldValue, + String newValue) +
        Checks if the entered text agree to the base and resets the input if there was entered an illegal character.
        +
        private voidfocuse​(javafx.beans.value.ObservableValue<? extends Boolean> observable, + Boolean oldValue, + Boolean isFocused) +
        Removes the indicator for the cut decimal places and resets the CaretPosition to the last known value.
        +
        intgetBase() +
        Returns the value of baseProperty
        +
        javafx.beans.property.IntegerPropertygetBaseProperty() +
        Returns the baseProperty of this ValueField
        +
        private booleanhasSelection() +
        Checks if there is a text selection in this ValueField
        +
        private voidobserveCommaProperty() +
        Monitors the CommaProperty from Preferences and adjusts the comma if the number is changing
        +
        voidsetBase​(int base) +
        Sets the value of baseProperty
        +
        voidstoreCaretPosition​(javafx.beans.value.ObservableValue<? extends Number> observable, + Number oldValue, + Number newValue) +
        Stores the last known CaretPosition to reset it.
        +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.TextField

          +alignmentProperty, createDefaultSkin, getAlignment, getCharacters, getClassCssMetaData, getControlCssMetaData, getOnAction, getPrefColumnCount, onActionProperty, prefColumnCountProperty, setAlignment, setOnAction, setPrefColumnCount
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.TextInputControl

          +anchorProperty, appendText, backward, cancelEdit, caretPositionProperty, clear, commitValue, copy, cut, deleteNextChar, deletePreviousChar, deleteText, deleteText, deselect, editableProperty, end, endOfNextWord, executeAccessibleAction, extendSelection, fontProperty, forward, getAnchor, getCaretPosition, getContent, getFont, getLength, getPromptText, getSelectedText, getSelection, getText, getText, getTextFormatter, home, insertText, isEditable, isRedoable, isUndoable, lengthProperty, nextWord, paste, positionCaret, previousWord, promptTextProperty, queryAccessibleAttribute, redo, redoableProperty, replaceSelection, replaceText, replaceText, selectAll, selectBackward, selectedTextProperty, selectEnd, selectEndOfNextWord, selectForward, selectHome, selectionProperty, selectNextWord, selectPositionCaret, selectPreviousWord, selectRange, setEditable, setFont, setPromptText, setText, setTextFormatter, textFormatterProperty, textProperty, undo, undoableProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Control

          +computeMaxHeight, computeMaxWidth, computeMinHeight, computeMinWidth, computePrefHeight, computePrefWidth, contextMenuProperty, getBaselineOffset, getContextMenu, getCssMetaData, getInitialFocusTraversable, getSkin, getTooltip, isResizable, layoutChildren, setContextMenu, setSkin, setTooltip, skinProperty, tooltipProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.layout.Region

          +backgroundProperty, borderProperty, cacheShapeProperty, centerShapeProperty, getBackground, getBorder, getHeight, getInsets, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getOpaqueInsets, getPadding, getPrefHeight, getPrefWidth, getShape, getUserAgentStylesheet, getWidth, heightProperty, insetsProperty, isCacheShape, isCenterShape, isScaleShape, isSnapToPixel, layoutInArea, layoutInArea, layoutInArea, layoutInArea, maxHeight, maxHeightProperty, maxWidth, maxWidthProperty, minHeight, minHeightProperty, minWidth, minWidthProperty, opaqueInsetsProperty, paddingProperty, positionInArea, positionInArea, prefHeight, prefHeightProperty, prefWidth, prefWidthProperty, resize, scaleShapeProperty, setBackground, setBorder, setCacheShape, setCenterShape, setHeight, setMaxHeight, setMaxSize, setMaxWidth, setMinHeight, setMinSize, setMinWidth, setOpaqueInsets, setPadding, setPrefHeight, setPrefSize, setPrefWidth, setScaleShape, setShape, setSnapToPixel, setWidth, shapeProperty, snappedBottomInset, snappedLeftInset, snappedRightInset, snappedTopInset, snapPosition, snapPositionX, snapPositionY, snapSize, snapSizeX, snapSizeY, snapSpace, snapSpaceX, snapSpaceY, snapToPixelProperty, widthProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Parent

          +getChildren, getChildrenUnmodifiable, getManagedChildren, getStylesheets, isNeedsLayout, layout, lookup, needsLayoutProperty, requestLayout, requestParentLayout, setNeedsLayout, updateBounds
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Node

          +accessibleHelpProperty, accessibleRoleDescriptionProperty, accessibleRoleProperty, accessibleTextProperty, addEventFilter, addEventHandler, applyCss, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen, contains, contains, cursorProperty, depthTestProperty, disabledProperty, disableProperty, effectiveNodeOrientationProperty, effectProperty, eventDispatcherProperty, fireEvent, focusedProperty, focusTraversableProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getContentBias, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInitialCursor, getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY, getLocalToParentTransform, getLocalToSceneTransform, getNodeOrientation, getOnContextMenuRequested, getOnDragDetected, getOnDragDone, getOnDragDropped, getOnDragEntered, getOnDragExited, getOnDragOver, getOnInputMethodTextChanged, getOnKeyPressed, getOnKeyReleased, getOnKeyTyped, getOnMouseClicked, getOnMouseDragEntered, getOnMouseDragExited, getOnMouseDragged, getOnMouseDragOver, getOnMouseDragReleased, getOnMouseEntered, getOnMouseExited, getOnMouseMoved, getOnMousePressed, getOnMouseReleased, getOnRotate, getOnRotationFinished, getOnRotationStarted, getOnScroll, getOnScrollFinished, getOnScrollStarted, getOnSwipeDown, getOnSwipeLeft, getOnSwipeRight, getOnSwipeUp, getOnTouchMoved, getOnTouchPressed, getOnTouchReleased, getOnTouchStationary, getOnZoom, getOnZoomFinished, getOnZoomStarted, getOpacity, getParent, getProperties, getPseudoClassStates, getRotate, getRotationAxis, getScaleX, getScaleY, getScaleZ, getScene, getStyle, getStyleableParent, getStyleClass, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getTypeSelector, getUserData, getViewOrder, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, isVisible, layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent, localToParent, localToParent, localToParent, localToParent, localToParentTransformProperty, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToSceneTransformProperty, localToScreen, localToScreen, localToScreen, localToScreen, localToScreen, lookupAll, managedProperty, mouseTransparentProperty, nodeOrientationProperty, notifyAccessibleAttributeChanged, onContextMenuRequestedProperty, onDragDetectedProperty, onDragDoneProperty, onDragDroppedProperty, onDragEnteredProperty, onDragExitedProperty, onDragOverProperty, onInputMethodTextChangedProperty, onKeyPressedProperty, onKeyReleasedProperty, onKeyTypedProperty, onMouseClickedProperty, onMouseDragEnteredProperty, onMouseDragExitedProperty, onMouseDraggedProperty, onMouseDragOverProperty, onMouseDragReleasedProperty, onMouseEnteredProperty, onMouseExitedProperty, onMouseMovedProperty, onMousePressedProperty, onMouseReleasedProperty, onRotateProperty, onRotationFinishedProperty, onRotationStartedProperty, onScrollFinishedProperty, onScrollProperty, onScrollStartedProperty, onSwipeDownProperty, onSwipeLeftProperty, onSwipeRightProperty, onSwipeUpProperty, onTouchMovedProperty, onTouchPressedProperty, onTouchReleasedProperty, onTouchStationaryProperty, onZoomFinishedProperty, onZoomProperty, onZoomStartedProperty, opacityProperty, parentProperty, parentToLocal, parentToLocal, parentToLocal, parentToLocal, parentToLocal, pickOnBoundsProperty, pressedProperty, pseudoClassStateChanged, relocate, removeEventFilter, removeEventHandler, requestFocus, resizeRelocate, rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty, scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, screenToLocal, screenToLocal, screenToLocal, setAccessibleHelp, setAccessibleRole, setAccessibleRoleDescription, setAccessibleText, setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest, setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler, setFocused, setFocusTraversable, setHover, setId, setInputMethodRequests, setLayoutX, setLayoutY, setManaged, setMouseTransparent, setNodeOrientation, setOnContextMenuRequested, setOnDragDetected, setOnDragDone, setOnDragDropped, setOnDragEntered, setOnDragExited, setOnDragOver, setOnInputMethodTextChanged, setOnKeyPressed, setOnKeyReleased, setOnKeyTyped, setOnMouseClicked, setOnMouseDragEntered, setOnMouseDragExited, setOnMouseDragged, setOnMouseDragOver, setOnMouseDragReleased, setOnMouseEntered, setOnMouseExited, setOnMouseMoved, setOnMousePressed, setOnMouseReleased, setOnRotate, setOnRotationFinished, setOnRotationStarted, setOnScroll, setOnScrollFinished, setOnScrollStarted, setOnSwipeDown, setOnSwipeLeft, setOnSwipeRight, setOnSwipeUp, setOnTouchMoved, setOnTouchPressed, setOnTouchReleased, setOnTouchStationary, setOnZoom, setOnZoomFinished, setOnZoomStarted, setOpacity, setPickOnBounds, setPressed, setRotate, setRotationAxis, setScaleX, setScaleY, setScaleZ, setStyle, setTranslateX, setTranslateY, setTranslateZ, setUserData, setViewOrder, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, toString, translateXProperty, translateYProperty, translateZProperty, usesMirroring, viewOrderProperty, visibleProperty
        • +
        + +
          +
        • + + +

          Methods inherited from interface javafx.css.Styleable

          +getStyleableNode
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          baseProperty

          +
          private final javafx.beans.property.IntegerProperty baseProperty
          +
          Property for the base of the numeral system
          +
        • +
        + + + +
          +
        • +

          lastCaretPosition

          +
          private int lastCaretPosition
          +
          Auxiliary variable for the last known position in the text field
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ValueField

          +
          public ValueField()
          +
          Creates a new ValueField with empty text and the base 10
          +
        • +
        + + + +
          +
        • +

          ValueField

          +
          public ValueField​(String text)
          +
          Creates a new ValueField that contains the committed text and the base 10
          +
          +
          Parameters:
          +
          text - Text for this text field
          +
          +
        • +
        + + + +
          +
        • +

          ValueField

          +
          public ValueField​(int base)
          +
          Creates a new ValueFiled with an empty text and the committed base
          +
          +
          Parameters:
          +
          base - Value for baseProperty
          +
          +
        • +
        + + + +
          +
        • +

          ValueField

          +
          public ValueField​(String text,
          +                  int base)
          +
          Creates a new ValueField that contains the committed text and the committed base
          +
          +
          Parameters:
          +
          text - Text for this text field
          +
          base - Value for baseProperty
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          setBase

          +
          public void setBase​(int base)
          +
          Sets the value of baseProperty
          +
          +
          Parameters:
          +
          base - new base
          +
          +
        • +
        + + + + + + + +
          +
        • +

          getBaseProperty

          +
          public javafx.beans.property.IntegerProperty getBaseProperty()
          +
          Returns the baseProperty of this ValueField
          +
          +
          Returns:
          +
          baseProperty of this ValueFields
          +
          +
        • +
        + + + +
          +
        • +

          hasSelection

          +
          private boolean hasSelection()
          +
          Checks if there is a text selection in this ValueField
          +
          +
          Returns:
          +
          true, if a text part is selected, otherwise false
          +
          +
        • +
        + + + +
          +
        • +

          checkText

          +
          private void checkText​(javafx.beans.value.ObservableValue<? extends String> observable,
          +                       String oldValue,
          +                       String newValue)
          +
          Checks if the entered text agree to the base and resets the input if there was entered an illegal character. + Can be used as method reference for a ChangeListener.
          +
          +
          Parameters:
          +
          observable - ObservableValue, which value is changing
          +
          oldValue - old value
          +
          newValue - new value
          +
          +
        • +
        + + + +
          +
        • +

          storeCaretPosition

          +
          public void storeCaretPosition​(javafx.beans.value.ObservableValue<? extends Number> observable,
          +                               Number oldValue,
          +                               Number newValue)
          +
          Stores the last known CaretPosition to reset it. + Can be used as method reference for a ChangeListener.
          +
          +
          Parameters:
          +
          observable - ObservableValue, which value is changing
          +
          oldValue - old value
          +
          newValue - new value
          +
          +
        • +
        + + + +
          +
        • +

          focuse

          +
          private void focuse​(javafx.beans.value.ObservableValue<? extends Boolean> observable,
          +                    Boolean oldValue,
          +                    Boolean isFocused)
          +
          Removes the indicator for the cut decimal places and resets the CaretPosition to the last known value. + Can be used as method reference for a ChangeListener.
          +
          +
          Parameters:
          +
          observable - ObservableValue, which value is changing
          +
          oldValue - old value
          +
          isFocused - new value ?!?!
          +
          +
        • +
        + + + +
          +
        • +

          observeCommaProperty

          +
          private void observeCommaProperty()
          +
          Monitors the CommaProperty from Preferences and adjusts the comma if the number is changing
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controls/class-use/AlphaNumGrid.html b/doc/0.1.4/en_private/bitchanger/gui/controls/class-use/AlphaNumGrid.html new file mode 100644 index 0000000..0fc5791 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controls/class-use/AlphaNumGrid.html @@ -0,0 +1,217 @@ + + + + + +Uses of Class bitchanger.gui.controls.AlphaNumGrid + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controls.AlphaNumGrid

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controls/class-use/AlphaNumKeys.html b/doc/0.1.4/en_private/bitchanger/gui/controls/class-use/AlphaNumKeys.html new file mode 100644 index 0000000..2a94f7b --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controls/class-use/AlphaNumKeys.html @@ -0,0 +1,224 @@ + + + + + +Uses of Class bitchanger.gui.controls.AlphaNumKeys + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controls.AlphaNumKeys

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controls/class-use/BaseSpinner.html b/doc/0.1.4/en_private/bitchanger/gui/controls/class-use/BaseSpinner.html new file mode 100644 index 0000000..c502107 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controls/class-use/BaseSpinner.html @@ -0,0 +1,197 @@ + + + + + +Uses of Class bitchanger.gui.controls.BaseSpinner + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controls.BaseSpinner

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controls/class-use/BasicMenuBar.html b/doc/0.1.4/en_private/bitchanger/gui/controls/class-use/BasicMenuBar.html new file mode 100644 index 0000000..749dded --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controls/class-use/BasicMenuBar.html @@ -0,0 +1,274 @@ + + + + + +Uses of Class bitchanger.gui.controls.BasicMenuBar + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controls.BasicMenuBar

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controls/class-use/ConverterMenuBar.html b/doc/0.1.4/en_private/bitchanger/gui/controls/class-use/ConverterMenuBar.html new file mode 100644 index 0000000..b500202 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controls/class-use/ConverterMenuBar.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controls.ConverterMenuBar + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controls.ConverterMenuBar

    +
    +
    No usage of bitchanger.gui.controls.ConverterMenuBar
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controls/class-use/InformationDialog.InformationType.html b/doc/0.1.4/en_private/bitchanger/gui/controls/class-use/InformationDialog.InformationType.html new file mode 100644 index 0000000..a680981 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controls/class-use/InformationDialog.InformationType.html @@ -0,0 +1,218 @@ + + + + + +Uses of Class bitchanger.gui.controls.InformationDialog.InformationType + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controls.InformationDialog.InformationType

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controls/class-use/InformationDialog.html b/doc/0.1.4/en_private/bitchanger/gui/controls/class-use/InformationDialog.html new file mode 100644 index 0000000..bd793e1 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controls/class-use/InformationDialog.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controls.InformationDialog + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controls.InformationDialog

    +
    +
    No usage of bitchanger.gui.controls.InformationDialog
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controls/class-use/SVGIcon.html b/doc/0.1.4/en_private/bitchanger/gui/controls/class-use/SVGIcon.html new file mode 100644 index 0000000..537a689 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controls/class-use/SVGIcon.html @@ -0,0 +1,278 @@ + + + + + +Uses of Class bitchanger.gui.controls.SVGIcon + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controls.SVGIcon

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controls/class-use/UnfocusedButton.html b/doc/0.1.4/en_private/bitchanger/gui/controls/class-use/UnfocusedButton.html new file mode 100644 index 0000000..77c2290 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controls/class-use/UnfocusedButton.html @@ -0,0 +1,197 @@ + + + + + +Uses of Class bitchanger.gui.controls.UnfocusedButton + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controls.UnfocusedButton

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controls/class-use/ValueButton.html b/doc/0.1.4/en_private/bitchanger/gui/controls/class-use/ValueButton.html new file mode 100644 index 0000000..cd16311 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controls/class-use/ValueButton.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controls.ValueButton + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controls.ValueButton

    +
    +
    No usage of bitchanger.gui.controls.ValueButton
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controls/class-use/ValueField.html b/doc/0.1.4/en_private/bitchanger/gui/controls/class-use/ValueField.html new file mode 100644 index 0000000..5291785 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controls/class-use/ValueField.html @@ -0,0 +1,232 @@ + + + + + +Uses of Class bitchanger.gui.controls.ValueField + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controls.ValueField

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controls/package-summary.html b/doc/0.1.4/en_private/bitchanger/gui/controls/package-summary.html new file mode 100644 index 0000000..3e27794 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controls/package-summary.html @@ -0,0 +1,229 @@ + + + + + +bitchanger.gui.controls + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package bitchanger.gui.controls

    +
    +
    +
    + + +
    Allocates adjusted operating elements and functions for the user interface
    +
    + +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controls/package-tree.html b/doc/0.1.4/en_private/bitchanger/gui/controls/package-tree.html new file mode 100644 index 0000000..4d560f2 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controls/package-tree.html @@ -0,0 +1,252 @@ + + + + + +bitchanger.gui.controls Class Hierarchy + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package bitchanger.gui.controls

    +Package Hierarchies: + +
    +
    +
    +

    Class Hierarchy

    +
      +
    • java.lang.Object +
        +
      • bitchanger.gui.controls.AlphaNumKeys (implements bitchanger.gui.controller.Controllable)
      • +
      • javafx.scene.control.Dialog<R> (implements javafx.event.EventTarget) + +
      • +
      • javafx.scene.Node (implements javafx.event.EventTarget, javafx.css.Styleable) +
          +
        • javafx.scene.Parent +
            +
          • javafx.scene.layout.Region +
              +
            • javafx.scene.control.Control (implements javafx.scene.control.Skinnable) +
                +
              • javafx.scene.control.Labeled +
                  +
                • javafx.scene.control.ButtonBase + +
                • +
                +
              • +
              • javafx.scene.control.MenuBar + +
              • +
              • javafx.scene.control.Spinner<T> + +
              • +
              • javafx.scene.control.TextInputControl +
                  +
                • javafx.scene.control.TextField + +
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        • javafx.scene.shape.Shape +
            +
          • javafx.scene.shape.SVGPath +
              +
            • bitchanger.gui.controls.SVGIcon
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    +

    Enum Hierarchy

    + +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/controls/package-use.html b/doc/0.1.4/en_private/bitchanger/gui/controls/package-use.html new file mode 100644 index 0000000..7faaa38 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/controls/package-use.html @@ -0,0 +1,295 @@ + + + + + +Uses of Package bitchanger.gui.controls + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    bitchanger.gui.controls

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/package-summary.html b/doc/0.1.4/en_private/bitchanger/gui/package-summary.html new file mode 100644 index 0000000..09850c6 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/package-summary.html @@ -0,0 +1,148 @@ + + + + + +bitchanger.gui + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package bitchanger.gui

    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/package-tree.html b/doc/0.1.4/en_private/bitchanger/gui/package-tree.html new file mode 100644 index 0000000..1159b5a --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/package-tree.html @@ -0,0 +1,152 @@ + + + + + +bitchanger.gui Class Hierarchy + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package bitchanger.gui

    +Package Hierarchies: + +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/package-use.html b/doc/0.1.4/en_private/bitchanger/gui/package-use.html new file mode 100644 index 0000000..728b135 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/package-use.html @@ -0,0 +1,149 @@ + + + + + +Uses of Package bitchanger.gui + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    bitchanger.gui

    +
    +
    No usage of bitchanger.gui
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/views/AlphaNumGridView.ConstraintType.html b/doc/0.1.4/en_private/bitchanger/gui/views/AlphaNumGridView.ConstraintType.html new file mode 100644 index 0000000..b289f1c --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/views/AlphaNumGridView.ConstraintType.html @@ -0,0 +1,464 @@ + + + + + +AlphaNumGridView.ConstraintType + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Enum AlphaNumGridView.ConstraintType

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      + +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ConstraintType

          +
          private ConstraintType()
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          values

          +
          public static AlphaNumGridView.ConstraintType[] values()
          +
          Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
          +for (AlphaNumGridView.ConstraintType c : AlphaNumGridView.ConstraintType.values())
          +    System.out.println(c);
          +
          +
          +
          Returns:
          +
          an array containing the constants of this enum type, in the order they are declared
          +
          +
        • +
        + + + +
          +
        • +

          valueOf

          +
          public static AlphaNumGridView.ConstraintType valueOf​(String name)
          +
          Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
          +
          +
          Parameters:
          +
          name - the name of the enum constant to be returned.
          +
          Returns:
          +
          the enum constant with the specified name
          +
          Throws:
          +
          IllegalArgumentException - if this enum type has no constant with the specified name
          +
          NullPointerException - if the argument is null
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/views/AlphaNumGridView.html b/doc/0.1.4/en_private/bitchanger/gui/views/AlphaNumGridView.html new file mode 100644 index 0000000..851cc1e --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/views/AlphaNumGridView.html @@ -0,0 +1,1347 @@ + + + + + +AlphaNumGridView + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class AlphaNumGridView

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          tfKeys

          +
          public final String[] tfKeys
          +
        • +
        + + + +
          +
        • +

          clearBtnKey

          +
          public final String clearBtnKey
          +
        • +
        + + + +
          +
        • +

          backspaceBtnKey

          +
          public final String backspaceBtnKey
          +
        • +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          +
        • +

          alphaKeys

          +
          public final String[] alphaKeys
          +
        • +
        + + + +
          +
        • +

          numKeys

          +
          public final String[] numKeys
          +
        • +
        + + + +
          +
        • +

          labelTexts

          +
          public final String[] labelTexts
          +
        • +
        + + + +
          +
        • +

          setTFColumnSpan

          +
          protected boolean setTFColumnSpan
          +
        • +
        + + + +
          +
        • +

          useClearAndBackBtn

          +
          protected boolean useClearAndBackBtn
          +
        • +
        + + + +
          +
        • +

          tfMaxHeightProperty

          +
          protected final javafx.beans.property.DoubleProperty tfMaxHeightProperty
          +
        • +
        + + + +
          +
        • +

          tfMinHeightProperty

          +
          protected final javafx.beans.property.DoubleProperty tfMinHeightProperty
          +
        • +
        + + + +
          +
        • +

          btnMaxHeigthProperty

          +
          protected final javafx.beans.property.DoubleProperty btnMaxHeigthProperty
          +
        • +
        + + + +
          +
        • +

          btnMinHeigthProperty

          +
          protected final javafx.beans.property.DoubleProperty btnMinHeigthProperty
          +
        • +
        + + + +
          +
        • +

          btnMaxWidthProperty

          +
          protected final javafx.beans.property.DoubleProperty btnMaxWidthProperty
          +
        • +
        + + + +
          +
        • +

          btnMinWidthProperty

          +
          protected final javafx.beans.property.DoubleProperty btnMinWidthProperty
          +
        • +
        + + + +
          +
        • +

          whiteSpaceHeigthProperty

          +
          protected final javafx.beans.property.DoubleProperty whiteSpaceHeigthProperty
          +
        • +
        + + + +
          +
        • +

          firstColumnWidthProperty

          +
          protected final javafx.beans.property.DoubleProperty firstColumnWidthProperty
          +
        • +
        + + + +
          +
        • +

          paddingTopProperty

          +
          protected final javafx.beans.property.DoubleProperty paddingTopProperty
          +
        • +
        + + + +
          +
        • +

          paddingRigthProperty

          +
          protected final javafx.beans.property.DoubleProperty paddingRigthProperty
          +
        • +
        + + + +
          +
        • +

          paddingBottomProperty

          +
          protected final javafx.beans.property.DoubleProperty paddingBottomProperty
          +
        • +
        + + + +
          +
        • +

          paddingLeftProperty

          +
          protected final javafx.beans.property.DoubleProperty paddingLeftProperty
          +
        • +
        + + + +
          +
        • +

          btnSpacingProperty

          +
          protected final javafx.beans.property.DoubleProperty btnSpacingProperty
          +
        • +
        + + + +
          +
        • +

          hgapProperty

          +
          protected final javafx.beans.property.DoubleProperty hgapProperty
          +
        • +
        + + + +
          +
        • +

          vgapProperty

          +
          protected final javafx.beans.property.DoubleProperty vgapProperty
          +
        • +
        + + + +
          +
        • +

          firstTFRow

          +
          protected final int firstTFRow
          +
        • +
        + + + +
          +
        • +

          tfColumn

          +
          protected final int tfColumn
          +
        • +
        + + + +
          +
        • +

          firstLabelRow

          +
          protected final int firstLabelRow
          +
        • +
        + + + +
          +
        • +

          labelColumn

          +
          protected final int labelColumn
          +
        • +
        + + + +
          +
        • +

          firstKeyBtnRow

          +
          protected final int firstKeyBtnRow
          +
        • +
        + + + +
          +
        • +

          firstKeyBtnColumn

          +
          protected final int firstKeyBtnColumn
          +
        • +
        + + + +
          +
        • +

          center

          +
          protected final javafx.scene.layout.GridPane center
          +
        • +
        + + + + + + + + +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          AlphaNumGridView

          +
          public AlphaNumGridView​(int firstKeyBtnRow,
          +                        int firstKeyBtnColumn)
          +
        • +
        + + + +
          +
        • +

          AlphaNumGridView

          +
          public AlphaNumGridView​(String[] labelTexts,
          +                        String... tfKeys)
          +
        • +
        + + + +
          +
        • +

          AlphaNumGridView

          +
          public AlphaNumGridView​(int firstLabelRow,
          +                        int labelColumn,
          +                        int firstTFRow,
          +                        int tfColumn,
          +                        int firstKeyBtnRow,
          +                        int firstKeyBtnColumn,
          +                        String[] labelTexts,
          +                        String... tfKeys)
          +
        • +
        + + + +
          +
        • +

          AlphaNumGridView

          +
          public AlphaNumGridView​(int firstLabelRow,
          +                        int labelColumn,
          +                        int firstTFRow,
          +                        int tfColumn,
          +                        int firstKeyBtnRow,
          +                        int firstKeyBtnColumn,
          +                        String[] labelTexts,
          +                        String[] tfKeys,
          +                        double tfHeight,
          +                        double btnMaxSize,
          +                        double btnMinSize,
          +                        double whiteSpaceHeigth,
          +                        double firstColumnWidth,
          +                        double paddingTopRigthBottomLeft,
          +                        double spacing)
          +
        • +
        + + + +
          +
        • +

          AlphaNumGridView

          +
          public AlphaNumGridView​(int firstLabelRow,
          +                        int labelColumn,
          +                        int firstTFRow,
          +                        int tfColumn,
          +                        int firstKeyBtnRow,
          +                        int firstKeyBtnColumn,
          +                        String[] labelTexts,
          +                        String[] tfKeys,
          +                        double tfMaxHeight,
          +                        double tfMinHeight,
          +                        double btnMaxHeigth,
          +                        double btnMinHeigth,
          +                        double btnMaxWidth,
          +                        double btnMinWidth,
          +                        double whiteSpaceHeigth,
          +                        double firstColumnWidth,
          +                        double paddingTop,
          +                        double paddingRigth,
          +                        double paddingBottom,
          +                        double paddingLeft,
          +                        double btnSpacing,
          +                        double hgap,
          +                        double vgap)
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getMaxHeigth

          +
          public double getMaxHeigth()
          +
          Indicates the maximum height of the view
          +
          +
          Returns:
          +
          maximum height of the view
          +
          +
        • +
        + + + +
          +
        • +

          getMaxWidth

          +
          public double getMaxWidth()
          +
          Indicates the maximum width of the view
          +
          +
          Returns:
          +
          maximum width of the view
          +
          +
        • +
        + + + +
          +
        • +

          getMinHeigth

          +
          public double getMinHeigth()
          +
          Indicates the minimum height of the view
          +
          +
          Returns:
          +
          minimum height of the view
          +
          +
        • +
        + + + +
          +
        • +

          getMinWidth

          +
          public double getMinWidth()
          +
          Indicates the minimum width of the view
          +
          +
          Returns:
          +
          minimum width of the view
          +
          +
        • +
        + + + +
          +
        • +

          createScenegraph

          +
          protected void createScenegraph()
          +
          +
          Specified by:
          +
          createScenegraph in class ViewBase<javafx.scene.layout.BorderPane>
          +
          +
        • +
        + + + +
          +
        • +

          setRowConstraints

          +
          private void setRowConstraints()
          +
        • +
        + + + + + + + +
          +
        • +

          setColumnConstraints

          +
          private void setColumnConstraints()
          +
        • +
        + + + + + + + +
          +
        • +

          createTextFields

          +
          private void createTextFields()
          +
        • +
        + + + +
          +
        • +

          createLabels

          +
          private void createLabels()
          +
        • +
        + + + +
          +
        • +

          createButtonMatrix

          +
          private void createButtonMatrix()
          +
        • +
        + + + +
          +
        • +

          createButtons

          +
          private ArrayDeque<javafx.scene.control.Button> createButtons()
          +
        • +
        + + + +
          +
        • +

          formatButtons

          +
          private void formatButtons()
          +
        • +
        + + + +
          +
        • +

          bindProperties

          +
          private void bindProperties()
          +
        • +
        + + + +
          +
        • +

          updatePadding

          +
          private void updatePadding​(javafx.beans.value.ObservableValue<? extends Number> observable,
          +                           Number oldValue,
          +                           Number newValue)
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/views/CalculatorView.html b/doc/0.1.4/en_private/bitchanger/gui/views/CalculatorView.html new file mode 100644 index 0000000..ca4d7dc --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/views/CalculatorView.html @@ -0,0 +1,352 @@ + + + + + +CalculatorView + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class CalculatorView

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          CalculatorView

          +
          public CalculatorView()
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/views/Controllable.html b/doc/0.1.4/en_private/bitchanger/gui/views/Controllable.html new file mode 100644 index 0000000..bc27b48 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/views/Controllable.html @@ -0,0 +1,283 @@ + + + + + +Controllable + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface Controllable

    +
    +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTextFields

          +
          HashMap<String,​javafx.scene.control.TextField> getTextFields()
          +
        • +
        + + + +
          +
        • +

          getButtons

          +
          HashMap<String,​javafx.scene.control.Button> getButtons()
          +
        • +
        + + + +
          +
        • +

          getNodes

          +
          HashMap<String,​javafx.scene.Node> getNodes()
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +
    + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/views/ConverterView.html b/doc/0.1.4/en_private/bitchanger/gui/views/ConverterView.html new file mode 100644 index 0000000..f4bfdec --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/views/ConverterView.html @@ -0,0 +1,666 @@ + + + + + +ConverterView + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class ConverterView

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/views/IEEEView.html b/doc/0.1.4/en_private/bitchanger/gui/views/IEEEView.html new file mode 100644 index 0000000..c5dee07 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/views/IEEEView.html @@ -0,0 +1,456 @@ + + + + + +IEEEView + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class IEEEView

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/views/ViewBase.html b/doc/0.1.4/en_private/bitchanger/gui/views/ViewBase.html new file mode 100644 index 0000000..1bc53f2 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/views/ViewBase.html @@ -0,0 +1,641 @@ + + + + + +ViewBase + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class ViewBase<T extends javafx.scene.Parent>

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          scene

          +
          protected final javafx.scene.Scene scene
          +
        • +
        + + + +
          +
        • +

          root

          +
          protected final T extends javafx.scene.Parent root
          +
        • +
        + + + +
          +
        • +

          controller

          +
          protected Controller controller
          +
        • +
        + + + +
          +
        • +

          menubar

          +
          protected javafx.scene.control.MenuBar menubar
          +
        • +
        + + + +
          +
        • +

          tfMap

          +
          private final Map<String,​javafx.scene.control.TextField> tfMap
          +
        • +
        + + + +
          +
        • +

          btnMap

          +
          private final Map<String,​javafx.scene.control.Button> btnMap
          +
        • +
        + + + +
          +
        • +

          nodeMap

          +
          private final Map<String,​javafx.scene.Node> nodeMap
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + + + +
          +
        • +

          ViewBase

          +
          public ViewBase​(T root)
          +
        • +
        + + + + + +
          +
        • +

          ViewBase

          +
          public ViewBase​(T root,
          +                boolean buildScenegraph)
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getScene

          +
          public final javafx.scene.Scene getScene()
          +
          Returns the represented Scene
          +
          +
          Specified by:
          +
          getScene in interface Viewable
          +
          Returns:
          +
          from the view represented Scene
          +
          +
        • +
        + + + +
          +
        • +

          getTextFieldMap

          +
          public final Map<String,​javafx.scene.control.TextField> getTextFieldMap()
          +
          Returns a Map with all text fields of the controllable. Each text field is allocated to a unique keyword, + which is used to find the text field out of the map. +

          + Each keyword should have a useful connection to the use of the text field! +

          +
          +
          Specified by:
          +
          getTextFieldMap in interface Controllable
          +
          Returns:
          +
          Map, that contains all text fields of the controllable
          +
          +
        • +
        + + + +
          +
        • +

          getButtonMap

          +
          public final Map<String,​javafx.scene.control.Button> getButtonMap()
          +
          Returns a Map with all buttons of the controllable. Each button is allocated to a unique keyword, + which is used to find the button out of the map. +

          + Each Keyword should have a useful connection to the use of the button! +

          +
          +
          Specified by:
          +
          getButtonMap in interface Controllable
          +
          Returns:
          +
          Map, that contains all buttons of the controllable
          +
          +
        • +
        + + + +
          +
        • +

          getNodeMap

          +
          public final Map<String,​javafx.scene.Node> getNodeMap()
          +
          Returns a Map with all elements (Nodes) of the controllable, that are not buttons or text fields and are required in the controller. + Each element is allocated to a unique keyword, which is used to find the element out of the map. +

          + Each keyword should have a useful connection to the use of the elements! +

          +
          +
          Specified by:
          +
          getNodeMap in interface Controllable
          +
          Returns:
          +
          Map, which contains all elements of a controllable, that are not buttons or text fields and are required in the controller
          +
          +
        • +
        + + + + + +
          +
        • +

          setMenuBar

          +
          public <V extends javafx.scene.control.MenuBar> void setMenuBar​(V menubar)
          +
          Adds the given MenuBar to this View's scenegraph. Any existing MenuBar is removed from the + scenegraph and replaced. If the argument is null the only attempt is to remove the + already existing MenuBar from the scenegraph. + +

          + If root is an instance of BorderPane the MenuBar is placed in Top, + otherwise only the old MenuBar is removed. +

          +
          +
          Specified by:
          +
          setMenuBar in interface Viewable
          +
          Type Parameters:
          +
          V - runtime type of the given MenuBar
          +
          Parameters:
          +
          menubar - MenuBar to be used by this View, may be null to remove the current MenuBar
          +
          +
        • +
        + + + +
          +
        • +

          init

          +
          protected void init()
          +
        • +
        + + + +
          +
        • +

          buildScenegraph

          +
          protected void buildScenegraph()
          +
        • +
        + + + +
          +
        • +

          createScenegraph

          +
          protected abstract void createScenegraph()
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/views/Viewable.html b/doc/0.1.4/en_private/bitchanger/gui/views/Viewable.html new file mode 100644 index 0000000..21bca85 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/views/Viewable.html @@ -0,0 +1,452 @@ + + + + + +Viewable + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface Viewable

    +
    +
    +
    +
      +
    • +
      +
      All Superinterfaces:
      +
      Controllable
      +
      +
      +
      All Known Implementing Classes:
      +
      AlphaNumGridView, CalculatorView, ConverterView, IEEEView, ViewBase
      +
      +
      +
      public interface Viewable
      +extends Controllable
      +
      The interface Viewable defines the base for a view. +

      + A view is representable in a JavaFX window (javafx.stage.Stage). The view encapsulate a Scene, + which can be represented in a stage. +

      +

      + The scene graph is constructed by a view, the view only sets the layout not the functions. +

      +

      + A controller can be allocated to each view, to set functions to the operating elements in the scene graph. +

      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.0
      +
      Author:
      +
      Tim
      +
      See Also:
      +
      Controllable, +Controller
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          generateMenuBar

          +
          default BasicMenuBar generateMenuBar()
          +
        • +
        + + + + + + + +
          +
        • +

          getScene

          +
          javafx.scene.Scene getScene()
          +
          Returns the represented Scene
          +
          +
          Returns:
          +
          from the view represented Scene
          +
          +
        • +
        + + + +
          +
        • +

          getMaxHeigth

          +
          double getMaxHeigth()
          +
          Indicates the maximum height of the view
          +
          +
          Returns:
          +
          maximum height of the view
          +
          +
        • +
        + + + +
          +
        • +

          getMaxWidth

          +
          double getMaxWidth()
          +
          Indicates the maximum width of the view
          +
          +
          Returns:
          +
          maximum width of the view
          +
          +
        • +
        + + + +
          +
        • +

          getMinHeigth

          +
          double getMinHeigth()
          +
          Indicates the minimum height of the view
          +
          +
          Returns:
          +
          minimum height of the view
          +
          +
        • +
        + + + +
          +
        • +

          getMinWidth

          +
          double getMinWidth()
          +
          Indicates the minimum width of the view
          +
          +
          Returns:
          +
          minimum width of the view
          +
          +
        • +
        + + + + + +
          +
        • +

          setMenuBar

          +
          <T extends javafx.scene.control.MenuBar> void setMenuBar​(T menubar)
          +
          Adds the given MenuBar to this View's scenegraph. Any existing MenuBar is removed from the + scenegraph and replaced. If the argument is null the only attempt is to remove the + already existing MenuBar from the scenegraph.
          +
          +
          Type Parameters:
          +
          T - runtime type of the given MenuBar
          +
          Parameters:
          +
          menubar - MenuBar to be used by this View, may be null to remove the current MenuBar
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/views/class-use/AlphaNumGridView.ConstraintType.html b/doc/0.1.4/en_private/bitchanger/gui/views/class-use/AlphaNumGridView.ConstraintType.html new file mode 100644 index 0000000..394af51 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/views/class-use/AlphaNumGridView.ConstraintType.html @@ -0,0 +1,227 @@ + + + + + +Uses of Class bitchanger.gui.views.AlphaNumGridView.ConstraintType + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.views.AlphaNumGridView.ConstraintType

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/views/class-use/AlphaNumGridView.html b/doc/0.1.4/en_private/bitchanger/gui/views/class-use/AlphaNumGridView.html new file mode 100644 index 0000000..5d57c12 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/views/class-use/AlphaNumGridView.html @@ -0,0 +1,205 @@ + + + + + +Uses of Class bitchanger.gui.views.AlphaNumGridView + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.views.AlphaNumGridView

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/views/class-use/CalculatorView.html b/doc/0.1.4/en_private/bitchanger/gui/views/class-use/CalculatorView.html new file mode 100644 index 0000000..793769e --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/views/class-use/CalculatorView.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.views.CalculatorView + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.views.CalculatorView

    +
    +
    No usage of bitchanger.gui.views.CalculatorView
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/views/class-use/Controllable.html b/doc/0.1.4/en_private/bitchanger/gui/views/class-use/Controllable.html new file mode 100644 index 0000000..4b74fe0 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/views/class-use/Controllable.html @@ -0,0 +1,256 @@ + + + + + +Uses of Interface bitchanger.gui.views.Controllable + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    bitchanger.gui.views.Controllable

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/views/class-use/ConverterView.html b/doc/0.1.4/en_private/bitchanger/gui/views/class-use/ConverterView.html new file mode 100644 index 0000000..fb9e9eb --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/views/class-use/ConverterView.html @@ -0,0 +1,196 @@ + + + + + +Uses of Class bitchanger.gui.views.ConverterView + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.views.ConverterView

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/views/class-use/IEEEView.html b/doc/0.1.4/en_private/bitchanger/gui/views/class-use/IEEEView.html new file mode 100644 index 0000000..e63ef8c --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/views/class-use/IEEEView.html @@ -0,0 +1,199 @@ + + + + + +Uses of Class bitchanger.gui.views.IEEEView + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.views.IEEEView

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/views/class-use/ViewBase.html b/doc/0.1.4/en_private/bitchanger/gui/views/class-use/ViewBase.html new file mode 100644 index 0000000..fbc02c7 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/views/class-use/ViewBase.html @@ -0,0 +1,210 @@ + + + + + +Uses of Class bitchanger.gui.views.ViewBase + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.views.ViewBase

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/views/class-use/Viewable.html b/doc/0.1.4/en_private/bitchanger/gui/views/class-use/Viewable.html new file mode 100644 index 0000000..459c297 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/views/class-use/Viewable.html @@ -0,0 +1,395 @@ + + + + + +Uses of Interface bitchanger.gui.views.Viewable + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    bitchanger.gui.views.Viewable

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/views/package-summary.html b/doc/0.1.4/en_private/bitchanger/gui/views/package-summary.html new file mode 100644 index 0000000..09f2ab4 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/views/package-summary.html @@ -0,0 +1,220 @@ + + + + + +bitchanger.gui.views + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package bitchanger.gui.views

    +
    +
    +
    + + +
    Offers different views that can be represented on a graphical surface
    +
    + +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/views/package-tree.html b/doc/0.1.4/en_private/bitchanger/gui/views/package-tree.html new file mode 100644 index 0000000..7838de6 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/views/package-tree.html @@ -0,0 +1,198 @@ + + + + + +bitchanger.gui.views Class Hierarchy + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package bitchanger.gui.views

    +Package Hierarchies: + +
    +
    +
    +

    Class Hierarchy

    + +
    +
    +

    Interface Hierarchy

    + +
    +
    +

    Enum Hierarchy

    + +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/bitchanger/gui/views/package-use.html b/doc/0.1.4/en_private/bitchanger/gui/views/package-use.html new file mode 100644 index 0000000..8564c84 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/gui/views/package-use.html @@ -0,0 +1,258 @@ + + + + + +Uses of Package bitchanger.gui.views + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    bitchanger.gui.views

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/main/BitchangerLauncher.html b/doc/0.1.4/en_private/bitchanger/main/BitchangerLauncher.html new file mode 100644 index 0000000..17c515b --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/main/BitchangerLauncher.html @@ -0,0 +1,327 @@ + + + + + +BitchangerLauncher + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class BitchangerLauncher

    +
    +
    + +
    +
      +
    • +
      +
      public class BitchangerLauncher
      +extends Object
      +
      This class contains the main method that is the entry point for the application.
      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Muehle
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          BitchangerLauncher

          +
          public BitchangerLauncher()
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          main

          +
          public static void main​(String[] args)
          +
          The main method launches the application's main window and waits until this main window was closed. + All settings from Preferences are saved before the program is terminated.
          +
          +
          Parameters:
          +
          args - Arguments that are committed at the beginning of the program. The program ignores these arguments.
          +
          See Also:
          +
          Preferences, +PrimaryFXApp.launchFXApplication(String[])
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/main/PrimaryFXApp.html b/doc/0.1.4/en_private/bitchanger/main/PrimaryFXApp.html new file mode 100644 index 0000000..cbecc55 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/main/PrimaryFXApp.html @@ -0,0 +1,742 @@ + + + + + +PrimaryFXApp + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class PrimaryFXApp

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • javafx.application.Application
      • +
      • +
          +
        • bitchanger.main.PrimaryFXApp
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      ControllableApplication
      +
      +
      +
      public class PrimaryFXApp
      +extends javafx.application.Application
      +implements ControllableApplication
      +
      Main window of the application with javaFX +

      + The window contains several scenes for calculations and converting of several numeral systems. + These scenes can be changed and program settings can be opened via the menu bar. +

      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Muehle
      +
      See Also:
      +
      ConverterView, +ConverterController
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + + + + + + + + + + + + + + + + + +
          +
        • +

          currentViewProperty

          +
          public final javafx.beans.property.ObjectProperty<Viewable> currentViewProperty
          +
          Property of the currently displayed View
          +
        • +
        + + + +
          +
        • +

          converterView

          +
          private Viewable converterView
          +
          View for converting of numeral systems
          +
        • +
        + + + +
          +
        • +

          ieeeView

          +
          private Viewable ieeeView
          +
          View for conversion with the IEEE standard
          +
        • +
        + + + +
          +
        • +

          calculatorView

          +
          private Viewable calculatorView
          +
          View for calculating with number systems
          +
        • +
        + + + +
          +
        • +

          primaryStage

          +
          private javafx.stage.Stage primaryStage
          +
          Main application window
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          PrimaryFXApp

          +
          public PrimaryFXApp()
          +
          Construct a new PrimaryFXApp for the Bitchanger
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          launchFXApplication

          +
          public static void launchFXApplication​(String[] args)
          +
          Starts the applications and opens the application window.
          +
          +
          Parameters:
          +
          args - Arguments that are committed at the beginning of the application. These arguments are committed to the method launch and otherwise they will be ignored.
          +
          See Also:
          +
          Application.launch(String...)
          +
          +
        • +
        + + + + + + + +
          +
        • +

          getViewable

          +
          public Viewable getViewable​(String key)
          +
          Returns the view that is associated to the string key
          +
          +
          Specified by:
          +
          getViewable in interface ControllableApplication
          +
          Parameters:
          +
          key - key whose associated View is to be returned
          +
          Returns:
          +
          View to which the specified key is mapped, or null if there is no associated View for the given key
          +
          +
        • +
        + + + + + + + +
          +
        • +

          start

          +
          public void start​(javafx.stage.Stage primaryStage)
          +           throws Exception
          +
          This method creates the content for the main window and opens it. +

          + - A menu bar is created, which allows to control the main window in every scene. +

          +

          + - Different views for the various surfaces are created. +

          +

          + - The latest scene is loaded. +

          +

          + - The in settings selected stylesheet is loaded. +

          +

          + - The window is formatted and opened. +

          + + This method will end after the main window is closed.
          +
          +
          Specified by:
          +
          start in class javafx.application.Application
          +
          Throws:
          +
          Exception
          +
          See Also:
          +
          ConverterView
          +
          +
        • +
        + + + + + + + +
          +
        • +

          observeStageOnShowing

          +
          private void observeStageOnShowing()
          +
        • +
        + + + +
          +
        • +

          observeScene

          +
          private void observeScene()
          +
        • +
        + + + +
          +
        • +

          adjustViews

          +
          private void adjustViews​(Viewable... views)
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/main/class-use/BitchangerLauncher.html b/doc/0.1.4/en_private/bitchanger/main/class-use/BitchangerLauncher.html new file mode 100644 index 0000000..6a898aa --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/main/class-use/BitchangerLauncher.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.main.BitchangerLauncher + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.main.BitchangerLauncher

    +
    +
    No usage of bitchanger.main.BitchangerLauncher
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/main/class-use/PrimaryFXApp.html b/doc/0.1.4/en_private/bitchanger/main/class-use/PrimaryFXApp.html new file mode 100644 index 0000000..9f8f02a --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/main/class-use/PrimaryFXApp.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.main.PrimaryFXApp + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.main.PrimaryFXApp

    +
    +
    No usage of bitchanger.main.PrimaryFXApp
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/main/package-summary.html b/doc/0.1.4/en_private/bitchanger/main/package-summary.html new file mode 100644 index 0000000..4c56671 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/main/package-summary.html @@ -0,0 +1,180 @@ + + + + + +bitchanger.main + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package bitchanger.main

    +
    +
    +
    + + +
    Contains the launcher with the main method and the JavaFX applications for starting the graphical user interface.
    +
    +
      +
    • + + + + + + + + + + + + + + + + +
      Class Summary 
      ClassDescription
      BitchangerLauncher +
      This class contains the main method that is the entry point for the application.
      +
      PrimaryFXApp +
      Main window of the application with javaFX
      +
      +
    • +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/bitchanger/main/package-tree.html b/doc/0.1.4/en_private/bitchanger/main/package-tree.html new file mode 100644 index 0000000..0823dfa --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/main/package-tree.html @@ -0,0 +1,169 @@ + + + + + +bitchanger.main Class Hierarchy + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package bitchanger.main

    +Package Hierarchies: + +
    +
    +
    +

    Class Hierarchy

    + +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/bitchanger/main/package-use.html b/doc/0.1.4/en_private/bitchanger/main/package-use.html new file mode 100644 index 0000000..1aa2949 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/main/package-use.html @@ -0,0 +1,149 @@ + + + + + +Uses of Package bitchanger.main + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    bitchanger.main

    +
    +
    No usage of bitchanger.main
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/package-summary.html b/doc/0.1.4/en_private/bitchanger/package-summary.html new file mode 100644 index 0000000..2c4aa9f --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/package-summary.html @@ -0,0 +1,148 @@ + + + + + +bitchanger + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package bitchanger

    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/bitchanger/package-tree.html b/doc/0.1.4/en_private/bitchanger/package-tree.html new file mode 100644 index 0000000..c75d927 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/package-tree.html @@ -0,0 +1,152 @@ + + + + + +bitchanger Class Hierarchy + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package bitchanger

    +Package Hierarchies: + +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/bitchanger/package-use.html b/doc/0.1.4/en_private/bitchanger/package-use.html new file mode 100644 index 0000000..0419119 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/package-use.html @@ -0,0 +1,149 @@ + + + + + +Uses of Package bitchanger + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    bitchanger

    +
    +
    No usage of bitchanger
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/preferences/Comma.html b/doc/0.1.4/en_private/bitchanger/preferences/Comma.html new file mode 100644 index 0000000..32f7709 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/preferences/Comma.html @@ -0,0 +1,516 @@ + + + + + +Comma + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Enum Comma

    +
    +
    + +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Enum Constant Summary

        + + + + + + + + + + + + + + +
        Enum Constants 
        Enum ConstantDescription
        COMMA_DE +
        Constant that represents the German comma (',')
        +
        COMMA_EN +
        Constant that represents the English comma ('.')
        +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + +
        Fields 
        Modifier and TypeFieldDescription
        private charcomma +
        Wrapped comma sign
        +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + + + +
        Constructors 
        ModifierConstructorDescription
        private Comma​(char comma) +
        Initialization of the comma sign in the constructor
        +
        +
      • +
      +
      + +
      + +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Enum Constant Detail

        + + + +
          +
        • +

          COMMA_DE

          +
          public static final Comma COMMA_DE
          +
          Constant that represents the German comma (',')
          +
        • +
        + + + +
          +
        • +

          COMMA_EN

          +
          public static final Comma COMMA_EN
          +
          Constant that represents the English comma ('.')
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          comma

          +
          private char comma
          +
          Wrapped comma sign
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Comma

          +
          private Comma​(char comma)
          +
          Initialization of the comma sign in the constructor
          +
          +
          Parameters:
          +
          comma - sign representing the comma
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          values

          +
          public static Comma[] values()
          +
          Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
          +for (Comma c : Comma.values())
          +    System.out.println(c);
          +
          +
          +
          Returns:
          +
          an array containing the constants of this enum type, in the order they are declared
          +
          +
        • +
        + + + +
          +
        • +

          valueOf

          +
          public static Comma valueOf​(String name)
          +
          Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
          +
          +
          Parameters:
          +
          name - the name of the enum constant to be returned.
          +
          Returns:
          +
          the enum constant with the specified name
          +
          Throws:
          +
          IllegalArgumentException - if this enum type has no constant with the specified name
          +
          NullPointerException - if the argument is null
          +
          +
        • +
        + + + +
          +
        • +

          get

          +
          public char get()
          +
          Returns the represented comma sign
          +
          +
          Returns:
          +
          the represented comma sign
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/preferences/Preferences.html b/doc/0.1.4/en_private/bitchanger/preferences/Preferences.html new file mode 100644 index 0000000..ee03f70 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/preferences/Preferences.html @@ -0,0 +1,727 @@ + + + + + +Preferences + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class Preferences

    +
    +
    + +
    +
      +
    • +
      +
      public class Preferences
      +extends Object
      +
      Preferences is the global collection for all possible settings that can be selected for the bitchanger. + These settings can be requested and changed from all classes by using the method getPrefs(). + +

      + Furthermore there are methods to store all settings permanently and load these at a later moment. +

      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          prefs

          +
          private static Preferences prefs
          +
          Constant that contains all the current settings
          +
        • +
        + + + +
          +
        • +

          commaProperty

          +
          public final javafx.beans.property.ObjectProperty<Comma> commaProperty
          +
          Property for comma character
          +
        • +
        + + + +
          +
        • +

          indicateFractionalPrecisionProperty

          +
          public final javafx.beans.property.BooleanProperty indicateFractionalPrecisionProperty
          +
          Property for displaying aborted decimal places
          +
        • +
        + + + +
          +
        • +

          readOnlyStylesheetProperty

          +
          public final javafx.beans.property.ReadOnlyStringProperty readOnlyStylesheetProperty
          +
          ReadOnlyProperty for the selected Stylesheet
          +
        • +
        + + + +
          +
        • +

          readOnlyStyleProperty

          +
          public final javafx.beans.property.ReadOnlyObjectProperty<Style> readOnlyStyleProperty
          +
          ReadOnlyProperty for the selected Stylesheet
          +
        • +
        + + + +
          +
        • +

          stylesheetProperty

          +
          private final javafx.beans.property.StringProperty stylesheetProperty
          +
          Property for the selected Stylesheet
          +
        • +
        + + + +
          +
        • +

          styleProperty

          +
          private final javafx.beans.property.ObjectProperty<Style> styleProperty
          +
          Property for the selected Style of the Stylesheet
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Preferences

          +
          private Preferences()
          +
          Creates new preferences with the base values. Do not let anyone instantiate this class in any other class
          +
          +
          Since:
          +
          Bitchanger 0.1.4
          +
          +
        • +
        + + + +
          +
        • +

          Preferences

          +
          private Preferences​(File file)
          +
          Creates new Preferences with the settings that are saved in the given File or the default settings, + if the given File could not be found or loaded.
          +
          +
          Parameters:
          +
          file - File with the settings to be loaded in XML format
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getPrefs

          +
          public static Preferences getPrefs()
          +
          Returns the current settings
          +
          +
          Returns:
          +
          current settings
          +
          Since:
          +
          Bitchanger 0.1.4
          +
          +
        • +
        + + + + + + + + + + + + + + + +
          +
        • +

          getComma

          +
          public char getComma()
          +
          Returns the selected character for comma
          +
          +
          Returns:
          +
          selected character for comma
          +
          Since:
          +
          Bitchanger 0.1.4
          +
          +
        • +
        + + + +
          +
        • +

          indicateFractionalPrecision

          +
          public boolean indicateFractionalPrecision()
          +
          Returns the value of indicateFractionalPrecisionProperty
          +
          +
          Returns:
          +
          true, if the view of cancelled fractional parts is selected, if not false
          +
          Since:
          +
          Bitchanger 0.1.4
          +
          +
        • +
        + + + +
          +
        • +

          setIndicateFractionalPrecision

          +
          public void setIndicateFractionalPrecision​(boolean b)
          +
          Turns the view of cancelled fractional parts on and off
          +
          +
          Parameters:
          +
          b - true to turn on or false to turn off
          +
          Since:
          +
          Bitchanger 0.1.4
          +
          +
        • +
        + + + +
          +
        • +

          setStylesheet

          +
          public boolean setStylesheet​(String path)
          +
        • +
        + + + +
          +
        • +

          setStylesheet

          +
          public boolean setStylesheet​(Style style)
          +
        • +
        + + + +
          +
        • +

          load

          +
          private void load​(File file)
          +
          Loads all settings from the given XML file
          +
          +
          Parameters:
          +
          file - File from which the settings are loaded
          +
          Since:
          +
          Bitchanger 0.1.4
          +
          +
        • +
        + + + +
          +
        • +

          store

          +
          private void store​(File file)
          +
          Stores all preferences into the given file as XML document
          +
          +
          Parameters:
          +
          file - File in which the preferences are stored. Any content of the file will be overwritten!
          +
          Since:
          +
          Bitchanger 0.1.4
          +
          +
        • +
        + + + +
          +
        • +

          createXMLTree

          +
          private void createXMLTree​(Document doc,
          +                           Element xmlRoot)
          +
          Adds all settings of these Preferences to the XML tree of the Element xmlRoot
          +
          +
          Parameters:
          +
          doc - XML document in which xmlRoot is stored
          +
          xmlRoot - root element of the XML tree that is being expanded
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/preferences/Style.html b/doc/0.1.4/en_private/bitchanger/preferences/Style.html new file mode 100644 index 0000000..7513f16 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/preferences/Style.html @@ -0,0 +1,452 @@ + + + + + +Style + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Enum Style

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Serializable, Comparable<Style>
      +
      +
      +
      public enum Style
      +extends Enum<Style>
      +
      Enum of different styles that are available as CSS files for javaFX
      +
      +
      Since:
      +
      Bitchanger 0.1.4
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Muehle
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Enum Constant Detail

        + + + +
          +
        • +

          LIGHT

          +
          public static final Style LIGHT
          +
          Constant for a light layout
          +
        • +
        + + + +
          +
        • +

          DARK

          +
          public static final Style DARK
          +
          Constant for a dark layout
          +
        • +
        + + + +
          +
        • +

          UNKNOWN

          +
          public static final Style UNKNOWN
          +
          Constant for a unknown layout
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Style

          +
          private Style()
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          values

          +
          public static Style[] values()
          +
          Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
          +for (Style c : Style.values())
          +    System.out.println(c);
          +
          +
          +
          Returns:
          +
          an array containing the constants of this enum type, in the order they are declared
          +
          +
        • +
        + + + +
          +
        • +

          valueOf

          +
          public static Style valueOf​(String name)
          +
          Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
          +
          +
          Parameters:
          +
          name - the name of the enum constant to be returned.
          +
          Returns:
          +
          the enum constant with the specified name
          +
          Throws:
          +
          IllegalArgumentException - if this enum type has no constant with the specified name
          +
          NullPointerException - if the argument is null
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/preferences/class-use/Comma.html b/doc/0.1.4/en_private/bitchanger/preferences/class-use/Comma.html new file mode 100644 index 0000000..3626e15 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/preferences/class-use/Comma.html @@ -0,0 +1,253 @@ + + + + + +Uses of Class bitchanger.preferences.Comma + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.preferences.Comma

    +
    +
    +
      +
    • + + + + + + + + + + + + + + + + +
      Packages that use Comma 
      PackageDescription
      bitchanger.gui.controls +
      Allocates adjusted operating elements and functions for the user interface
      +
      bitchanger.preferences +
      With classes that are included in this package, components have access to global settings and can adjust these.
      +
      +
    • +
    • + +
    • +
    +
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/preferences/class-use/Preferences.html b/doc/0.1.4/en_private/bitchanger/preferences/class-use/Preferences.html new file mode 100644 index 0000000..50fc436 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/preferences/class-use/Preferences.html @@ -0,0 +1,214 @@ + + + + + +Uses of Class bitchanger.preferences.Preferences + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.preferences.Preferences

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/preferences/class-use/Style.html b/doc/0.1.4/en_private/bitchanger/preferences/class-use/Style.html new file mode 100644 index 0000000..3ee7b26 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/preferences/class-use/Style.html @@ -0,0 +1,275 @@ + + + + + +Uses of Class bitchanger.preferences.Style + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.preferences.Style

    +
    +
    +
      +
    • + + + + + + + + + + + + + + + + +
      Packages that use Style 
      PackageDescription
      bitchanger.preferences +
      With classes that are included in this package, components have access to global settings and can adjust these.
      +
      bitchanger.util +
      Contains Classes with general and cross-class methods.
      +
      +
    • +
    • + +
    • +
    +
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/preferences/package-summary.html b/doc/0.1.4/en_private/bitchanger/preferences/package-summary.html new file mode 100644 index 0000000..085da0a --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/preferences/package-summary.html @@ -0,0 +1,199 @@ + + + + + +bitchanger.preferences + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package bitchanger.preferences

    +
    +
    +
    + + +
    With classes that are included in this package, components have access to global settings and can adjust these. + These settings affect the optics but also the behavior of the program. All these parameters can be save for the optimal user experience. + Furthermore the default settings are recoverable at any time.
    +
    +
      +
    • + + + + + + + + + + + + +
      Class Summary 
      ClassDescription
      Preferences +
      Preferences is the global collection for all possible settings that can be selected for the bitchanger.
      +
      +
    • +
    • + + + + + + + + + + + + + + + + +
      Enum Summary 
      EnumDescription
      Comma +
      Enumeration of the wrapper class, that represents the character for a comma.
      +
      Style +
      Enum of different styles that are available as CSS files for javaFX
      +
      +
    • +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/bitchanger/preferences/package-tree.html b/doc/0.1.4/en_private/bitchanger/preferences/package-tree.html new file mode 100644 index 0000000..5fbef8d --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/preferences/package-tree.html @@ -0,0 +1,179 @@ + + + + + +bitchanger.preferences Class Hierarchy + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package bitchanger.preferences

    +Package Hierarchies: + +
    +
    +
    +

    Class Hierarchy

    + +
    +
    +

    Enum Hierarchy

    + +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/bitchanger/preferences/package-use.html b/doc/0.1.4/en_private/bitchanger/preferences/package-use.html new file mode 100644 index 0000000..da32e4e --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/preferences/package-use.html @@ -0,0 +1,250 @@ + + + + + +Uses of Package bitchanger.preferences + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    bitchanger.preferences

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/util/ArrayUtils.html b/doc/0.1.4/en_private/bitchanger/util/ArrayUtils.html new file mode 100644 index 0000000..0f20f5c --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/util/ArrayUtils.html @@ -0,0 +1,326 @@ + + + + + +ArrayUtils + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class ArrayUtils

    +
    +
    + +
    +
      +
    • +
      +
      public class ArrayUtils
      +extends Object
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ArrayUtils

          +
          private ArrayUtils()
          +
          Do not let anyone instantiate this class
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + + + +
          +
        • +

          arrayOf

          +
          @SafeVarargs
          +public static <T> T[] arrayOf​(T... values)
          +
          Converts the given Objects to an Array
          +
          +
          Type Parameters:
          +
          T - Type of Objects and the returned Array
          +
          Parameters:
          +
          values - Objects to for building an Array
          +
          Returns:
          +
          Array from the given Objects
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/util/FXUtils.html b/doc/0.1.4/en_private/bitchanger/util/FXUtils.html new file mode 100644 index 0000000..9cacdfa --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/util/FXUtils.html @@ -0,0 +1,547 @@ + + + + + +FXUtils + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class FXUtils

    +
    +
    + +
    +
      +
    • +
      +
      public class FXUtils
      +extends Object
      +
      Utility class to handle objects whose belong to the user interface.
      +
      +
      Since:
      +
      Bitchanger 0.1.4
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + + + +
        Constructors 
        ModifierConstructorDescription
        private FXUtils() +
        Do not let anyone instantiate this class
        +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Static Methods Concrete Methods 
        Modifier and TypeMethodDescription
        static javafx.scene.shape.SVGPathloadSVG​(File svgFile) +
        Loads an icon in svg format from the given file and creates an SVGPath object from the file that can be added to + the Scenegraph in javaFX.
        +
        static <T extends javafx.scene.Node>
        void
        setGridConstraints​(int firstColumn, + int firstRow, + int columnCount, + int columnOffset, + Queue<T> controls) +
        Sets the constrains of the nodes in a queue to position these in a GridPane.
        +
        static <T extends javafx.scene.Node>
        void
        setGridConstraints​(int firstColumn, + int firstRow, + int columnCount, + int columnOffset, + Queue<T> controls, + TriConsumer<javafx.scene.Node,​Integer,​Integer> consumer) +
        Proceed nodes as a table in a queue.
        +
        static voidsetIconOrText​(javafx.scene.control.Labeled labeled, + SVGIcon icon) 
        static voidsetIconOrText​(javafx.scene.control.Labeled labeled, + SVGIcon icon, + String alternativeText) 
        static voidsetIconOrText​(javafx.scene.control.MenuItem menuItem, + SVGIcon icon) 
        static voidsetIconOrText​(javafx.scene.control.MenuItem menuItem, + SVGIcon icon, + String alternativeText) 
        static voidsetMaxSizes​(Iterable<? extends javafx.scene.Node> nodes, + double maxSize) +
        Sets the maximum size of all controls inside an Iterable to the value of maxSize.
        +
        static voidsetMaxSizes​(Iterable<? extends javafx.scene.Node> nodes, + double maxWidth, + double maxHeight) +
        Sets the maximum width of all controls inside an Iterable to the value of maxWidth and + the maximum heights to the value of maxHeight.
        +
        + +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          FXUtils

          +
          private FXUtils()
          +
          Do not let anyone instantiate this class
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          setGridConstraints

          +
          public static <T extends javafx.scene.Node> void setGridConstraints​(int firstColumn,
          +                                                                    int firstRow,
          +                                                                    int columnCount,
          +                                                                    int columnOffset,
          +                                                                    Queue<T> controls)
          +
          Sets the constrains of the nodes in a queue to position these in a GridPane. +

          + The first nodes position is defined by the parameters and firstColumn, + firstRow and columnOffset. The matrix gets spread of the amount of rows. + These rows are set by columnCount and get an automatic line break. + The constrains are set as long as there are elemts in the queue. +

          +

          + It is possible that the nodes take more place than just one column in the GridPane. + The column of the following node gets incremented accordingly to not overlay elements. +

          +
          +
          Type Parameters:
          +
          T - The type of the queue elements while runtime
          +
          Parameters:
          +
          firstColumn - First column of the resulting table
          +
          firstRow - First row of the resulting table
          +
          columnCount - Number of the columns in the table
          +
          columnOffset - Shift of the first column (only deployed in the first row)
          +
          controls - Elements in the table with the order from upper left to lower right (columns gets incremented before rows gets incremented)
          +
          See Also:
          +
          setGridConstraints(int, int, int, int, Queue, TriConsumer)
          +
          +
        • +
        + + + +
          +
        • +

          setGridConstraints

          +
          public static <T extends javafx.scene.Node> void setGridConstraints​(int firstColumn,
          +                                                                    int firstRow,
          +                                                                    int columnCount,
          +                                                                    int columnOffset,
          +                                                                    Queue<T> controls,
          +                                                                    TriConsumer<javafx.scene.Node,​Integer,​Integer> consumer)
          +
          Proceed nodes as a table in a queue. +

          + For each node inside the queue the column gets incremented. If the maximum count of columns reached, + the row gets incremented and the column get set on the start value. + The node is committed with the values of rows and columns to the TriConsumer to proceed these data. +

          +

          + It is possible that the nodes takes more than just one column in the GridPane. + The column of the following node gets incremented accordingly to not overlay elements. +

          +
          +
          Type Parameters:
          +
          T - The type of the queue elements while runtime
          +
          Parameters:
          +
          firstColumn - First column of the resulting table
          +
          firstRow - First row of the resulting table
          +
          columnCount - Number of the columns in the table
          +
          columnOffset - Shift of the first column (only deployed in the first row)
          +
          controls - Elements in the table with the order from upper left to lower right (columns gets incremented before rows gets incremented)
          +
          consumer - TriConsumer, that proceed the data
          +
          +
        • +
        + + + +
          +
        • +

          setMaxSizes

          +
          public static void setMaxSizes​(Iterable<? extends javafx.scene.Node> nodes,
          +                               double maxSize)
          +
          Sets the maximum size of all controls inside an Iterable to the value of maxSize.
          +
          +
          Parameters:
          +
          nodes - Collection of all controls that can be adjusted, and also are able to lie inside a layout container
          +
          maxSize - Maximum size of the controls
          +
          +
        • +
        + + + +
          +
        • +

          setMaxSizes

          +
          public static void setMaxSizes​(Iterable<? extends javafx.scene.Node> nodes,
          +                               double maxWidth,
          +                               double maxHeight)
          +
          Sets the maximum width of all controls inside an Iterable to the value of maxWidth and + the maximum heights to the value of maxHeight.
          +
          +
          Parameters:
          +
          nodes - Collection of all controls that can be adjusted, and also are able to lie inside a layout container
          +
          maxWidth - maximum width of all controls
          +
          maxHeight - maximum height of all controls
          +
          +
        • +
        + + + +
          +
        • +

          loadSVG

          +
          public static javafx.scene.shape.SVGPath loadSVG​(File svgFile)
          +
          Loads an icon in svg format from the given file and creates an SVGPath object from the file that can be added to + the Scenegraph in javaFX.
          +
          +
          Parameters:
          +
          svgFile - Icon as an svg file
          +
          Returns:
          +
          Loaded icon as SVGPath or null if the file could not be read correctly
          +
          +
        • +
        + + + +
          +
        • +

          setIconOrText

          +
          public static void setIconOrText​(javafx.scene.control.MenuItem menuItem,
          +                                 SVGIcon icon,
          +                                 String alternativeText)
          +
        • +
        + + + +
          +
        • +

          setIconOrText

          +
          public static void setIconOrText​(javafx.scene.control.MenuItem menuItem,
          +                                 SVGIcon icon)
          +
        • +
        + + + +
          +
        • +

          setIconOrText

          +
          public static void setIconOrText​(javafx.scene.control.Labeled labeled,
          +                                 SVGIcon icon,
          +                                 String alternativeText)
          +
        • +
        + + + +
          +
        • +

          setIconOrText

          +
          public static void setIconOrText​(javafx.scene.control.Labeled labeled,
          +                                 SVGIcon icon)
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/util/IconFactory.html b/doc/0.1.4/en_private/bitchanger/util/IconFactory.html new file mode 100644 index 0000000..5540196 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/util/IconFactory.html @@ -0,0 +1,348 @@ + + + + + +IconFactory + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class IconFactory

    +
    +
    + +
    +
      +
    • +
      +
      public class IconFactory
      +extends Object
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          IconFactory

          +
          private IconFactory()
          +
          Do not let anyone instantiate this class
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          styleBindIcon

          +
          public static SVGIcon styleBindIcon​(File lightIconFile,
          +                                    File darkIconFile)
          +
        • +
        + + + +
          +
        • +

          setSVGStyle

          +
          private static void setSVGStyle​(SVGIcon icon,
          +                                javafx.scene.shape.SVGPath lightSVG,
          +                                javafx.scene.shape.SVGPath darkSVG,
          +                                Style style)
          +
        • +
        + + + +
          +
        • +

          ofSVGFile

          +
          public static SVGIcon ofSVGFile​(File file)
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/util/Resources.html b/doc/0.1.4/en_private/bitchanger/util/Resources.html new file mode 100644 index 0000000..cb7414d --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/util/Resources.html @@ -0,0 +1,1964 @@ + + + + + +Resources + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class Resources

    +
    +
    + +
    +
      +
    • +
      +
      public class Resources
      +extends Object
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          LAYOUT_CSS

          +
          public static final String LAYOUT_CSS
          +
        • +
        + + + +
          +
        • +

          LIGHT_CSS

          +
          public static final String LIGHT_CSS
          +
        • +
        + + + +
          +
        • +

          DARK_CSS

          +
          public static final String DARK_CSS
          +
        • +
        + + + +
          +
        • +

          CUSTOM_PREFERENCES

          +
          public static final File CUSTOM_PREFERENCES
          +
        • +
        + + + +
          +
        • +

          DEFAULT_PREFERENCES

          +
          public static final File DEFAULT_PREFERENCES
          +
        • +
        + + + +
          +
        • +

          ABC_BRICKS_FILLED_ICON

          +
          public static final File ABC_BRICKS_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          ABC_BRICKS_ICON

          +
          public static final File ABC_BRICKS_ICON
          +
        • +
        + + + +
          +
        • +

          ANGEL_DOWN_CIRCLE_THIN_ICON

          +
          public static final File ANGEL_DOWN_CIRCLE_THIN_ICON
          +
        • +
        + + + +
          +
        • +

          ANGEL_LEFT_CIRCLE_THIN_ICON

          +
          public static final File ANGEL_LEFT_CIRCLE_THIN_ICON
          +
        • +
        + + + +
          +
        • +

          ANGEL_RIGHT_CIRCLE_THIN_ICON

          +
          public static final File ANGEL_RIGHT_CIRCLE_THIN_ICON
          +
        • +
        + + + +
          +
        • +

          ANGEL_UP_CIRCLE_THIN_ICON

          +
          public static final File ANGEL_UP_CIRCLE_THIN_ICON
          +
        • +
        + + + +
          +
        • +

          ANGEL_DOWN_THIN_ICON

          +
          public static final File ANGEL_DOWN_THIN_ICON
          +
        • +
        + + + +
          +
        • +

          ANGEL_LEFT_THIN_ICON

          +
          public static final File ANGEL_LEFT_THIN_ICON
          +
        • +
        + + + +
          +
        • +

          ANGEL_RIGHT_THIN_ICON

          +
          public static final File ANGEL_RIGHT_THIN_ICON
          +
        • +
        + + + +
          +
        • +

          ANGEL_UP_THIN_ICON

          +
          public static final File ANGEL_UP_THIN_ICON
          +
        • +
        + + + +
          +
        • +

          ARROW_DOWN_CIRCLE_FILLED_ICON

          +
          public static final File ARROW_DOWN_CIRCLE_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          ARROW_LEFT_CIRCLE_FILLED_ICON

          +
          public static final File ARROW_LEFT_CIRCLE_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          ARROW_RIGHT_CIRCLE_FILLED_ICON

          +
          public static final File ARROW_RIGHT_CIRCLE_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          ARROW_UP_CIRCLE_FILLED_ICON

          +
          public static final File ARROW_UP_CIRCLE_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          ARROW_DOWN_ICON

          +
          public static final File ARROW_DOWN_ICON
          +
        • +
        + + + +
          +
        • +

          ARROW_LEFT_ICON

          +
          public static final File ARROW_LEFT_ICON
          +
        • +
        + + + +
          +
        • +

          ARROW_RIGHT_ICON

          +
          public static final File ARROW_RIGHT_ICON
          +
        • +
        + + + +
          +
        • +

          ARROW_UP_ICON

          +
          public static final File ARROW_UP_ICON
          +
        • +
        + + + +
          +
        • +

          CALCULATOR_SYMBOLS_FILLED_ICON

          +
          public static final File CALCULATOR_SYMBOLS_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          CALCULATOR_SYMBOLS_ICON

          +
          public static final File CALCULATOR_SYMBOLS_ICON
          +
        • +
        + + + +
          +
        • +

          CALCULATOR_FILLED_ICON

          +
          public static final File CALCULATOR_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          CALCULATOR_ICON

          +
          public static final File CALCULATOR_ICON
          +
        • +
        + + + +
          +
        • +

          COPYRIGHT_FILLED_ICON

          +
          public static final File COPYRIGHT_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          COPYRIGHT_ICON

          +
          public static final File COPYRIGHT_ICON
          +
        • +
        + + + +
          +
        • +

          ERASER_FILLED_ICON

          +
          public static final File ERASER_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          ERASER_ICON

          +
          public static final File ERASER_ICON
          +
        • +
        + + + +
          +
        • +

          ENTER_FULLSCREEN_ICON

          +
          public static final File ENTER_FULLSCREEN_ICON
          +
        • +
        + + + +
          +
        • +

          EXIT_FULLSCREEN_ICON

          +
          public static final File EXIT_FULLSCREEN_ICON
          +
        • +
        + + + +
          +
        • +

          FULLSCREEN_THIN_ICON

          +
          public static final File FULLSCREEN_THIN_ICON
          +
        • +
        + + + +
          +
        • +

          IDEA_FILLED_ICON

          +
          public static final File IDEA_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          IDEA_ICON

          +
          public static final File IDEA_ICON
          +
        • +
        + + + +
          +
        • +

          IDEA_SPEECH_BUBBLE_FILLED_ICON

          +
          public static final File IDEA_SPEECH_BUBBLE_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          IDEA_SPEECH_BUBBLE_ICON

          +
          public static final File IDEA_SPEECH_BUBBLE_ICON
          +
        • +
        + + + +
          +
        • +

          INFO_CIRCLE_SIMPLE_FILLED_ICON

          +
          public static final File INFO_CIRCLE_SIMPLE_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          INFO_CIRCLE_SIMPLE_ICON

          +
          public static final File INFO_CIRCLE_SIMPLE_ICON
          +
        • +
        + + + +
          +
        • +

          INFO_CIRCLE_FILLED_ICON

          +
          public static final File INFO_CIRCLE_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          INFO_CIRCLE_ICON

          +
          public static final File INFO_CIRCLE_ICON
          +
        • +
        + + + +
          +
        • +

          INFO_SPEECH_BOX_FILLED_ICON

          +
          public static final File INFO_SPEECH_BOX_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          INFO_SPEECH_BOX_ICON

          +
          public static final File INFO_SPEECH_BOX_ICON
          +
        • +
        + + + +
          +
        • +

          INFO_CIRCLE_THIN_ICON

          +
          public static final File INFO_CIRCLE_THIN_ICON
          +
        • +
        + + + +
          +
        • +

          KEYBORD_FILLED_ICON

          +
          public static final File KEYBORD_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          KEYBORD_ICON

          +
          public static final File KEYBORD_ICON
          +
        • +
        + + + +
          +
        • +

          KEYBORD_COMPACT_FILLED_ICON

          +
          public static final File KEYBORD_COMPACT_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          KEYBORD_COMPACT_ICON

          +
          public static final File KEYBORD_COMPACT_ICON
          +
        • +
        + + + +
          +
        • +

          KEYBORD_OPEN_FILLED_ICON

          +
          public static final File KEYBORD_OPEN_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          KEYBORD_OPEN_ICON

          +
          public static final File KEYBORD_OPEN_ICON
          +
        • +
        + + + +
          +
        • +

          KEYBORD_CLOSE_FILLED_ICON

          +
          public static final File KEYBORD_CLOSE_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          KEYBORD_CLOSE_ICON

          +
          public static final File KEYBORD_CLOSE_ICON
          +
        • +
        + + + +
          +
        • +

          LIGHT_BULB_1_ICON

          +
          public static final File LIGHT_BULB_1_ICON
          +
        • +
        + + + +
          +
        • +

          LIGHT_BULB_2_FILLED_ICON

          +
          public static final File LIGHT_BULB_2_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          LIGHT_BULB_2_ICON

          +
          public static final File LIGHT_BULB_2_ICON
          +
        • +
        + + + +
          +
        • +

          LIGHT_BULB_3_FILLED_ICON

          +
          public static final File LIGHT_BULB_3_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          LIGHT_BULB_3_ICON

          +
          public static final File LIGHT_BULB_3_ICON
          +
        • +
        + + + +
          +
        • +

          MAGIC_1_ICON

          +
          public static final File MAGIC_1_ICON
          +
        • +
        + + + +
          +
        • +

          MAGIC_2_ICON

          +
          public static final File MAGIC_2_ICON
          +
        • +
        + + + +
          +
        • +

          MENU_ICON

          +
          public static final File MENU_ICON
          +
        • +
        + + + +
          +
        • +

          MENU_DOTS_HORIZONTAL_FILLED_ICON

          +
          public static final File MENU_DOTS_HORIZONTAL_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          MENU_DOTS_VERTICAL_FILLED_ICON

          +
          public static final File MENU_DOTS_VERTICAL_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          MENU_DOTS_HORIZONTAL_ICON

          +
          public static final File MENU_DOTS_HORIZONTAL_ICON
          +
        • +
        + + + +
          +
        • +

          MENU_DOTS_VERTICAL_ICON

          +
          public static final File MENU_DOTS_VERTICAL_ICON
          +
        • +
        + + + +
          +
        • +

          MENU_THIN_ICON

          +
          public static final File MENU_THIN_ICON
          +
        • +
        + + + +
          +
        • +

          MONITOR_FILLED_ICON

          +
          public static final File MONITOR_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          MONITOR_ICON

          +
          public static final File MONITOR_ICON
          +
        • +
        + + + +
          +
        • +

          PAINT_BRUSH_FILLED_ICON

          +
          public static final File PAINT_BRUSH_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          PAINT_BRUSH_ICON

          +
          public static final File PAINT_BRUSH_ICON
          +
        • +
        + + + +
          +
        • +

          PAINT_BRUSH_WINDOW_ICON

          +
          public static final File PAINT_BRUSH_WINDOW_ICON
          +
        • +
        + + + +
          +
        • +

          PAINT_BRUSH_BUCKET_FILLED_ICON

          +
          public static final File PAINT_BRUSH_BUCKET_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          PAINT_BRUSH_BUCKET_ICON

          +
          public static final File PAINT_BRUSH_BUCKET_ICON
          +
        • +
        + + + +
          +
        • +

          PREFERENCES_GEAR_1_ICON

          +
          public static final File PREFERENCES_GEAR_1_ICON
          +
        • +
        + + + +
          +
        • +

          PREFERENCES_GEAR_2_ICON

          +
          public static final File PREFERENCES_GEAR_2_ICON
          +
        • +
        + + + +
          +
        • +

          PREFERENCES_GEAR_3_ICON

          +
          public static final File PREFERENCES_GEAR_3_ICON
          +
        • +
        + + + +
          +
        • +

          PREFERENCES_GEAR_THIN_ICON

          +
          public static final File PREFERENCES_GEAR_THIN_ICON
          +
        • +
        + + + +
          +
        • +

          PREFERENCES_WRENCH_RESET_ICON

          +
          public static final File PREFERENCES_WRENCH_RESET_ICON
          +
        • +
        + + + +
          +
        • +

          PREFERENCES_WRENCH_ICON

          +
          public static final File PREFERENCES_WRENCH_ICON
          +
        • +
        + + + +
          +
        • +

          QUESTION_CIRCLE_FILLED_ICON

          +
          public static final File QUESTION_CIRCLE_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          QUESTION_CIRCLE_ICON

          +
          public static final File QUESTION_CIRCLE_ICON
          +
        • +
        + + + +
          +
        • +

          QUESTION_SPEECH_BUBBLE_FILLED_ICON

          +
          public static final File QUESTION_SPEECH_BUBBLE_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          QUESTION_SPEECH_BUBBLE_ICON

          +
          public static final File QUESTION_SPEECH_BUBBLE_ICON
          +
        • +
        + + + +
          +
        • +

          QUESTION_THIN_ICON

          +
          public static final File QUESTION_THIN_ICON
          +
        • +
        + + + +
          +
        • +

          SUN_FILLED_ICON

          +
          public static final File SUN_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          SUN_ICON

          +
          public static final File SUN_ICON
          +
        • +
        + + + +
          +
        • +

          SYNC_1_ICON

          +
          public static final File SYNC_1_ICON
          +
        • +
        + + + +
          +
        • +

          SYNC_2_ICON

          +
          public static final File SYNC_2_ICON
          +
        • +
        + + + +
          +
        • +

          TEXTFIELD_ICON

          +
          public static final File TEXTFIELD_ICON
          +
        • +
        + + + +
          +
        • +

          TEXTFIELD_1_ICON

          +
          public static final File TEXTFIELD_1_ICON
          +
        • +
        + + + +
          +
        • +

          TRASH_FILLED_ICON

          +
          public static final File TRASH_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          TRASH_ICON

          +
          public static final File TRASH_ICON
          +
        • +
        + + + +
          +
        • +

          TRASH_X_FILLED_ICON

          +
          public static final File TRASH_X_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          TRASH_X_ICON

          +
          public static final File TRASH_X_ICON
          +
        • +
        + + + +
          +
        • +

          TRASH_THIN_ICON

          +
          public static final File TRASH_THIN_ICON
          +
        • +
        + + + +
          +
        • +

          WINDOW_ICON

          +
          public static final File WINDOW_ICON
          +
        • +
        + + + +
          +
        • +

          WINDOW_THIN_ICON

          +
          public static final File WINDOW_THIN_ICON
          +
        • +
        + + + +
          +
        • +

          WINDOW_THIN_2_ICON

          +
          public static final File WINDOW_THIN_2_ICON
          +
        • +
        + + + +
          +
        • +

          X_MARK_SQUARE_FILLED_ICON

          +
          public static final File X_MARK_SQUARE_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          X_MARK_SQUARE_ICON

          +
          public static final File X_MARK_SQUARE_ICON
          +
        • +
        + + + +
          +
        • +

          X_MARK_1_ICON

          +
          public static final File X_MARK_1_ICON
          +
        • +
        + + + +
          +
        • +

          X_MARK_2_ICON

          +
          public static final File X_MARK_2_ICON
          +
        • +
        + + + +
          +
        • +

          X_MARK_CIRCLE_1_FILLED_ICON

          +
          public static final File X_MARK_CIRCLE_1_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          X_MARK_CIRCLE_1_ICON

          +
          public static final File X_MARK_CIRCLE_1_ICON
          +
        • +
        + + + +
          +
        • +

          X_MARK_CIRCLE_2_FILLED_ICON

          +
          public static final File X_MARK_CIRCLE_2_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          X_MARK_CIRCLE_2_ICON

          +
          public static final File X_MARK_CIRCLE_2_ICON
          +
        • +
        + + + +
          +
        • +

          X_MARK_CIRCLE_THIN_ICON

          +
          public static final File X_MARK_CIRCLE_THIN_ICON
          +
        • +
        + + + +
          +
        • +

          X_MARK_THIN_ICON

          +
          public static final File X_MARK_THIN_ICON
          +
        • +
        + + + +
          +
        • +

          X_MARK_ARROW_LEFT_FILLED_ICON

          +
          public static final File X_MARK_ARROW_LEFT_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          X_MARK_ARROW_LEFT_ICON

          +
          public static final File X_MARK_ARROW_LEFT_ICON
          +
        • +
        + + + +
          +
        • +

          ZOOM_IN_ICON

          +
          public static final File ZOOM_IN_ICON
          +
        • +
        + + + +
          +
        • +

          ZOOM_OUT_ICON

          +
          public static final File ZOOM_OUT_ICON
          +
        • +
        + + + +
          +
        • +

          ZOOM_IN_THIN_ICON

          +
          public static final File ZOOM_IN_THIN_ICON
          +
        • +
        + + + +
          +
        • +

          ZOOM_OUT_THIN_ICON

          +
          public static final File ZOOM_OUT_THIN_ICON
          +
        • +
        + + + + +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Resources

          +
          private Resources()
          +
          Do not let anyone instantiate this class
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getResourceAsExternalForm

          +
          public static String getResourceAsExternalForm​(String name)
          +
        • +
        + + + +
          +
        • +

          getResourceAsFile

          +
          public static File getResourceAsFile​(String name)
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_private/bitchanger/util/TriConsumer.html b/doc/0.1.4/en_private/bitchanger/util/TriConsumer.html new file mode 100644 index 0000000..aea25ab --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/util/TriConsumer.html @@ -0,0 +1,282 @@ + + + + + +TriConsumer + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface TriConsumer<T,​U,​V>

    +
    +
    +
    +
      +
    • +
      +
      Type Parameters:
      +
      T - the type of the first argument to the operation
      +
      U - the type of the second argument to the operation
      +
      V - the type of the third argument to the operation
      +
      +
      +
      Functional Interface:
      +
      This is a functional interface and can therefore be used as the assignment target for a lambda expression or method reference.
      +
      +
      +
      @FunctionalInterface
      +public interface TriConsumer<T,​U,​V>
      +
      Represents an operation that accepts three input arguments and returns no result.
      +
      +
      Author:
      +
      Tim Muehle
      +
      +
    • +
    +
    +
    +
      +
    • + +
      + +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + + + +
          +
        • +

          accept

          +
          void accept​(T t,
          +            U u,
          +            V v)
          +
          Performs this operation on the given arguments.
          +
          +
          Parameters:
          +
          t - the first input argument
          +
          u - the second input argument
          +
          v - the third input argument
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +
    + + diff --git a/doc/0.1.4/en_private/bitchanger/util/class-use/ArrayUtils.html b/doc/0.1.4/en_private/bitchanger/util/class-use/ArrayUtils.html new file mode 100644 index 0000000..b64c3da --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/util/class-use/ArrayUtils.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.util.ArrayUtils + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.util.ArrayUtils

    +
    +
    No usage of bitchanger.util.ArrayUtils
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/util/class-use/FXUtils.html b/doc/0.1.4/en_private/bitchanger/util/class-use/FXUtils.html new file mode 100644 index 0000000..fdfe1f5 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/util/class-use/FXUtils.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.util.FXUtils + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.util.FXUtils

    +
    +
    No usage of bitchanger.util.FXUtils
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/util/class-use/IconFactory.html b/doc/0.1.4/en_private/bitchanger/util/class-use/IconFactory.html new file mode 100644 index 0000000..9b1dac8 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/util/class-use/IconFactory.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.util.IconFactory + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.util.IconFactory

    +
    +
    No usage of bitchanger.util.IconFactory
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/util/class-use/Resources.html b/doc/0.1.4/en_private/bitchanger/util/class-use/Resources.html new file mode 100644 index 0000000..038f289 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/util/class-use/Resources.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.util.Resources + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.util.Resources

    +
    +
    No usage of bitchanger.util.Resources
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/util/class-use/TriConsumer.html b/doc/0.1.4/en_private/bitchanger/util/class-use/TriConsumer.html new file mode 100644 index 0000000..c497c10 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/util/class-use/TriConsumer.html @@ -0,0 +1,202 @@ + + + + + +Uses of Interface bitchanger.util.TriConsumer + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    bitchanger.util.TriConsumer

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_private/bitchanger/util/package-summary.html b/doc/0.1.4/en_private/bitchanger/util/package-summary.html new file mode 100644 index 0000000..9a07646 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/util/package-summary.html @@ -0,0 +1,203 @@ + + + + + +bitchanger.util + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package bitchanger.util

    +
    +
    +
    + + +
    Contains Classes with general and cross-class methods.
    +
    +
      +
    • + + + + + + + + + + + + +
      Interface Summary 
      InterfaceDescription
      TriConsumer<T,​U,​V> +
      Represents an operation that accepts three input arguments and returns no result.
      +
      +
    • +
    • + + + + + + + + + + + + + + + + + + + + + + + + +
      Class Summary 
      ClassDescription
      ArrayUtils 
      FXUtils +
      Utility class to handle objects whose belong to the user interface.
      +
      IconFactory 
      Resources 
      +
    • +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/bitchanger/util/package-tree.html b/doc/0.1.4/en_private/bitchanger/util/package-tree.html new file mode 100644 index 0000000..e003801 --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/util/package-tree.html @@ -0,0 +1,173 @@ + + + + + +bitchanger.util Class Hierarchy + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package bitchanger.util

    +Package Hierarchies: + +
    +
    +
    +

    Class Hierarchy

    + +
    +
    +

    Interface Hierarchy

    + +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/bitchanger/util/package-use.html b/doc/0.1.4/en_private/bitchanger/util/package-use.html new file mode 100644 index 0000000..311e97c --- /dev/null +++ b/doc/0.1.4/en_private/bitchanger/util/package-use.html @@ -0,0 +1,188 @@ + + + + + +Uses of Package bitchanger.util + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    bitchanger.util

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_private/constant-values.html b/doc/0.1.4/en_private/constant-values.html new file mode 100644 index 0000000..58aa1f5 --- /dev/null +++ b/doc/0.1.4/en_private/constant-values.html @@ -0,0 +1,655 @@ + + + + + +Constant Field Values + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Constant Field Values

    +
    +

    Contents

    + +
    +
    +
    + + +
    +

    bitchanger.calculations.*

    + +
    + + + +
    +

    bitchanger.gui.*

    + + +
    + + + +
    +

    bitchanger.main.*

    + +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/deprecated-list.html b/doc/0.1.4/en_private/deprecated-list.html new file mode 100644 index 0000000..f842c9d --- /dev/null +++ b/doc/0.1.4/en_private/deprecated-list.html @@ -0,0 +1,149 @@ + + + + + +Deprecated List + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Deprecated API

    +

    Contents

    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/element-list b/doc/0.1.4/en_private/element-list new file mode 100644 index 0000000..685c0f3 --- /dev/null +++ b/doc/0.1.4/en_private/element-list @@ -0,0 +1,7 @@ +bitchanger.calculations +bitchanger.gui.controller +bitchanger.gui.controls +bitchanger.gui.views +bitchanger.main +bitchanger.preferences +bitchanger.util diff --git a/doc/0.1.4/en_private/help-doc.html b/doc/0.1.4/en_private/help-doc.html new file mode 100644 index 0000000..4a37474 --- /dev/null +++ b/doc/0.1.4/en_private/help-doc.html @@ -0,0 +1,281 @@ + + + + + +API Help + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    How This API Document Is Organized

    +
    This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.
    +
    +
    +
      +
    • +
      +

      Overview

      +

      The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

      +
      +
    • +
    • +
      +

      Package

      +

      Each package has a page that contains a list of its classes and interfaces, with a summary for each. These pages may contain six categories:

      +
        +
      • Interfaces
      • +
      • Classes
      • +
      • Enums
      • +
      • Exceptions
      • +
      • Errors
      • +
      • Annotation Types
      • +
      +
      +
    • +
    • +
      +

      Class or Interface

      +

      Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

      +
        +
      • Class Inheritance Diagram
      • +
      • Direct Subclasses
      • +
      • All Known Subinterfaces
      • +
      • All Known Implementing Classes
      • +
      • Class or Interface Declaration
      • +
      • Class or Interface Description
      • +
      +
      +
        +
      • Nested Class Summary
      • +
      • Field Summary
      • +
      • Property Summary
      • +
      • Constructor Summary
      • +
      • Method Summary
      • +
      +
      +
        +
      • Field Detail
      • +
      • Property Detail
      • +
      • Constructor Detail
      • +
      • Method Detail
      • +
      +

      Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

      +
      +
    • +
    • +
      +

      Annotation Type

      +

      Each annotation type has its own separate page with the following sections:

      +
        +
      • Annotation Type Declaration
      • +
      • Annotation Type Description
      • +
      • Required Element Summary
      • +
      • Optional Element Summary
      • +
      • Element Detail
      • +
      +
      +
    • +
    • +
      +

      Enum

      +

      Each enum has its own separate page with the following sections:

      +
        +
      • Enum Declaration
      • +
      • Enum Description
      • +
      • Enum Constant Summary
      • +
      • Enum Constant Detail
      • +
      +
      +
    • +
    • +
      +

      Use

      +

      Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its "Use" page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.

      +
      +
    • +
    • +
      +

      Tree (Class Hierarchy)

      +

      There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. Classes are organized by inheritance structure starting with java.lang.Object. Interfaces do not inherit from java.lang.Object.

      +
        +
      • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
      • +
      • When viewing a particular package, class or interface page, clicking on "Tree" displays the hierarchy for only that package.
      • +
      +
      +
    • +
    • +
      +

      Deprecated API

      +

      The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.

      +
      +
    • +
    • +
      +

      Index

      +

      The Index contains an alphabetic index of all classes, interfaces, constructors, methods, and fields, as well as lists of all packages and all classes.

      +
      +
    • +
    • +
      +

      All Classes

      +

      The All Classes link shows all classes and interfaces except non-static nested types.

      +
      +
    • +
    • +
      +

      Serialized Form

      +

      Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.

      +
      +
    • +
    • +
      +

      Constant Field Values

      +

      The Constant Field Values page lists the static final fields and their values.

      +
      +
    • +
    • +
      +

      Search

      +

      You can search for definitions of modules, packages, types, fields, methods and other terms defined in the API, using some or all of the name. "Camel-case" abbreviations are supported: for example, "InpStr" will find "InputStream" and "InputStreamReader".

      +
      +
    • +
    +
    +This help file applies to API documentation generated by the standard doclet.
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/index-files/index-1.html b/doc/0.1.4/en_private/index-files/index-1.html new file mode 100644 index 0000000..d3cc29a --- /dev/null +++ b/doc/0.1.4/en_private/index-files/index-1.html @@ -0,0 +1,276 @@ + + + + + +A-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    A

    +
    +
    ABC_BRICKS_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ABC_BRICKS_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    about - Variable in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    ABOUT - bitchanger.gui.controls.InformationDialog.InformationType
    +
     
    +
    accept(T, U, V) - Method in interface bitchanger.util.TriConsumer
    +
    +
    Performs this operation on the given arguments.
    +
    +
    addButton(Node, int, int) - Method in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    addButton(Node, int, int, String) - Method in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    addColumnConstraint(int, AlphaNumGridView.ConstraintType) - Method in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    addItems() - Method in class bitchanger.gui.controls.ConverterMenuBar
    +
     
    +
    addMenu(Menu, String) - Method in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Adds the given Menu to this MenuBar and puts it in the Map BasicMenuBar.menuItemMap + with the given key
    +
    +
    addRowConstraint(int, AlphaNumGridView.ConstraintType) - Method in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    adjustViews(Viewable...) - Method in class bitchanger.main.PrimaryFXApp
    +
     
    +
    ALPHA_KEYS - Static variable in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    alphaKeys - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    alphaNum - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    alphaNumButtons - Variable in class bitchanger.gui.controller.ConverterController
    +
    +
    alphanumeric keys to simulate a keyboard
    +
    +
    AlphaNumGridView - Class in bitchanger.gui.views
    +
     
    +
    AlphaNumGridView(int, int) - Constructor for class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    AlphaNumGridView(int, int, int, int, int, int, String[], String...) - Constructor for class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    AlphaNumGridView(int, int, int, int, int, int, String[], String[], double, double, double, double, double, double, double) - Constructor for class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    AlphaNumGridView(int, int, int, int, int, int, String[], String[], double, double, double, double, double, double, double, double, double, double, double, double, double, double, double) - Constructor for class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    AlphaNumGridView(String[], String...) - Constructor for class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    AlphaNumGridView.ConstraintType - Enum in bitchanger.gui.views
    +
     
    +
    AlphaNumKeys - Class in bitchanger.gui.controls
    +
     
    +
    AlphaNumKeys(int, int, double, Scene) - Constructor for class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    AlphaNumKeys(int, int, DoubleProperty, Scene) - Constructor for class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    AlphaNumKeysController - Class in bitchanger.gui.controller
    +
    +
    This controller gives the operating elements of an instance of AlphaNumKeys a function and links the simulation + of the keyboard to the encapsulated scene.
    +
    +
    AlphaNumKeysController(AlphaNumKeys, Scene) - Constructor for class bitchanger.gui.controller.AlphaNumKeysController
    +
    +
    Produces a new controller that gives function to an AlphaNumKeys.
    +
    +
    ANGEL_DOWN_CIRCLE_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ANGEL_DOWN_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ANGEL_LEFT_CIRCLE_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ANGEL_LEFT_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ANGEL_RIGHT_CIRCLE_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ANGEL_RIGHT_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ANGEL_UP_CIRCLE_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ANGEL_UP_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    anyBase - Variable in class bitchanger.gui.controller.ConverterController
    +
    +
    Spinner for the eligible base
    +
    +
    application - Variable in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    arrayOf(T...) - Static method in class bitchanger.util.ArrayUtils
    +
    +
    Converts the given Objects to an Array
    +
    +
    ArrayUtils - Class in bitchanger.util
    +
     
    +
    ArrayUtils() - Constructor for class bitchanger.util.ArrayUtils
    +
    +
    Do not let anyone instantiate this class
    +
    +
    ARROW_DOWN_CIRCLE_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ARROW_DOWN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ARROW_LEFT_CIRCLE_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ARROW_LEFT_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ARROW_RIGHT_CIRCLE_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ARROW_RIGHT_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ARROW_UP_CIRCLE_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ARROW_UP_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    arrowButtons - Variable in class bitchanger.gui.controller.AlphaNumKeysController
    +
    +
    HBox with buttons, that functions are, to scroll through the different keyboard layouts.
    +
    +
    arrowButtons - Variable in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    asDouble() - Method in interface bitchanger.calculations.ChangeableNumber
    +
     
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/index-files/index-10.html b/doc/0.1.4/en_private/index-files/index-10.html new file mode 100644 index 0000000..c9b477b --- /dev/null +++ b/doc/0.1.4/en_private/index-files/index-10.html @@ -0,0 +1,182 @@ + + + + + +K-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    K

    +
    +
    KEYBOARD_BTN_KEY - Static variable in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    keyboardBtn - Variable in class bitchanger.gui.controller.AlphaNumKeysController
    +
    +
    Button to switch between numbers and alphabet on the keyboard
    +
    +
    keyboardBtn - Variable in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    keyboardBtnKey - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    keyboardCloseGraphic - Variable in class bitchanger.gui.controller.AlphaNumKeysController
    +
     
    +
    keyboardOpenGraphic - Variable in class bitchanger.gui.controller.AlphaNumKeysController
    +
     
    +
    KEYBORD_CLOSE_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    KEYBORD_CLOSE_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    KEYBORD_COMPACT_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    KEYBORD_COMPACT_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    KEYBORD_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    KEYBORD_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    KEYBORD_OPEN_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    KEYBORD_OPEN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/index-files/index-11.html b/doc/0.1.4/en_private/index-files/index-11.html new file mode 100644 index 0000000..0be8b98 --- /dev/null +++ b/doc/0.1.4/en_private/index-files/index-11.html @@ -0,0 +1,205 @@ + + + + + +L-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    L

    +
    +
    LABEL_TEXTS - Static variable in class bitchanger.gui.views.ConverterView
    +
     
    +
    LABEL_TEXTS - Static variable in class bitchanger.gui.views.IEEEView
    +
     
    +
    labelColumn - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    labelTexts - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    lastCaretPosition - Variable in class bitchanger.gui.controls.ValueField
    +
    +
    Auxiliary variable for the last known position in the text field
    +
    +
    launchFXApplication(String[]) - Static method in class bitchanger.main.PrimaryFXApp
    +
    +
    Starts the applications and opens the application window.
    +
    +
    LAYOUT_CSS - Static variable in class bitchanger.util.Resources
    +
     
    +
    LIGHT - bitchanger.preferences.Style
    +
    +
    Constant for a light layout
    +
    +
    LIGHT_BULB_1_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    LIGHT_BULB_2_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    LIGHT_BULB_2_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    LIGHT_BULB_3_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    LIGHT_BULB_3_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    LIGHT_CSS - Static variable in class bitchanger.util.Resources
    +
     
    +
    listenScreenConfig() - Method in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    load(File) - Method in class bitchanger.preferences.Preferences
    +
    +
    Loads all settings from the given XML file
    +
    +
    loadCustom() - Static method in class bitchanger.preferences.Preferences
    +
    +
    Loads the last settings from the file Resources.CUSTOM_PREFERENCES
    +
    +
    loadDefault() - Static method in class bitchanger.preferences.Preferences
    +
    +
    Loads the default settings from the file Resources.DEFAULT_PREFERENCES
    +
    +
    loadSVG(File) - Static method in class bitchanger.util.FXUtils
    +
    +
    Loads an icon in svg format from the given file and creates an SVGPath object from the file that can be added to + the Scenegraph in javaFX.
    +
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/index-files/index-12.html b/doc/0.1.4/en_private/index-files/index-12.html new file mode 100644 index 0000000..179bb83 --- /dev/null +++ b/doc/0.1.4/en_private/index-files/index-12.html @@ -0,0 +1,214 @@ + + + + + +M-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    M

    +
    +
    MAGIC_1_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    MAGIC_2_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    main(String[]) - Static method in class bitchanger.main.BitchangerLauncher
    +
    +
    The main method launches the application's main window and waits until this main window was closed.
    +
    +
    MAX_BASE - Static variable in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Constant for the highest possible base of 36 characters given through 0-9 and A-Z
    +
    +
    MENU_DOTS_HORIZONTAL_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    MENU_DOTS_HORIZONTAL_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    MENU_DOTS_VERTICAL_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    MENU_DOTS_VERTICAL_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    MENU_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    MENU_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    menubar - Variable in class bitchanger.gui.views.ViewBase
    +
     
    +
    menuItemMap - Variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Map in which all MenuItems required by the controller are stored with a unique key
    +
    +
    MIN_BASE - Static variable in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Constant for the lowest possible base
    +
    +
    MODUS_CALCULATOR_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Key with which the MenuItem "Berechnungen" is associated in the Map BasicMenuBar.menuItemMap
    +
    +
    MODUS_CONVERTER_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Key with which the MenuItem "Umrechner" is associated in the Map BasicMenuBar.menuItemMap
    +
    +
    MODUS_IEEE_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Key with which the MenuItem "IEEE" is associated in the Map BasicMenuBar.menuItemMap
    +
    +
    MODUS_MENU_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Key with which the Menu "Modus" is associated in the Map BasicMenuBar.menuItemMap
    +
    +
    modusCalculator - Variable in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    modusConverter - Variable in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    modusIEEE - Variable in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    MONITOR_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    MONITOR_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    moveToScreen - Variable in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/index-files/index-13.html b/doc/0.1.4/en_private/index-files/index-13.html new file mode 100644 index 0000000..eb6cead --- /dev/null +++ b/doc/0.1.4/en_private/index-files/index-13.html @@ -0,0 +1,172 @@ + + + + + +N-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    N

    +
    +
    NEXT_BTN_KEY - Static variable in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    nextBtn - Variable in class bitchanger.gui.controller.AlphaNumKeysController
    +
    +
    Button that is used to scroll forwards on the keyboard
    +
    +
    nextBtn - Variable in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    nextBtnKey - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    nodeMap - Variable in class bitchanger.gui.controller.ControllerBase
    +
     
    +
    nodeMap - Variable in class bitchanger.gui.views.ViewBase
    +
     
    +
    NONE - bitchanger.gui.controls.InformationDialog.InformationType
    +
     
    +
    NUM_KEYS - Static variable in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    numKeys - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/index-files/index-14.html b/doc/0.1.4/en_private/index-files/index-14.html new file mode 100644 index 0000000..9f7b72e --- /dev/null +++ b/doc/0.1.4/en_private/index-files/index-14.html @@ -0,0 +1,186 @@ + + + + + +O-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    O

    +
    +
    observeCommaProperty() - Method in class bitchanger.gui.controls.ValueField
    +
    +
    Monitors the CommaProperty from Preferences and adjusts the comma if the number is changing
    +
    +
    observeGraphicScaling() - Method in class bitchanger.gui.controls.UnfocusedButton
    +
     
    +
    observeScene() - Method in class bitchanger.main.PrimaryFXApp
    +
     
    +
    observeStageOnShowing() - Method in class bitchanger.main.PrimaryFXApp
    +
     
    +
    octalValue - Variable in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    wrapped value as octal String representation
    +
    +
    of(Controllable) - Static method in interface bitchanger.gui.controller.Controller
    +
    +
    Factory method that creates and returns a new Controller for the given Controllable.
    +
    +
    ofArg(Controllable, Object...) - Static method in interface bitchanger.gui.controller.Controller
    +
    +
    Factory method that creates and returns a new Controller for the given Controllable.
    +
    +
    ofSVGFile(File) - Static method in class bitchanger.util.IconFactory
    +
     
    +
    options - Variable in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    OPTIONS_INDICATE_FRACTIONAL_INACCURACY_CHECK_ITEM_KEY - Static variable in class bitchanger.gui.controls.ConverterMenuBar
    +
    +
    Key with which the CheckMenuItem "abgeschnittene Nachkommastellen kennzeichnen" is associated in the Map BasicMenuBar.menuItemMap
    +
    +
    OPTIONS_MENU_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Key with which the Menu "Optionen" is associated in the Map BasicMenuBar.menuItemMap
    +
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/index-files/index-15.html b/doc/0.1.4/en_private/index-files/index-15.html new file mode 100644 index 0000000..9a5ab6f --- /dev/null +++ b/doc/0.1.4/en_private/index-files/index-15.html @@ -0,0 +1,221 @@ + + + + + +P-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    P

    +
    +
    paddingBottomProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    paddingLeftProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    paddingRigthProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    paddingTopProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    PAINT_BRUSH_BUCKET_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    PAINT_BRUSH_BUCKET_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    PAINT_BRUSH_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    PAINT_BRUSH_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    PAINT_BRUSH_WINDOW_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    Preferences - Class in bitchanger.preferences
    +
    +
    Preferences is the global collection for all possible settings that can be selected for the bitchanger.
    +
    +
    Preferences() - Constructor for class bitchanger.preferences.Preferences
    +
    +
    Creates new preferences with the base values.
    +
    +
    Preferences(File) - Constructor for class bitchanger.preferences.Preferences
    +
    +
    Creates new Preferences with the settings that are saved in the given File or the default settings, + if the given File could not be found or loaded.
    +
    +
    PREFERENCES_GEAR_1_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    PREFERENCES_GEAR_2_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    PREFERENCES_GEAR_3_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    PREFERENCES_GEAR_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    PREFERENCES_WRENCH_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    PREFERENCES_WRENCH_RESET_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    prefs - Static variable in class bitchanger.preferences.Preferences
    +
    +
    Constant that contains all the current settings
    +
    +
    PREVIOUS_BTN_KEY - Static variable in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    previousBtn - Variable in class bitchanger.gui.controller.AlphaNumKeysController
    +
    +
    Button that is used to scroll backwards on the keyboard
    +
    +
    previousBtn - Variable in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    previousBtnKey - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    PrimaryFXApp - Class in bitchanger.main
    +
    +
    Main window of the application with javaFX
    +
    +
    PrimaryFXApp() - Constructor for class bitchanger.main.PrimaryFXApp
    +
    +
    Construct a new PrimaryFXApp for the Bitchanger
    +
    +
    primaryStage - Variable in class bitchanger.main.PrimaryFXApp
    +
    +
    Main application window
    +
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/index-files/index-16.html b/doc/0.1.4/en_private/index-files/index-16.html new file mode 100644 index 0000000..52e5c1f --- /dev/null +++ b/doc/0.1.4/en_private/index-files/index-16.html @@ -0,0 +1,162 @@ + + + + + +Q-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    Q

    +
    +
    QUESTION_CIRCLE_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    QUESTION_CIRCLE_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    QUESTION_SPEECH_BUBBLE_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    QUESTION_SPEECH_BUBBLE_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    QUESTION_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/index-files/index-17.html b/doc/0.1.4/en_private/index-files/index-17.html new file mode 100644 index 0000000..5ea2432 --- /dev/null +++ b/doc/0.1.4/en_private/index-files/index-17.html @@ -0,0 +1,191 @@ + + + + + +R-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    R

    +
    +
    readOnlyStyleProperty - Variable in class bitchanger.preferences.Preferences
    +
    +
    ReadOnlyProperty for the selected Stylesheet
    +
    +
    readOnlyStylesheetProperty - Variable in class bitchanger.preferences.Preferences
    +
    +
    ReadOnlyProperty for the selected Stylesheet
    +
    +
    register(Class<? extends Controllable>, Class<? extends Controller>) - Static method in interface bitchanger.gui.controller.Controller
    +
    +
    Registers a Controller class for the factory method Controller.of(Controllable) + and assigns it to a Controllable class.
    +
    +
    REGISTERED_CONTROLLERS - Static variable in interface bitchanger.gui.controller.Controller
    +
    +
    Map that saves the Controllers registered for a Controllable and associates them
    +
    +
    reset() - Method in interface bitchanger.calculations.ChangeableNumber
    +
    +
    Resets the wrapped value.
    +
    +
    reset() - Method in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Resets the wrapped value.
    +
    +
    resetPreferences - Variable in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    resetPreferencesAction() - Method in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    Resources - Class in bitchanger.util
    +
     
    +
    Resources() - Constructor for class bitchanger.util.Resources
    +
    +
    Do not let anyone instantiate this class
    +
    +
    root - Variable in class bitchanger.gui.views.ViewBase
    +
     
    +
    ROW_COUNT - Static variable in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/index-files/index-18.html b/doc/0.1.4/en_private/index-files/index-18.html new file mode 100644 index 0000000..a0b0873 --- /dev/null +++ b/doc/0.1.4/en_private/index-files/index-18.html @@ -0,0 +1,528 @@ + + + + + +S-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    S

    +
    +
    scene - Variable in class bitchanger.gui.controller.AlphaNumKeysController
    +
    +
    Scene where this controller is linked to and that contains all simulated KeyEvents
    +
    +
    scene - Variable in class bitchanger.gui.views.ViewBase
    +
     
    +
    separateByComma(String) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Separated the numbers before and after the comma / point of the submitted string value, + which represents a number of the base base and returns these separated strings without + leading 0 in the decimal part.
    +
    +
    set(double) - Method in interface bitchanger.calculations.ChangeableNumber
    +
     
    +
    setActions() - Method in class bitchanger.gui.controller.AlphaNumKeysController
    +
    +
    Sets actions to switch the keyboard mode, to scroll between the different keyboard layouts, to update the comma button + and simulates the keyboard inputs for the alphanumeric buttons
    +
    +
    setActions() - Method in class bitchanger.gui.controller.BasicMenuController
    +
    +
    Sets all functions that are needed for the view.
    +
    +
    setActions() - Method in interface bitchanger.gui.controller.Controller
    +
    +
    Sets all functions that are needed for the view.
    +
    +
    setActions() - Method in class bitchanger.gui.controller.ConverterController
    +
    +
    Sets all functions that are needed for the view.
    +
    +
    setActions() - Method in class bitchanger.gui.controller.ConverterMenuController
    +
    +
    Sets all functions that are needed for the view.
    +
    +
    setActions() - Method in class bitchanger.gui.controller.IEEEController
    +
    +
    Sets all functions that are needed for the view.
    +
    +
    setActions() - Method in class bitchanger.gui.controls.BaseSpinner
    +
    +
    Sets an EventHandler that controls the input into the editor automatically and + updates it with the method Spinner.commitValue() if possible.
    +
    +
    setAllToKeyboard(char) - Method in class bitchanger.gui.controller.AlphaNumKeysController
    +
    +
    Sets the texts of all Buttons.
    +
    +
    setAlphaButtonTexts(char) - Method in class bitchanger.gui.controller.AlphaNumKeysController
    +
    +
    Sets the texts of the alpha buttons into the order of AlphaNumKeys.ALPHA_KEYS.
    +
    +
    setAlphaNumBindings() - Method in class bitchanger.gui.controller.ConverterController
    +
    +
    Links the baseProperty of all alphanumeric buttons to the attribute ConverterController.baseProperty, + to show or hide the buttons automatically if the base is changing.
    +
    +
    setAnyValListener() - Method in class bitchanger.gui.controller.ConverterController
    +
    +
    Sets the listener for ConverterController.tfAny, to convert the input and update the other text fields immediately.
    +
    +
    setArrowScaleFactors(double) - Method in class bitchanger.gui.controller.AlphaNumKeysController
    +
     
    +
    setBackspaceAction() - Method in class bitchanger.gui.controller.ConverterController
    +
    +
    Simulates the backspace button an the keyboard.
    +
    +
    setBase(int) - Method in class bitchanger.gui.controls.ValueButton
    +
    +
    Sets the value of the base
    +
    +
    setBase(int) - Method in class bitchanger.gui.controls.ValueField
    +
    +
    Sets the value of ValueField.baseProperty
    +
    +
    setBaseListener() - Method in class bitchanger.gui.controls.ValueButton
    +
    +
    Checks the baseProperty and activates or disables this button if the text + agrees or disagrees to the new value of the baseProperty
    +
    +
    setBin(String) - Method in interface bitchanger.calculations.ChangeableNumber
    +
    +
    Sets the value of this ChangeableNumber to the value of a binary string
    +
    +
    setBin(String) - Method in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Sets the value of this ChangeableNumber to the value of a binary string
    +
    +
    setBinValListener() - Method in class bitchanger.gui.controller.ConverterController
    +
    +
    Sets the listener for ConverterController.tfBin, to convert the input and update the other text fields immediately.
    +
    +
    setButtonActions() - Method in class bitchanger.gui.controller.ConverterController
    +
    +
    Sets actions for all buttons
    +
    +
    setChooseCommaAction(MenuItem, Comma) - Method in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Sets the action of the given MenuItem so that the specific Comma is set in the Preferences.
    +
    +
    setClearAction() - Method in class bitchanger.gui.controller.ConverterController
    +
    +
    Resets ConverterController.value by clicking on clear button and updates all text fields.
    +
    +
    setColumnConstraints() - Method in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    setCommaBinding() - Method in class bitchanger.gui.controller.AlphaNumKeysController
    +
    +
    Links the text of the comma buttons to the CommaProperty.
    +
    +
    setDec(String) - Method in interface bitchanger.calculations.ChangeableNumber
    +
    +
    Sets the value of this ChangeableNumber to the value of a decimal string
    +
    +
    setDec(String) - Method in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Sets the value of this ChangeableNumber to the value of a decimal string
    +
    +
    setDecValListener() - Method in class bitchanger.gui.controller.ConverterController
    +
    +
    Sets the listener for ConverterController.tfDec, to convert the input and update the other text fields immediately.
    +
    +
    setGraphicScaleFactor(Double) - Method in class bitchanger.gui.controls.UnfocusedButton
    +
     
    +
    setGridConstraints(int, int, int, int, Queue<T>) - Static method in class bitchanger.util.FXUtils
    +
    +
    Sets the constrains of the nodes in a queue to position these in a GridPane.
    +
    +
    setGridConstraints(int, int, int, int, Queue<T>, TriConsumer<Node, Integer, Integer>) - Static method in class bitchanger.util.FXUtils
    +
    +
    Proceed nodes as a table in a queue.
    +
    +
    setHex(String) - Method in interface bitchanger.calculations.ChangeableNumber
    +
    +
    Sets the value of this ChangeableNumber to the value of a hexadecimal string
    +
    +
    setHex(String) - Method in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Sets the value of this ChangeableNumber to the value of a hexadecimal string
    +
    +
    setHexValListener() - Method in class bitchanger.gui.controller.ConverterController
    +
    +
    Sets the listener for ConverterController.tfHex, to convert the input and update the other text fields immediately.
    +
    +
    setIconOrText(Labeled, SVGIcon) - Static method in class bitchanger.util.FXUtils
    +
     
    +
    setIconOrText(Labeled, SVGIcon, String) - Static method in class bitchanger.util.FXUtils
    +
     
    +
    setIconOrText(MenuItem, SVGIcon) - Static method in class bitchanger.util.FXUtils
    +
     
    +
    setIconOrText(MenuItem, SVGIcon, String) - Static method in class bitchanger.util.FXUtils
    +
     
    +
    setIndicateFractionalPrecision(boolean) - Method in class bitchanger.preferences.Preferences
    +
    +
    Turns the view of cancelled fractional parts on and off
    +
    +
    setInitialState() - Method in class bitchanger.gui.controller.ConverterController
    +
    +
    Sets the attributes to the initial condition.
    +
    +
    setKeyboardBtnAction() - Method in class bitchanger.gui.controller.AlphaNumKeysController
    +
    +
    Sets the function to switch the keyboard mode by clicking on the button AlphaNumKeysController.keyboardBtn.
    +
    +
    setMaxSizes(Iterable<? extends Node>, double) - Static method in class bitchanger.util.FXUtils
    +
    +
    Sets the maximum size of all controls inside an Iterable to the value of maxSize.
    +
    +
    setMaxSizes(Iterable<? extends Node>, double, double) - Static method in class bitchanger.util.FXUtils
    +
    +
    Sets the maximum width of all controls inside an Iterable to the value of maxWidth and + the maximum heights to the value of maxHeight.
    +
    +
    setMenuBar(T) - Method in interface bitchanger.gui.views.Viewable
    +
    +
    Adds the given MenuBar to this View's scenegraph.
    +
    +
    setMenuBar(V) - Method in class bitchanger.gui.views.ViewBase
    +
    +
    Adds the given MenuBar to this View's scenegraph.
    +
    +
    setNextBtnAction() - Method in class bitchanger.gui.controller.AlphaNumKeysController
    +
    +
    Sets the function to scroll the alpha keyboard forwards, by clicking on the button AlphaNumKeysController.nextBtn.
    +
    +
    setNextBtnDisable() - Method in class bitchanger.gui.controller.AlphaNumKeysController
    +
    +
    Sets ChangeListener at the last alpha button and at the last number button to control, if the end of the alphabet is reached.
    +
    +
    setNumButtonTexts() - Method in class bitchanger.gui.controller.AlphaNumKeysController
    +
    +
    Sets the texts of the numeric Buttons in order of AlphaNumKeys.NUM_KEYS.
    +
    +
    setOct(String) - Method in interface bitchanger.calculations.ChangeableNumber
    +
    +
    Sets the value of this ChangeableNumber to the value of an octal string
    +
    +
    setOct(String) - Method in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Sets the value of this ChangeableNumber to the value of an octal string
    +
    +
    setOctValListener() - Method in class bitchanger.gui.controller.ConverterController
    +
    +
    Sets the listener for ConverterController.tfOct, to convert the input and update the other text fields immediately.
    +
    +
    setPreviousBtnAction() - Method in class bitchanger.gui.controller.AlphaNumKeysController
    +
    +
    Sets the function to scroll the alpha keyboard backwards, by clicking on the button AlphaNumKeysController.previousBtn.
    +
    +
    setPreviousBtnDisable() - Method in class bitchanger.gui.controller.AlphaNumKeysController
    +
    +
    Sets a ChangeListener at the first alpha button, to control if the beginning of the alphabet is reached.
    +
    +
    setRowConstraints() - Method in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    setScreenItems() - Method in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    setSignAction() - Method in class bitchanger.gui.controller.ConverterController
    +
    +
    Turns the sign of ConverterController.value by clicking onto the sign button and updates all text fields.
    +
    +
    setSimulateKeyEvents() - Method in class bitchanger.gui.controller.AlphaNumKeysController
    +
    +
    Sets actions of all alphanumeric buttons and of the comma button, to simulate a keyboard with thse buttons.
    +
    +
    setSimulateKeyOnAction(Button) - Method in class bitchanger.gui.controller.AlphaNumKeysController
    +
    +
    Adds a function to a button, so that this button simulates a feedback by clicking it.
    +
    +
    setSpinnerActions() - Method in class bitchanger.gui.controller.ConverterController
    +
    +
    Updates the base of ConverterController.tfAny, if the valueProperty of ConverterController.anyBase changes.
    +
    +
    setStageSize() - Method in class bitchanger.main.PrimaryFXApp
    +
    +
    Adjusts the minimum and maximum size of the window to the size of the current scene (currentView).
    +
    +
    setStylesheet(Style) - Method in class bitchanger.preferences.Preferences
    +
     
    +
    setStylesheet(String) - Method in class bitchanger.preferences.Preferences
    +
     
    +
    setSVG(SVGPath) - Method in class bitchanger.gui.controls.SVGIcon
    +
     
    +
    setSVGStyle(SVGIcon, SVGPath, SVGPath, Style) - Static method in class bitchanger.util.IconFactory
    +
     
    +
    setTextFieldActions() - Method in class bitchanger.gui.controller.ConverterController
    +
    +
    Sets listener for the text fields, to convert the input in any numeral system immediately.
    +
    +
    setTextListener() - Method in class bitchanger.gui.controls.ValueButton
    +
    +
    Checks the textProperty and activates or disables this button if the new text + agrees or disagrees to the baseProperty
    +
    +
    setTexts(boolean, boolean, boolean, boolean, boolean) - Method in class bitchanger.gui.controller.ConverterController
    +
    +
    Refreshes the texts of the chosen text fields to the new value of ConverterController.value.
    +
    +
    setTFColumnSpan - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    setTFSelection() - Method in class bitchanger.gui.controller.ConverterController
    +
    +
    Updates the attribute ConverterController.focusedTF by selecting a text filed with the cursor + and connects ConverterController.baseProperty with the baseProperty of the text field.
    +
    +
    setValue(String, int) - Method in interface bitchanger.calculations.ChangeableNumber
    +
    +
    Sets the value of this ChangeableNumber to a value of any numeral system
    +
    +
    setValue(String, int) - Method in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Sets the value of this ChangeableNumber to a value of any numeral system
    +
    +
    showAboutAction() - Method in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    showFullscreen - Variable in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    showVersionAction() - Method in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    SIGN_BTN_KEY - Static variable in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    signBtn - Variable in class bitchanger.gui.controller.AlphaNumKeysController
    +
    +
    Button that is used to change the sign of the entered number
    +
    +
    signBtn - Variable in class bitchanger.gui.controller.ConverterController
    +
    +
    Button that action is to change the sign of the number
    +
    +
    signBtnKey - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    SimpleChangeableNumber - Class in bitchanger.calculations
    +
    +
    The class SimpleChangeableNumber offers a complete implementation of ChangeableNumber.
    +
    +
    SimpleChangeableNumber() - Constructor for class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Generates a new instance with 0 as wrapped value
    +
    +
    SimpleChangeableNumber(String) - Constructor for class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Generates a new instance that represents the committed decimal value
    +
    +
    simulateKey(Button, KeyCode) - Method in class bitchanger.gui.controller.AlphaNumKeysController
    +
    +
    Simulates the click on a key of the keyboard with the specific keycode and fires the KeyEvents + KeyEvent.KEY_PRESSED, KeyEvent.KEY_TYPED und KeyEvent.KEY_RELEASED successively.
    +
    +
    simulateKeyEvents(Button, Node, Scene, String, String, KeyCode) - Method in class bitchanger.gui.controller.ControllerBase
    +
     
    +
    simulateKeyEvents(Button, Node, Scene, String, String, KeyCode, boolean, boolean, boolean, boolean) - Method in class bitchanger.gui.controller.ControllerBase
    +
     
    +
    spacingProperty - Variable in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    splitInBlocks(String, int) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Splits the String value into blocks of the given length.
    +
    +
    start(Stage) - Method in class bitchanger.main.PrimaryFXApp
    +
    +
    This method creates the content for the main window and opens it.
    +
    +
    store(File) - Method in class bitchanger.preferences.Preferences
    +
    +
    Stores all preferences into the given file as XML document
    +
    +
    storeCaretPosition(ObservableValue<? extends Number>, Number, Number) - Method in class bitchanger.gui.controls.ValueField
    +
    +
    Stores the last known CaretPosition to reset it.
    +
    +
    storeCustom() - Static method in class bitchanger.preferences.Preferences
    +
    +
    Stores the current settings in the File Resources.CUSTOM_PREFERENCES
    +
    +
    Style - Enum in bitchanger.preferences
    +
    +
    Enum of different styles that are available as CSS files for javaFX
    +
    +
    Style() - Constructor for enum bitchanger.preferences.Style
    +
     
    +
    styleBindIcon(File, File) - Static method in class bitchanger.util.IconFactory
    +
     
    +
    styleDark - Variable in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    styleLight - Variable in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    styleMenu - Variable in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    styleProperty - Variable in class bitchanger.preferences.Preferences
    +
    +
    Property for the selected Style of the Stylesheet
    +
    +
    stylesheetProperty - Variable in class bitchanger.preferences.Preferences
    +
    +
    Property for the selected Stylesheet
    +
    +
    SUN_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    SUN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    SVGIcon - Class in bitchanger.gui.controls
    +
     
    +
    SVGIcon() - Constructor for class bitchanger.gui.controls.SVGIcon
    +
     
    +
    SVGIcon(File) - Constructor for class bitchanger.gui.controls.SVGIcon
    +
     
    +
    SVGIcon(SVGPath) - Constructor for class bitchanger.gui.controls.SVGIcon
    +
     
    +
    switchFullscreenAction() - Method in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    switchIndicateFractionalInaccuracyAction() - Method in class bitchanger.gui.controller.ConverterMenuController
    +
     
    +
    SYNC_1_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    SYNC_2_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/index-files/index-19.html b/doc/0.1.4/en_private/index-files/index-19.html new file mode 100644 index 0000000..f7ed4ad --- /dev/null +++ b/doc/0.1.4/en_private/index-files/index-19.html @@ -0,0 +1,283 @@ + + + + + +T-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    T

    +
    +
    TEXT_FIELD_ROW - bitchanger.gui.views.AlphaNumGridView.ConstraintType
    +
     
    +
    TEXTFIELD_1_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    TEXTFIELD_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    textFieldMap - Variable in class bitchanger.gui.controller.ControllerBase
    +
     
    +
    TF_ANY_KEY - Static variable in class bitchanger.gui.views.ConverterView
    +
     
    +
    TF_BIN_KEY - Static variable in class bitchanger.gui.views.ConverterView
    +
     
    +
    TF_DEC_KEY - Static variable in class bitchanger.gui.views.ConverterView
    +
     
    +
    TF_DEC_KEY - Static variable in class bitchanger.gui.views.IEEEView
    +
     
    +
    TF_HEX_KEY - Static variable in class bitchanger.gui.views.ConverterView
    +
     
    +
    TF_IEEE_KEY - Static variable in class bitchanger.gui.views.IEEEView
    +
     
    +
    TF_KEYS - Static variable in class bitchanger.gui.views.ConverterView
    +
     
    +
    TF_OCT_KEY - Static variable in class bitchanger.gui.views.ConverterView
    +
     
    +
    tfAny - Variable in class bitchanger.gui.controller.ConverterController
    +
    +
    Text field for the representation of a number of any base
    +
    +
    tfAnyKey - Variable in class bitchanger.gui.views.ConverterView
    +
     
    +
    tfBin - Variable in class bitchanger.gui.controller.ConverterController
    +
    +
    Text field for the binary representation
    +
    +
    tfBinKey - Variable in class bitchanger.gui.views.ConverterView
    +
     
    +
    tfColumn - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    tfDec - Variable in class bitchanger.gui.controller.ConverterController
    +
    +
    Text field for the decimal representation
    +
    +
    tfDecKey - Variable in class bitchanger.gui.views.ConverterView
    +
     
    +
    tfDecKey - Variable in class bitchanger.gui.views.IEEEView
    +
     
    +
    tfHex - Variable in class bitchanger.gui.controller.ConverterController
    +
    +
    Text field for the hexadecimal representation
    +
    +
    tfHexKey - Variable in class bitchanger.gui.views.ConverterView
    +
     
    +
    tfIEEEKey - Variable in class bitchanger.gui.views.IEEEView
    +
     
    +
    tfKeys - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    tfMap - Variable in class bitchanger.gui.views.ViewBase
    +
     
    +
    tfMaxHeightProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    tfMinHeightProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    tfOct - Variable in class bitchanger.gui.controller.ConverterController
    +
    +
    Text field for the octal representation
    +
    +
    tfOctKey - Variable in class bitchanger.gui.views.ConverterView
    +
     
    +
    toBaseString(int) - Method in interface bitchanger.calculations.ChangeableNumber
    +
    +
    Returns the string representation of this ChangeableNumber to any base.
    +
    +
    toBaseString(int) - Method in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Returns the string representation of this ChangeableNumber to any base.
    +
    +
    toBinString() - Method in interface bitchanger.calculations.ChangeableNumber
    +
    +
    Returns the string representation of this ChangeableNumber as a binary string.
    +
    +
    toBinString() - Method in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Returns the string representation of this ChangeableNumber as a binary string.
    +
    +
    toDecString() - Method in interface bitchanger.calculations.ChangeableNumber
    +
    +
    Returns the string representation of this ChangeableNumber as a decimal string.
    +
    +
    toDecString() - Method in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Returns the string representation of this ChangeableNumber as a decimal string.
    +
    +
    toHexString() - Method in interface bitchanger.calculations.ChangeableNumber
    +
    +
    Returns the string representation of this ChangeableNumber as a hexadecimal string.
    +
    +
    toHexString() - Method in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Returns the string representation of this ChangeableNumber as a hexadecimal string.
    +
    +
    toOctString() - Method in interface bitchanger.calculations.ChangeableNumber
    +
    +
    Returns the string representation of this ChangeableNumber as an octal string.
    +
    +
    toOctString() - Method in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Returns the string representation of this ChangeableNumber as an octal string.
    +
    +
    toString() - Method in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Returns a String that includes the hexadecimal, decimal, octal and binary + presentation of the wrapped value.
    +
    +
    TRASH_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    TRASH_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    TRASH_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    TRASH_X_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    TRASH_X_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    TriConsumer<T,​U,​V> - Interface in bitchanger.util
    +
    +
    Represents an operation that accepts three input arguments and returns no result.
    +
    +
    trimToNumberString(String) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Deletes the FRACTIONAL_PRECISION_INDICATOR and spaces and converts all letters to uppercase.
    +
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/index-files/index-2.html b/doc/0.1.4/en_private/index-files/index-2.html new file mode 100644 index 0000000..c20a2a6 --- /dev/null +++ b/doc/0.1.4/en_private/index-files/index-2.html @@ -0,0 +1,287 @@ + + + + + +B-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    B

    +
    +
    backspaceBtnKey - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    backspcBtn - Variable in class bitchanger.gui.controller.ConverterController
    +
     
    +
    baseProperty - Variable in class bitchanger.gui.controller.ConverterController
    +
    +
    Property to adjust the base of the currently focused text field
    +
    +
    baseProperty - Variable in class bitchanger.gui.controls.ValueButton
    +
    +
    Property that is used to adjust the base of the current numeral system
    +
    +
    baseProperty - Variable in class bitchanger.gui.controls.ValueField
    +
    +
    Property for the base of the numeral system
    +
    +
    BaseSpinner - Class in bitchanger.gui.controls
    +
    +
    Spinner for choosing the base of a numeral system.
    +
    +
    BaseSpinner() - Constructor for class bitchanger.gui.controls.BaseSpinner
    +
    +
    Produces a BaseSpinner whose maximum and minimum adjustable base is given through the constant + ConvertingNumbers.MIN_BASE and ConvertingNumbers.MAX_BASE.
    +
    +
    baseSpinnerKey - Variable in class bitchanger.gui.views.ConverterView
    +
     
    +
    baseToDec(int, String) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Converts the submitted number value of any base base into a number of the base 10 in double.
    +
    +
    baseToDecFractionalPart(int, String) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Converts the submitted decimal place of a number of any base into the decimal system.
    +
    +
    baseToDecIntPart(int, String) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Converts the submitted number integerPart of any base base into the decimal system.
    +
    +
    baseToDecString(int, String) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Converts the submitted number value of any base base into a number of the decimal system as string representation.
    +
    +
    baseToDecString(int, String, char) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Converts the submitted number value of any base base into a number of the decimal system as string representation.
    +
    +
    BasicMenuBar - Class in bitchanger.gui.controls
    +
    +
    Basic MenuBar containing the MenuItems that are generally required.
    +
    +
    BasicMenuBar() - Constructor for class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Constructs a new BasicMenuBar with all MenuItems.
    +
    +
    BasicMenuBar(ControllableApplication) - Constructor for class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Constructs a new BasicMenuBar with all MenuItems that are already assigned the basic functions.
    +
    +
    BasicMenuController - Class in bitchanger.gui.controller
    +
     
    +
    BasicMenuController(BasicMenuBar, ControllableApplication) - Constructor for class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    bindProperties() - Method in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    bindScaleProperty(ObservableValue<? extends Number>, Number, Number) - Method in class bitchanger.gui.controls.UnfocusedButton
    +
     
    +
    binValue - Variable in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    wrapped value as binary String representation
    +
    +
    bitchanger.calculations - package bitchanger.calculations
    +
    +
    Contains all classes that are needed for calculating the data.
    +
    +
    bitchanger.gui.controller - package bitchanger.gui.controller
    +
    +
    Provides controller, that gives functions to the views.
    +
    +
    bitchanger.gui.controls - package bitchanger.gui.controls
    +
    +
    Allocates adjusted operating elements and functions for the user interface
    +
    +
    bitchanger.gui.views - package bitchanger.gui.views
    +
    +
    Offers different views that can be represented on a graphical surface
    +
    +
    bitchanger.main - package bitchanger.main
    +
    +
    Contains the launcher with the main method and the JavaFX applications for starting the graphical user interface.
    +
    +
    bitchanger.preferences - package bitchanger.preferences
    +
    +
    With classes that are included in this package, components have access to global settings and can adjust these.
    +
    +
    bitchanger.util - package bitchanger.util
    +
    +
    Contains Classes with general and cross-class methods.
    +
    +
    BitchangerLauncher - Class in bitchanger.main
    +
    +
    This class contains the main method that is the entry point for the application.
    +
    +
    BitchangerLauncher() - Constructor for class bitchanger.main.BitchangerLauncher
    +
     
    +
    btnMap - Variable in class bitchanger.gui.views.ViewBase
    +
     
    +
    btnMaxHeigthProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    btnMaxWidthProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    btnMinHeigthProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    btnMinWidthProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    btnSpacingProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    btnTexts - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    buildScenegraph() - Method in class bitchanger.gui.views.ViewBase
    +
     
    +
    BUTTON_COLUMN - bitchanger.gui.views.AlphaNumGridView.ConstraintType
    +
     
    +
    BUTTON_ROW - bitchanger.gui.views.AlphaNumGridView.ConstraintType
    +
     
    +
    buttonList - Variable in class bitchanger.gui.controller.AlphaNumKeysController
    +
    +
    List that contains all buttons off the keyboard matrix
    +
    +
    buttonList - Variable in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    buttonMap - Variable in class bitchanger.gui.controller.ControllerBase
    +
     
    +
    buttonMap - Variable in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/index-files/index-20.html b/doc/0.1.4/en_private/index-files/index-20.html new file mode 100644 index 0000000..7a154c8 --- /dev/null +++ b/doc/0.1.4/en_private/index-files/index-20.html @@ -0,0 +1,178 @@ + + + + + +U-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    U

    +
    +
    UnfocusedButton - Class in bitchanger.gui.controls
    +
    +
    Button that does not get focus by clicking and has a rectangle without rounded corners as basic form.
    +
    +
    UnfocusedButton() - Constructor for class bitchanger.gui.controls.UnfocusedButton
    +
    +
    Creates an UnfocusedButton with an empty string as label
    +
    +
    UnfocusedButton(String) - Constructor for class bitchanger.gui.controls.UnfocusedButton
    +
    +
    Creates an UnfocusedButton with a specific string as label
    +
    +
    UnfocusedButton(String, Node) - Constructor for class bitchanger.gui.controls.UnfocusedButton
    +
    +
    Creates an UnfocusedButton with a specific string and an icon as label
    +
    +
    UnfocusedButton(Node) - Constructor for class bitchanger.gui.controls.UnfocusedButton
    +
     
    +
    UNKNOWN - bitchanger.preferences.Style
    +
    +
    Constant for a unknown layout
    +
    +
    updatePadding(ObservableValue<? extends Number>, Number, Number) - Method in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    useClearAndBackBtn - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/index-files/index-21.html b/doc/0.1.4/en_private/index-files/index-21.html new file mode 100644 index 0000000..02ac34b --- /dev/null +++ b/doc/0.1.4/en_private/index-files/index-21.html @@ -0,0 +1,274 @@ + + + + + +V-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    V

    +
    +
    value - Variable in class bitchanger.gui.controller.ConverterController
    +
    +
    Number which gets converted into any numeral system
    +
    +
    ValueButton - Class in bitchanger.gui.controls
    +
    +
    UnfocusedButton with an extra Property to adjust the base.
    +
    +
    ValueButton() - Constructor for class bitchanger.gui.controls.ValueButton
    +
    +
    Creates a ValueButton with an empty string as caption
    +
    +
    ValueButton(String) - Constructor for class bitchanger.gui.controls.ValueButton
    +
    +
    Creates a ValueButton with a specific string as caption
    +
    +
    ValueButton(String, Node) - Constructor for class bitchanger.gui.controls.ValueButton
    +
    +
    Creates a ValueButton with a specific string and an icon as caption
    +
    +
    ValueField - Class in bitchanger.gui.controls
    +
    +
    Text field in which a number of a certain numeral system can be entered.
    +
    +
    ValueField() - Constructor for class bitchanger.gui.controls.ValueField
    +
    +
    Creates a new ValueField with empty text and the base 10
    +
    +
    ValueField(int) - Constructor for class bitchanger.gui.controls.ValueField
    +
    +
    Creates a new ValueFiled with an empty text and the committed base
    +
    +
    ValueField(String) - Constructor for class bitchanger.gui.controls.ValueField
    +
    +
    Creates a new ValueField that contains the committed text and the base 10
    +
    +
    ValueField(String, int) - Constructor for class bitchanger.gui.controls.ValueField
    +
    +
    Creates a new ValueField that contains the committed text and the committed base
    +
    +
    valueOf(String) - Static method in enum bitchanger.gui.controls.InformationDialog.InformationType
    +
    +
    Returns the enum constant of this type with the specified name.
    +
    +
    valueOf(String) - Static method in enum bitchanger.gui.views.AlphaNumGridView.ConstraintType
    +
    +
    Returns the enum constant of this type with the specified name.
    +
    +
    valueOf(String) - Static method in enum bitchanger.preferences.Comma
    +
    +
    Returns the enum constant of this type with the specified name.
    +
    +
    valueOf(String) - Static method in enum bitchanger.preferences.Style
    +
    +
    Returns the enum constant of this type with the specified name.
    +
    +
    valueOfDigit(char) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Calculates the place value of represented character.
    +
    +
    values() - Static method in enum bitchanger.gui.controls.InformationDialog.InformationType
    +
    +
    Returns an array containing the constants of this enum type, in +the order they are declared.
    +
    +
    values() - Static method in enum bitchanger.gui.views.AlphaNumGridView.ConstraintType
    +
    +
    Returns an array containing the constants of this enum type, in +the order they are declared.
    +
    +
    values() - Static method in enum bitchanger.preferences.Comma
    +
    +
    Returns an array containing the constants of this enum type, in +the order they are declared.
    +
    +
    values() - Static method in enum bitchanger.preferences.Style
    +
    +
    Returns an array containing the constants of this enum type, in +the order they are declared.
    +
    +
    version - Variable in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    VERSION - bitchanger.gui.controls.InformationDialog.InformationType
    +
     
    +
    VERSION - Static variable in class bitchanger.main.PrimaryFXApp
    +
     
    +
    vgapProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    VIEW_MENU_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Key with which the Menu "Fenster" is associated in the Map BasicMenuBar.menuItemMap
    +
    +
    VIEW_MOVE_TO_SCREEN_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Key with which the MenuItem "Auf Monitor bewegen" is associated in the Map BasicMenuBar.menuItemMap
    +
    +
    VIEW_SHOW_FULLSCREEN_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Key with which the CheckMenuItem "Vollbild" is associated in the Map BasicMenuBar.menuItemMap
    +
    +
    VIEW_STYLE_DARK_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Key with which the MenuItem "Dunkel" is associated in the Map BasicMenuBar.menuItemMap
    +
    +
    VIEW_STYLE_LIGHT_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Key with which the MenuItem "Hell" is associated in the Map BasicMenuBar.menuItemMap
    +
    +
    VIEW_STYLE_MENU_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Key with which the Menu "Stil" is associated in the Map BasicMenuBar.menuItemMap
    +
    +
    Viewable - Interface in bitchanger.gui.views
    +
    +
    The interface Viewable defines the base for a view.
    +
    +
    ViewBase<T extends javafx.scene.Parent> - Class in bitchanger.gui.views
    +
     
    +
    ViewBase(T) - Constructor for class bitchanger.gui.views.ViewBase
    +
     
    +
    ViewBase(T, boolean) - Constructor for class bitchanger.gui.views.ViewBase
    +
     
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/index-files/index-22.html b/doc/0.1.4/en_private/index-files/index-22.html new file mode 100644 index 0000000..8984b31 --- /dev/null +++ b/doc/0.1.4/en_private/index-files/index-22.html @@ -0,0 +1,162 @@ + + + + + +W-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    W

    +
    +
    WHITESPACE_ROW - bitchanger.gui.views.AlphaNumGridView.ConstraintType
    +
     
    +
    whiteSpaceHeigthProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    WINDOW_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    WINDOW_THIN_2_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    WINDOW_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/index-files/index-23.html b/doc/0.1.4/en_private/index-files/index-23.html new file mode 100644 index 0000000..e2081a0 --- /dev/null +++ b/doc/0.1.4/en_private/index-files/index-23.html @@ -0,0 +1,176 @@ + + + + + +X-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    X

    +
    +
    X_MARK_1_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    X_MARK_2_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    X_MARK_ARROW_LEFT_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    X_MARK_ARROW_LEFT_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    X_MARK_CIRCLE_1_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    X_MARK_CIRCLE_1_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    X_MARK_CIRCLE_2_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    X_MARK_CIRCLE_2_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    X_MARK_CIRCLE_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    X_MARK_SQUARE_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    X_MARK_SQUARE_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    X_MARK_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/index-files/index-24.html b/doc/0.1.4/en_private/index-files/index-24.html new file mode 100644 index 0000000..aa4ac8c --- /dev/null +++ b/doc/0.1.4/en_private/index-files/index-24.html @@ -0,0 +1,168 @@ + + + + + +Z-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    Z

    +
    +
    ZERO_BTN_KEY - Static variable in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    zeroBtn - Variable in class bitchanger.gui.controller.AlphaNumKeysController
    +
    +
    Button that is used to enter the number 0
    +
    +
    zeroBtnKey - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    ZOOM_IN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ZOOM_IN_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ZOOM_OUT_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ZOOM_OUT_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/index-files/index-3.html b/doc/0.1.4/en_private/index-files/index-3.html new file mode 100644 index 0000000..80dd24c --- /dev/null +++ b/doc/0.1.4/en_private/index-files/index-3.html @@ -0,0 +1,370 @@ + + + + + +C-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    C

    +
    +
    Calculable - Interface in bitchanger.calculations
    +
     
    +
    CALCULATOR_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    CALCULATOR_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    CALCULATOR_SYMBOLS_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    CALCULATOR_SYMBOLS_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    CALCULATOR_VIEW_KEY - Static variable in class bitchanger.main.PrimaryFXApp
    +
     
    +
    calculatorView - Variable in class bitchanger.main.PrimaryFXApp
    +
    +
    View for calculating with number systems
    +
    +
    CalculatorView - Class in bitchanger.gui.views
    +
     
    +
    CalculatorView() - Constructor for class bitchanger.gui.views.CalculatorView
    +
     
    +
    center - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    ChangeableNumber - Interface in bitchanger.calculations
    +
    +
    Interface that defines methods to convert numbers from any numeral system into another numeral system
    +
    +
    changeStyleAction() - Method in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    changeToKeyboard() - Method in class bitchanger.gui.controller.AlphaNumKeysController
    +
    +
    Changes the keyboard layout into the alphabetic view
    +
    +
    changeToNums() - Method in class bitchanger.gui.controller.AlphaNumKeysController
    +
    +
    Changes the keyboard layout into the combination consisting out of six letters and numbers between 0 and 10.
    +
    +
    changeToViewAction(MenuItem, Viewable) - Method in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    changeView(Viewable) - Method in interface bitchanger.gui.controller.ControllableApplication
    +
    +
    Changes the primaryStage's Scene to the Scene of the given Viewable
    +
    +
    checkText(ObservableValue<? extends String>, String, String) - Method in class bitchanger.gui.controls.ValueField
    +
    +
    Checks if the entered text agree to the base and resets the input if there was entered an illegal character.
    +
    +
    checkValue(int, String) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Checks if the submitted string value represents a number to the required base base and + throws an exception, if this is not given.
    +
    +
    clearBtn - Variable in class bitchanger.gui.controller.ConverterController
    +
    +
    Button to delete or remove ConverterController.value
    +
    +
    clearBtnKey - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    COLUMN_COUNT - Static variable in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    comma - Variable in enum bitchanger.preferences.Comma
    +
    +
    Wrapped comma sign
    +
    +
    Comma - Enum in bitchanger.preferences
    +
    +
    Enumeration of the wrapper class, that represents the character for a comma.
    +
    +
    Comma(char) - Constructor for enum bitchanger.preferences.Comma
    +
    +
    Initialization of the comma sign in the constructor
    +
    +
    COMMA_BTN_KEY - Static variable in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    COMMA_DE - bitchanger.preferences.Comma
    +
    +
    Constant that represents the German comma (',')
    +
    +
    COMMA_EN - bitchanger.preferences.Comma
    +
    +
    Constant that represents the English comma ('.')
    +
    +
    commaBtn - Variable in class bitchanger.gui.controller.AlphaNumKeysController
    +
    +
    Button that is used to enter a comma
    +
    +
    commaBtn - Variable in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    commaBtnKey - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    commaProperty - Variable in class bitchanger.preferences.Preferences
    +
    +
    Property for comma character
    +
    +
    ConstraintType() - Constructor for enum bitchanger.gui.views.AlphaNumGridView.ConstraintType
    +
     
    +
    controllable - Variable in class bitchanger.gui.controller.ControllerBase
    +
     
    +
    Controllable - Interface in bitchanger.gui.controller
    +
    +
    Interface that defines methods to connect a controllable with a controller.
    +
    +
    ControllableApplication - Interface in bitchanger.gui.controller
    +
    +
    Interface that defines methods to connect a Application with a controller.
    +
    +
    controller - Variable in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    controller - Variable in class bitchanger.gui.views.ViewBase
    +
     
    +
    Controller - Interface in bitchanger.gui.controller
    +
    +
    Interface for defining a controller.
    +
    +
    ControllerBase<T extends Controllable> - Class in bitchanger.gui.controller
    +
     
    +
    ControllerBase(T) - Constructor for class bitchanger.gui.controller.ControllerBase
    +
     
    +
    convertDecFractionalToBaseString(int, double, int, char) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Converts decimal places of decimal system into a value of any base as string representation.
    +
    +
    convertDecIntegerToBaseString(int, long) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Converts an integer value of decimal system into a value of any base as string representation.
    +
    +
    CONVERTER_VIEW_KEY - Static variable in class bitchanger.main.PrimaryFXApp
    +
     
    +
    ConverterController - Class in bitchanger.gui.controller
    +
    +
    Controller that provides the function for a ConverterView.
    +
    +
    ConverterController(ConverterView) - Constructor for class bitchanger.gui.controller.ConverterController
    +
    +
    Construct a new controller for a ConverterView and links the necessary attributes with + references to the operating elements of the ConverterView.
    +
    +
    ConverterMenuBar - Class in bitchanger.gui.controls
    +
     
    +
    ConverterMenuBar() - Constructor for class bitchanger.gui.controls.ConverterMenuBar
    +
     
    +
    ConverterMenuBar(ControllableApplication) - Constructor for class bitchanger.gui.controls.ConverterMenuBar
    +
     
    +
    ConverterMenuController - Class in bitchanger.gui.controller
    +
     
    +
    ConverterMenuController(BasicMenuBar, ControllableApplication) - Constructor for class bitchanger.gui.controller.ConverterMenuController
    +
     
    +
    converterView - Variable in class bitchanger.main.PrimaryFXApp
    +
    +
    View for converting of numeral systems
    +
    +
    ConverterView - Class in bitchanger.gui.views
    +
     
    +
    ConverterView() - Constructor for class bitchanger.gui.views.ConverterView
    +
     
    +
    ConvertingNumbers - Class in bitchanger.calculations
    +
    +
    The ConvertingNumbers class contains methods for performing conversions of numbers with different numeral systems.
    +
    +
    ConvertingNumbers() - Constructor for class bitchanger.calculations.ConvertingNumbers
    +
    +
    Do not let anyone instantiate this class
    +
    +
    COPYRIGHT_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    COPYRIGHT_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    createAboutDialog() - Method in class bitchanger.gui.controls.InformationDialog
    +
     
    +
    createAnyBase() - Method in class bitchanger.gui.views.ConverterView
    +
     
    +
    createButtonMatrix() - Method in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    createButtons() - Method in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    createButtons() - Method in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    createControlButtons() - Method in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    createLabels() - Method in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    createMainMatrix() - Method in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    createMenuHelp() - Method in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Creates the Menu "Hilfe" with its Items "Ãœber" and "Version"
    +
    +
    createMenuModus() - Method in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Creates the Menu "Modus" with its Items "Umrechner", "IEEE" and "Berechnungen"
    +
    +
    createMenuOptions() - Method in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Creates the Menu "Optionen" with its Items "Komma wählen" and the sub-elements + "deutsch" and "englisch"
    +
    +
    createMenuView() - Method in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Creates the Menu "Ansicht" with its Items "Stil", "Auf Monitor bewegen" and "Vollbild"
    +
    +
    createScenegraph() - Method in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    createScenegraph() - Method in class bitchanger.gui.views.ConverterView
    +
    createScenegraph() - Method in class bitchanger.gui.views.ViewBase
    +
     
    +
    createTextFields() - Method in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    createVersionDialog() - Method in class bitchanger.gui.controls.InformationDialog
    +
     
    +
    createXMLTree(Document, Element) - Method in class bitchanger.preferences.Preferences
    +
    +
    Adds all settings of these Preferences to the XML tree of the Element xmlRoot
    +
    +
    currentViewProperty - Variable in class bitchanger.main.PrimaryFXApp
    +
    +
    Property of the currently displayed View
    +
    +
    CUSTOM_PREFERENCES - Static variable in class bitchanger.util.Resources
    +
     
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/index-files/index-4.html b/doc/0.1.4/en_private/index-files/index-4.html new file mode 100644 index 0000000..772da2f --- /dev/null +++ b/doc/0.1.4/en_private/index-files/index-4.html @@ -0,0 +1,187 @@ + + + + + +D-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    D

    +
    +
    DARK - bitchanger.preferences.Style
    +
    +
    Constant for a dark layout
    +
    +
    DARK_CSS - Static variable in class bitchanger.util.Resources
    +
     
    +
    decToBase(int, String) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Converts the submitted number decValue of base 10 into a number of any base newBase as string representation.
    +
    +
    decToBase(int, String, char) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Converts the submitted number decValue of base 10 into a number of any base newBase as string representation.
    +
    +
    decToBase(int, String, char, int) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Converts the submitted number decValue of base 10 into a number of any base newBase as string representation.
    +
    +
    decToBaseBlocks(int, String, char, int) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Converts the submitted number decValue of base 10 into a number of any base newBase as string representation + and splits the number into blockt with given length.
    +
    +
    decValue - Variable in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    wrapped value as decimal String representation
    +
    +
    DEFAULT_GRAPHIC_SCALE_FACTOR - Static variable in class bitchanger.gui.controls.UnfocusedButton
    +
     
    +
    DEFAULT_PREFERENCES - Static variable in class bitchanger.util.Resources
    +
     
    +
    digitOfValue(int) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Calculates the char for a value.
    +
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/index-files/index-5.html b/doc/0.1.4/en_private/index-files/index-5.html new file mode 100644 index 0000000..a7cf605 --- /dev/null +++ b/doc/0.1.4/en_private/index-files/index-5.html @@ -0,0 +1,172 @@ + + + + + +E-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    E

    +
    +
    EMPTY_BUTTON_MAP - Static variable in interface bitchanger.gui.controller.Controllable
    +
    +
    empty and immutable map that can be used as placeholder if any Controllable does not have to pass buttons to its Controller
    +
    +
    EMPTY_NODE_MAP - Static variable in interface bitchanger.gui.controller.Controllable
    +
    +
    empty and immutable map that can be used as placeholder if any Controllable does not have to pass nodes to its Controller
    +
    +
    EMPTY_TEXTFIELD_MAP - Static variable in interface bitchanger.gui.controller.Controllable
    +
    +
    empty and immutable map that can be used as placeholder if any Controllable does not have to pass textfields to its Controller
    +
    +
    ENTER_FULLSCREEN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ERASER_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ERASER_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    EXIT_FULLSCREEN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/index-files/index-6.html b/doc/0.1.4/en_private/index-files/index-6.html new file mode 100644 index 0000000..b11d247 --- /dev/null +++ b/doc/0.1.4/en_private/index-files/index-6.html @@ -0,0 +1,196 @@ + + + + + +F-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    F

    +
    +
    FIRST_COLUMN - bitchanger.gui.views.AlphaNumGridView.ConstraintType
    +
     
    +
    firstColumn - Variable in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    firstColumnWidthProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    firstKeyBtnColumn - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    firstKeyBtnRow - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    firstLabelRow - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    firstRow - Variable in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    firstTFRow - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    focuse(ObservableValue<? extends Boolean>, Boolean, Boolean) - Method in class bitchanger.gui.controls.ValueField
    +
    +
    Removes the indicator for the cut decimal places and resets the CaretPosition to the last known value.
    +
    +
    focusedTF - Variable in class bitchanger.gui.controller.ConverterController
    +
    +
    Auxiliary variable with reference to the current or last focused text field
    +
    +
    focusTF(Event) - Method in class bitchanger.gui.controller.ConverterController
    +
    +
    Focuses the text field ConverterController.focusedTF.
    +
    +
    formatButtons() - Method in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    FRACTIONAL_PRECISION_INDICATOR - Static variable in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Indicator for the cut fractional part in case of converting from decimal system into a system of any base
    +
    +
    FULLSCREEN_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    FXUtils - Class in bitchanger.util
    +
    +
    Utility class to handle objects whose belong to the user interface.
    +
    +
    FXUtils() - Constructor for class bitchanger.util.FXUtils
    +
    +
    Do not let anyone instantiate this class
    +
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/index-files/index-7.html b/doc/0.1.4/en_private/index-files/index-7.html new file mode 100644 index 0000000..fa0486f --- /dev/null +++ b/doc/0.1.4/en_private/index-files/index-7.html @@ -0,0 +1,307 @@ + + + + + +G-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    G

    +
    +
    generateMenuBar() - Method in class bitchanger.gui.views.ConverterView
    +
    generateMenuBar() - Method in interface bitchanger.gui.views.Viewable
    +
     
    +
    generateMenuBar(ControllableApplication) - Method in class bitchanger.gui.views.ConverterView
    +
    generateMenuBar(ControllableApplication) - Method in interface bitchanger.gui.views.Viewable
    +
     
    +
    get() - Method in enum bitchanger.preferences.Comma
    +
    +
    Returns the represented comma sign
    +
    +
    getArrowButtons() - Method in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    getBase() - Method in class bitchanger.gui.controls.ValueField
    +
    +
    Returns the value of ValueField.baseProperty
    +
    +
    getBaseProperty() - Method in class bitchanger.gui.controls.ValueButton
    +
    +
    Returns the value of the ValueButton.baseProperty
    +
    +
    getBaseProperty() - Method in class bitchanger.gui.controls.ValueField
    +
    +
    Returns the ValueField.baseProperty of this ValueField
    +
    +
    getButtonMap() - Method in interface bitchanger.gui.controller.Controllable
    +
    +
    Returns a Map with all buttons of the controllable.
    +
    +
    getButtonMap() - Method in class bitchanger.gui.controls.AlphaNumKeys
    +
    +
    Returns a Map with all buttons of the controllable.
    +
    +
    getButtonMap() - Method in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Returns a Map with all buttons of the controllable.
    +
    +
    getButtonMap() - Method in class bitchanger.gui.views.ViewBase
    +
    +
    Returns a Map with all buttons of the controllable.
    +
    +
    getButtonMatrix() - Method in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    getComma() - Method in class bitchanger.preferences.Preferences
    +
    +
    Returns the selected character for comma
    +
    +
    getConstructorForArgs(Class<? extends Controller>, Class<?>[], Object[]) - Static method in interface bitchanger.gui.controller.Controller
    +
     
    +
    getCurrentViewProperty() - Method in interface bitchanger.gui.controller.ControllableApplication
    +
    +
    Returns the CurrentViewProperty
    +
    +
    getCurrentViewProperty() - Method in class bitchanger.main.PrimaryFXApp
    +
    +
    Returns the CurrentViewProperty
    +
    +
    getFirstComma(String) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Checks if the submitted string firstly contains a German comma (,) or an English comma (.).
    +
    +
    getMaxHeigth() - Method in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Indicates the maximum height of the view
    +
    +
    getMaxHeigth() - Method in interface bitchanger.gui.views.Viewable
    +
    +
    Indicates the maximum height of the view
    +
    +
    getMaxWidth() - Method in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Indicates the maximum width of the view
    +
    +
    getMaxWidth() - Method in interface bitchanger.gui.views.Viewable
    +
    +
    Indicates the maximum width of the view
    +
    +
    getMinHeigth() - Method in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Indicates the minimum height of the view
    +
    +
    getMinHeigth() - Method in interface bitchanger.gui.views.Viewable
    +
    +
    Indicates the minimum height of the view
    +
    +
    getMinWidth() - Method in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Indicates the minimum width of the view
    +
    +
    getMinWidth() - Method in interface bitchanger.gui.views.Viewable
    +
    +
    Indicates the minimum width of the view
    +
    +
    getNodeMap() - Method in interface bitchanger.gui.controller.Controllable
    +
    +
    Returns a Map with all elements (Nodes) of the controllable, that are not buttons or text fields and are required in the controller.
    +
    +
    getNodeMap() - Method in class bitchanger.gui.controls.AlphaNumKeys
    +
    +
    Returns a Map with all elements (Nodes) of the controllable, that are not buttons or text fields and are required in the controller.
    +
    +
    getNodeMap() - Method in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Returns a Map with all elements (Nodes) of the controllable, that are not buttons or text fields and are required in the controller.
    +
    +
    getNodeMap() - Method in class bitchanger.gui.views.ViewBase
    +
    +
    Returns a Map with all elements (Nodes) of the controllable, that are not buttons or text fields and are required in the controller.
    +
    +
    getPrefs() - Static method in class bitchanger.preferences.Preferences
    +
    +
    Returns the current settings
    +
    +
    getPrimaryStage() - Method in interface bitchanger.gui.controller.ControllableApplication
    +
     
    +
    getPrimaryStage() - Method in class bitchanger.main.PrimaryFXApp
    +
    getResourceAsExternalForm(String) - Static method in class bitchanger.util.Resources
    +
     
    +
    getResourceAsFile(String) - Static method in class bitchanger.util.Resources
    +
     
    +
    getScene() - Method in interface bitchanger.gui.views.Viewable
    +
    +
    Returns the represented Scene
    +
    +
    getScene() - Method in class bitchanger.gui.views.ViewBase
    +
    +
    Returns the represented Scene
    +
    +
    getTextFieldMap() - Method in interface bitchanger.gui.controller.Controllable
    +
    +
    Returns a Map with all text fields of the controllable.
    +
    +
    getTextFieldMap() - Method in class bitchanger.gui.controls.AlphaNumKeys
    +
    +
    Returns a Map with all text fields of the controllable.
    +
    +
    getTextFieldMap() - Method in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Returns a Map with all text fields of the controllable.
    +
    +
    getTextFieldMap() - Method in class bitchanger.gui.views.ViewBase
    +
    +
    Returns a Map with all text fields of the controllable.
    +
    +
    getViewable(String) - Method in interface bitchanger.gui.controller.ControllableApplication
    +
    +
    Returns the view that is associated to the string key
    +
    +
    getViewable(String) - Method in class bitchanger.main.PrimaryFXApp
    +
    +
    Returns the view that is associated to the string key
    +
    +
    graphicScaleFactorProperty - Variable in class bitchanger.gui.controls.UnfocusedButton
    +
     
    +
    graphicScaleProperty - Variable in class bitchanger.gui.controls.UnfocusedButton
    +
     
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/index-files/index-8.html b/doc/0.1.4/en_private/index-files/index-8.html new file mode 100644 index 0000000..aae67ce --- /dev/null +++ b/doc/0.1.4/en_private/index-files/index-8.html @@ -0,0 +1,186 @@ + + + + + +H-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    H

    +
    +
    hasPath - Variable in class bitchanger.gui.controls.SVGIcon
    +
     
    +
    hasPath() - Method in class bitchanger.gui.controls.SVGIcon
    +
     
    +
    hasSelection() - Method in class bitchanger.gui.controls.ValueField
    +
    +
    Checks if there is a text selection in this ValueField
    +
    +
    hasValidValue() - Method in class bitchanger.gui.controls.BaseSpinner
    +
    +
    Checks if the text inside the editor has a valid value an can be updated with the method Spinner.commitValue().
    +
    +
    HELP_ABOUT_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Key with which the MenuItem "Ãœber" is associated in the Map BasicMenuBar.menuItemMap
    +
    +
    HELP_MENU_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Key with which the Menu "Hilfe" is associated in the Map BasicMenuBar.menuItemMap
    +
    +
    HELP_RESET_PREFS_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Key with which the MenuItem "Einstellungen zurücksetzen" is associated in the Map BasicMenuBar.menuItemMap
    +
    +
    HELP_VERSION_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Key with which the MenuItem "Version" is associated in the Map BasicMenuBar.menuItemMap
    +
    +
    hexValue - Variable in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    wrapped value as hexadecimal String representation
    +
    +
    hgapProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/index-files/index-9.html b/doc/0.1.4/en_private/index-files/index-9.html new file mode 100644 index 0000000..3d8cd8e --- /dev/null +++ b/doc/0.1.4/en_private/index-files/index-9.html @@ -0,0 +1,266 @@ + + + + + +I-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    I

    +
    +
    ICON_LIST - Static variable in class bitchanger.util.Resources
    +
     
    +
    IconFactory - Class in bitchanger.util
    +
     
    +
    IconFactory() - Constructor for class bitchanger.util.IconFactory
    +
    +
    Do not let anyone instantiate this class
    +
    +
    IDEA_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    IDEA_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    IDEA_SPEECH_BUBBLE_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    IDEA_SPEECH_BUBBLE_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    IEEE_VIEW_KEY - Static variable in class bitchanger.main.PrimaryFXApp
    +
     
    +
    IEEEController - Class in bitchanger.gui.controller
    +
     
    +
    IEEEController(IEEEView) - Constructor for class bitchanger.gui.controller.IEEEController
    +
     
    +
    IEEEMenuController - Class in bitchanger.gui.controller
    +
     
    +
    IEEEMenuController(BasicMenuBar, ControllableApplication, IEEEView) - Constructor for class bitchanger.gui.controller.IEEEMenuController
    +
     
    +
    ieeeView - Variable in class bitchanger.main.PrimaryFXApp
    +
    +
    View for conversion with the IEEE standard
    +
    +
    IEEEView - Class in bitchanger.gui.views
    +
     
    +
    IEEEView() - Constructor for class bitchanger.gui.views.IEEEView
    +
     
    +
    indicateFractionalInaccuracy - Variable in class bitchanger.gui.controller.ConverterMenuController
    +
     
    +
    indicateFractionalPrecision() - Method in class bitchanger.preferences.Preferences
    +
    +
    Returns the value of indicateFractionalPrecisionProperty
    +
    +
    indicateFractionalPrecisionProperty - Variable in class bitchanger.preferences.Preferences
    +
    +
    Property for displaying aborted decimal places
    +
    +
    INFO_CIRCLE_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    INFO_CIRCLE_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    INFO_CIRCLE_SIMPLE_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    INFO_CIRCLE_SIMPLE_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    INFO_CIRCLE_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    INFO_SPEECH_BOX_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    INFO_SPEECH_BOX_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    InformationDialog - Class in bitchanger.gui.controls
    +
     
    +
    InformationDialog() - Constructor for class bitchanger.gui.controls.InformationDialog
    +
     
    +
    InformationDialog(InformationDialog.InformationType) - Constructor for class bitchanger.gui.controls.InformationDialog
    +
     
    +
    InformationDialog.InformationType - Enum in bitchanger.gui.controls
    +
     
    +
    InformationType() - Constructor for enum bitchanger.gui.controls.InformationDialog.InformationType
    +
     
    +
    init() - Method in class bitchanger.gui.controls.ValueButton
    +
    +
    Sets listener to activate and disable this button + by the selected base
    +
    +
    init() - Method in class bitchanger.gui.views.ViewBase
    +
     
    +
    initButtons() - Method in class bitchanger.gui.controller.ConverterController
    +
    +
    Searches the necessary references to the buttons of the buttonMap and stores these in the attributes
    +
    +
    initControls() - Method in class bitchanger.gui.controller.AlphaNumKeysController
    +
    initControls() - Method in class bitchanger.gui.controller.BasicMenuController
    +
    initControls() - Method in class bitchanger.gui.controller.ControllerBase
    +
     
    +
    initControls() - Method in class bitchanger.gui.controller.ConverterController
    +
    initControls() - Method in class bitchanger.gui.controller.ConverterMenuController
    +
    initControls() - Method in class bitchanger.gui.controller.IEEEController
    +
    initDecimal(String) - Method in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Sets the wrapped value of this SimpleChangeableNumber to the committed decimal value.
    +
    +
    initShape() - Method in class bitchanger.gui.controls.UnfocusedButton
    +
    +
    Disables the focus for this button and sets rectangle without rounded corners as basic form for this button.
    +
    +
    initTextFields() - Method in class bitchanger.gui.controller.ConverterController
    +
    +
    Searches the necessary references to the text fields of the buttonMap, stores these in the attributes and sets the base of each text field.
    +
    +
    insertSpace(StringBuffer, int) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Splits the StringBuffer sb into blocks with given length
    +
    +
    isArrowButton(Node) - Method in class bitchanger.gui.controller.ConverterController
    +
    +
    Checks if the committed node is one of the button, which is used to scroll the spinner.
    +
    +
    isShowingKeyboard - Variable in class bitchanger.gui.controller.AlphaNumKeysController
    +
    +
    Flag for the currently used keyboard mode
    +
    +
    isValueToBase(int, String) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Checks if value represents a number to the required base base.
    +
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/index.html b/doc/0.1.4/en_private/index.html new file mode 100644 index 0000000..f28424b --- /dev/null +++ b/doc/0.1.4/en_private/index.html @@ -0,0 +1,198 @@ + + + + + +Overview + + + + + + + + + + + + + + + +
    + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Packages 
    PackageDescription
    bitchanger.calculations +
    Contains all classes that are needed for calculating the data.
    +
    bitchanger.gui.controller +
    Provides controller, that gives functions to the views.
    +
    bitchanger.gui.controls +
    Allocates adjusted operating elements and functions for the user interface
    +
    bitchanger.gui.views +
    Offers different views that can be represented on a graphical surface
    +
    bitchanger.main +
    Contains the launcher with the main method and the JavaFX applications for starting the graphical user interface.
    +
    bitchanger.preferences +
    With classes that are included in this package, components have access to global settings and can adjust these.
    +
    bitchanger.util +
    Contains Classes with general and cross-class methods.
    +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/jquery/external/jquery/jquery.js b/doc/0.1.4/en_private/jquery/external/jquery/jquery.js new file mode 100644 index 0000000..9b5206b --- /dev/null +++ b/doc/0.1.4/en_private/jquery/external/jquery/jquery.js @@ -0,0 +1,10364 @@ +/*! + * jQuery JavaScript Library v3.3.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2018-01-20T17:24Z + */ +( function( global, factory ) { + + "use strict"; + + 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 ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var document = window.document; + +var getProto = Object.getPrototypeOf; + +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 fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + return typeof obj === "function" && typeof obj.nodeType !== "number"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + + + + var preservedScriptAttributes = { + type: true, + src: true, + noModule: true + }; + + function DOMEval( code, doc, node ) { + doc = doc || document; + + var i, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + if ( node[ i ] ) { + script[ i ] = node[ i ]; + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.3.1", + + // 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.0 only + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // 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 all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : 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; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + 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(); + }, + + // 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" && !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 = Array.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && Array.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() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + + /* eslint-disable no-unused-vars */ + // See https://github.com/eslint/eslint/issues/6125 + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + DOMEval( code ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android <=4.0 only + 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 ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + 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 length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + 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, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.3 + * https://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-08-08 + */ +(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; + }, + + // 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 + // https://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 + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // 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( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "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 = /[+~]/, + + // 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 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + disabledAncestor = addCombinator( + function( elem ) { + return elem.disabled === true && ("form" in elem || "label" in elem); + }, + { dir: "parentNode", next: "legend" } + ); + +// 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 m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[i] = "#" + nid + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + 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 element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement("fieldset"); + + try { + return !!fn( el ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + // release memory in IE + el = 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 = arr.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 && + a.sourceIndex - b.sourceIndex; + + // 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 :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + disabledAncestor( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * 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, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9-11, Edge + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + if ( preferredDoc !== document && + (subWindow = document.defaultView) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( el ) { + el.className = "i"; + return !el.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( el ) { + el.appendChild( document.createComment("") ); + return !el.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + }); + + // ID filter and find + if ( support.getById ) { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + 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; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( (elem = elems[i++]) ) { + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // 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 ( typeof context.getElementsByClassName !== "undefined" && 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 https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( el ) { + // 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 + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // 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 + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.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 ( !el.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement("input"); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.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 ( el.querySelectorAll(":enabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll(":disabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( el ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[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 self-exclusive + // 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 === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === document || 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 === document ? -1 : + b === document ? 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 document; +}; + +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 && + !compilerCache[ expr + " " ] && + ( !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.escape = function( sel ) { + return (sel + "").replace( rcssescape, fcssescape ); +}; + +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, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + 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 + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && 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 ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + // Use previously-cached element index if available + if ( useCache ) { + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + // 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 ) { + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + uniqueCache[ 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": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( 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, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "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 ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator 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 ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( (oldCache = uniqueCache[ key ]) && + 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 + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + return false; + }; +} + +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 || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + if ( !context && elem.ownerDocument !== document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context || document, 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 ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + 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 only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + 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, + !context || 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( el ) { + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( el ) { + el.innerHTML = ""; + return el.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( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.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( el ) { + return el.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; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var 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; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + 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; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : 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 to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // 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 ( 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 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).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[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + 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.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 = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.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.uniqueSort( 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.uniqueSort( + 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 dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( nodeName( elem, "iframe" ) ) { + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return 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.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], 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" ? + 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, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + 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.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + 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; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).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 = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + 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( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + 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, + + // 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 ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !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 ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // 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 ) ) { + + return this.get( owner, 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, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = 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 getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +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, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.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 = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // 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 + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.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 dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.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 = dataPriv.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 rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + jQuery.contains( elem.ownerDocument, elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + +var 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; +}; + + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + 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 ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // Support: IE <=9 only + option: [ 1, "" ], + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
    " ], + col: [ 2, "", "
    " ], + tr: [ 2, "", "
    " ], + td: [ 3, "", "
    " ], + + _default: [ 0, "", "" ] +}; + +// Support: IE <=9 only +wrapMap.optgroup = wrapMap.option; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + 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 ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // 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 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // 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++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + 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; +} + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // 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: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; +} )(); +var documentElement = document.documentElement; + + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 only +// See #13393 for more info +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, 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 ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + 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 elem; + } + + 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 elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * 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 = dataPriv.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; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, 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 !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + 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 ); + } + } + } + + 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 = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + 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 data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + // Make a writable jQuery.Event from the native event object + var event = jQuery.event.fix( nativeEvent ); + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + handlers = ( dataPriv.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; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + 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.rnamespace || event.rnamespace.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, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + 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 && nodeName( this, "input" ) ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return 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; + } + } + } + } +}; + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, 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: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // 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 || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +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 mouseenter/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; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, 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 ); + } ); + } +} ); + + +var + + /* eslint-disable max-len */ + + // See https://github.com/eslint/eslint/issues/3229 + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, + + /* eslint-enable */ + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return 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 ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +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 ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.access( src ); + pdataCur = dataPriv.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 ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// 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; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + 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: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ 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 || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), doc, node ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1>" ); + }, + + 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: https://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; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + 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 ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + 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 domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, 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 domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + 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 = jQuery.htmlPrefilter( value ); + + 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 ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +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: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + div.style.position = "absolute"; + scrollboxSizeVal = div.offsetWidth === 36 || "absolute"; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // 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"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.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 <=9 - 11 only + // 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 ); + } + }; +} + + +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]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }, + + cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style; + +// Return a css property mapped to a potentially vendor prefixed property +function vendorPropName( name ) { + + // Shortcut for names that are not vendor prefixed + if ( name in emptyStyle ) { + return name; + } + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a property mapped along what jQuery.cssProps suggests or to +// a vendor prefixed property. +function finalPropName( name ) { + var ret = jQuery.cssProps[ name ]; + if ( !ret ) { + ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name; + } + return ret; +} + +function setPositiveNumber( elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + ) ); + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + val = curCSS( elem, dimension, styles ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox; + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + // Check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = valueIsBorderBox && + ( support.boxSizingReliable() || val === elem.style[ dimension ] ); + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + if ( val === "auto" || + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) { + + val = elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ]; + + // offsetWidth/offsetHeight provide border-box values + valueIsBorderBox = true; + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "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: { + "animationIterationCount": true, + "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: {}, + + // 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 = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( 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 = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // 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 was passed in, add the unit (except for certain CSS properties) + if ( type === "number" ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // 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 ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + 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 = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( 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 || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( i, dimension ) { + jQuery.cssHooks[ dimension ] = { + 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" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra && boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ); + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && support.scrollboxSize() === styles.position ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// 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 ( prefix !== "margin" ) { + 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 ( Array.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 ); + } +} ); + + +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 || jQuery.easing._default; + 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; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && 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.nodeType === 1 && + ( 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 only +// 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; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.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 = ( Animation.tweeners[ prop ] || [] ).concat( Animation.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 ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + 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(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + 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 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.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 = Animation.prefilters.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 only + // 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 there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, 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.notifyWith( elem, [ animation, 1, 0 ] ); + 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 = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + 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 ( 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( isHiddenWithinTree ).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 || dataPriv.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 = dataPriv.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 = dataPriv.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 = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + 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 ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/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 = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // 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 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 ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// 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, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/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 ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/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" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + 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 ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", 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. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + 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; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + 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 ( Array.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: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-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 + !option.disabled && + ( !option.parentNode.disabled || + !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 ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // 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 ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = 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( "." ) > -1 ) { + + // 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.rnamespace = 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 && !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() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && 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 ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !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; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + 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 ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + 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 ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = Date.now(); + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + 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 ( Array.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" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( 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, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.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( "&" ); +}; + +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(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* 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( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// 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( rnothtmlwhite ) || []; + + if ( 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: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + 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: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + 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": JSON.parse, + + // 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, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // 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 = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + 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 completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + 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 ); + + // 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 || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // 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 ( completed ) { + 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 + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // 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 || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // 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 ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.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 ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + + +jQuery._evalUrl = function( url ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + "throws": true + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( 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 ( 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 htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + 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 ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = 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(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + 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( "\r\n"; + +// inject VBScript +document.write(IEBinaryToArray_ByteStr_Script); + +global.JSZipUtils._getBinaryFromXHR = function (xhr) { + var binary = xhr.responseBody; + var byteMapping = {}; + for ( var i = 0; i < 256; i++ ) { + for ( var j = 0; j < 256; j++ ) { + byteMapping[ String.fromCharCode( i + (j << 8) ) ] = + String.fromCharCode(i) + String.fromCharCode(j); + } + } + var rawBytes = IEBinaryToArray_ByteStr(binary); + var lastChr = IEBinaryToArray_ByteStr_Last(binary); + return rawBytes.replace(/[\s\S]/g, function( match ) { + return byteMapping[match]; + }) + lastChr; +}; + +// enforcing Stuk's coding style +// vim: set shiftwidth=4 softtabstop=4: + +},{}]},{},[1]) +; diff --git a/doc/0.1.4/en_private/jquery/jszip-utils/dist/jszip-utils-ie.min.js b/doc/0.1.4/en_private/jquery/jszip-utils/dist/jszip-utils-ie.min.js new file mode 100644 index 0000000..93d8bc8 --- /dev/null +++ b/doc/0.1.4/en_private/jquery/jszip-utils/dist/jszip-utils-ie.min.js @@ -0,0 +1,10 @@ +/*! + +JSZipUtils - A collection of cross-browser utilities to go along with JSZip. + + +(c) 2014 Stuart Knightley, David Duponchel +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip-utils/master/LICENSE.markdown. + +*/ +!function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g\r\n";document.write(b),a.JSZipUtils._getBinaryFromXHR=function(a){for(var b=a.responseBody,c={},d=0;256>d;d++)for(var e=0;256>e;e++)c[String.fromCharCode(d+(e<<8))]=String.fromCharCode(d)+String.fromCharCode(e);var f=IEBinaryToArray_ByteStr(b),g=IEBinaryToArray_ByteStr_Last(b);return f.replace(/[\s\S]/g,function(a){return c[a]})+g}},{}]},{},[1]); diff --git a/doc/0.1.4/en_private/jquery/jszip-utils/dist/jszip-utils.js b/doc/0.1.4/en_private/jquery/jszip-utils/dist/jszip-utils.js new file mode 100644 index 0000000..775895e --- /dev/null +++ b/doc/0.1.4/en_private/jquery/jszip-utils/dist/jszip-utils.js @@ -0,0 +1,118 @@ +/*! + +JSZipUtils - A collection of cross-browser utilities to go along with JSZip. + + +(c) 2014 Stuart Knightley, David Duponchel +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip-utils/master/LICENSE.markdown. + +*/ +!function(e){"object"==typeof exports?module.exports=e():"function"==typeof define&&define.amd?define(e):"undefined"!=typeof window?window.JSZipUtils=e():"undefined"!=typeof global?global.JSZipUtils=e():"undefined"!=typeof self&&(self.JSZipUtils=e())}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o + +(c) 2014 Stuart Knightley, David Duponchel +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip-utils/master/LICENSE.markdown. + +*/ +!function(a){"object"==typeof exports?module.exports=a():"function"==typeof define&&define.amd?define(a):"undefined"!=typeof window?window.JSZipUtils=a():"undefined"!=typeof global?global.JSZipUtils=a():"undefined"!=typeof self&&(self.JSZipUtils=a())}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g + +(c) 2009-2016 Stuart Knightley +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/master/LICENSE.markdown. + +JSZip uses the library pako released under the MIT license : +https://github.com/nodeca/pako/blob/master/LICENSE +*/ + +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.JSZip = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o> 2; + enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); + enc3 = remainingBytes > 1 ? (((chr2 & 15) << 2) | (chr3 >> 6)) : 64; + enc4 = remainingBytes > 2 ? (chr3 & 63) : 64; + + output.push(_keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4)); + + } + + return output.join(""); +}; + +// public method for decoding +exports.decode = function(input) { + var chr1, chr2, chr3; + var enc1, enc2, enc3, enc4; + var i = 0, resultIndex = 0; + + var dataUrlPrefix = "data:"; + + if (input.substr(0, dataUrlPrefix.length) === dataUrlPrefix) { + // This is a common error: people give a data url + // (data:image/png;base64,iVBOR...) with a {base64: true} and + // wonders why things don't work. + // We can detect that the string input looks like a data url but we + // *can't* be sure it is one: removing everything up to the comma would + // be too dangerous. + throw new Error("Invalid base64 input, it looks like a data url."); + } + + input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + + var totalLength = input.length * 3 / 4; + if(input.charAt(input.length - 1) === _keyStr.charAt(64)) { + totalLength--; + } + if(input.charAt(input.length - 2) === _keyStr.charAt(64)) { + totalLength--; + } + if (totalLength % 1 !== 0) { + // totalLength is not an integer, the length does not match a valid + // base64 content. That can happen if: + // - the input is not a base64 content + // - the input is *almost* a base64 content, with a extra chars at the + // beginning or at the end + // - the input uses a base64 variant (base64url for example) + throw new Error("Invalid base64 input, bad content length."); + } + var output; + if (support.uint8array) { + output = new Uint8Array(totalLength|0); + } else { + output = new Array(totalLength|0); + } + + while (i < input.length) { + + enc1 = _keyStr.indexOf(input.charAt(i++)); + enc2 = _keyStr.indexOf(input.charAt(i++)); + enc3 = _keyStr.indexOf(input.charAt(i++)); + enc4 = _keyStr.indexOf(input.charAt(i++)); + + chr1 = (enc1 << 2) | (enc2 >> 4); + chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); + chr3 = ((enc3 & 3) << 6) | enc4; + + output[resultIndex++] = chr1; + + if (enc3 !== 64) { + output[resultIndex++] = chr2; + } + if (enc4 !== 64) { + output[resultIndex++] = chr3; + } + + } + + return output; +}; + +},{"./support":30,"./utils":32}],2:[function(require,module,exports){ +'use strict'; + +var external = require("./external"); +var DataWorker = require('./stream/DataWorker'); +var DataLengthProbe = require('./stream/DataLengthProbe'); +var Crc32Probe = require('./stream/Crc32Probe'); +var DataLengthProbe = require('./stream/DataLengthProbe'); + +/** + * Represent a compressed object, with everything needed to decompress it. + * @constructor + * @param {number} compressedSize the size of the data compressed. + * @param {number} uncompressedSize the size of the data after decompression. + * @param {number} crc32 the crc32 of the decompressed file. + * @param {object} compression the type of compression, see lib/compressions.js. + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the compressed data. + */ +function CompressedObject(compressedSize, uncompressedSize, crc32, compression, data) { + this.compressedSize = compressedSize; + this.uncompressedSize = uncompressedSize; + this.crc32 = crc32; + this.compression = compression; + this.compressedContent = data; +} + +CompressedObject.prototype = { + /** + * Create a worker to get the uncompressed content. + * @return {GenericWorker} the worker. + */ + getContentWorker : function () { + var worker = new DataWorker(external.Promise.resolve(this.compressedContent)) + .pipe(this.compression.uncompressWorker()) + .pipe(new DataLengthProbe("data_length")); + + var that = this; + worker.on("end", function () { + if(this.streamInfo['data_length'] !== that.uncompressedSize) { + throw new Error("Bug : uncompressed data size mismatch"); + } + }); + return worker; + }, + /** + * Create a worker to get the compressed content. + * @return {GenericWorker} the worker. + */ + getCompressedWorker : function () { + return new DataWorker(external.Promise.resolve(this.compressedContent)) + .withStreamInfo("compressedSize", this.compressedSize) + .withStreamInfo("uncompressedSize", this.uncompressedSize) + .withStreamInfo("crc32", this.crc32) + .withStreamInfo("compression", this.compression) + ; + } +}; + +/** + * Chain the given worker with other workers to compress the content with the + * given compresion. + * @param {GenericWorker} uncompressedWorker the worker to pipe. + * @param {Object} compression the compression object. + * @param {Object} compressionOptions the options to use when compressing. + * @return {GenericWorker} the new worker compressing the content. + */ +CompressedObject.createWorkerFrom = function (uncompressedWorker, compression, compressionOptions) { + return uncompressedWorker + .pipe(new Crc32Probe()) + .pipe(new DataLengthProbe("uncompressedSize")) + .pipe(compression.compressWorker(compressionOptions)) + .pipe(new DataLengthProbe("compressedSize")) + .withStreamInfo("compression", compression); +}; + +module.exports = CompressedObject; + +},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(require,module,exports){ +'use strict'; + +var GenericWorker = require("./stream/GenericWorker"); + +exports.STORE = { + magic: "\x00\x00", + compressWorker : function (compressionOptions) { + return new GenericWorker("STORE compression"); + }, + uncompressWorker : function () { + return new GenericWorker("STORE decompression"); + } +}; +exports.DEFLATE = require('./flate'); + +},{"./flate":7,"./stream/GenericWorker":28}],4:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); + +/** + * The following functions come from pako, from pako/lib/zlib/crc32.js + * released under the MIT license, see pako https://github.com/nodeca/pako/ + */ + +// Use ordinary array, since untyped makes no boost here +function makeTable() { + var c, table = []; + + for(var n =0; n < 256; n++){ + c = n; + for(var k =0; k < 8; k++){ + c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); + } + table[n] = c; + } + + return table; +} + +// Create table on load. Just 255 signed longs. Not a problem. +var crcTable = makeTable(); + + +function crc32(crc, buf, len, pos) { + var t = crcTable, end = pos + len; + + crc = crc ^ (-1); + + for (var i = pos; i < end; i++ ) { + crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF]; + } + + return (crc ^ (-1)); // >>> 0; +} + +// That's all for the pako functions. + +/** + * Compute the crc32 of a string. + * This is almost the same as the function crc32, but for strings. Using the + * same function for the two use cases leads to horrible performances. + * @param {Number} crc the starting value of the crc. + * @param {String} str the string to use. + * @param {Number} len the length of the string. + * @param {Number} pos the starting position for the crc32 computation. + * @return {Number} the computed crc32. + */ +function crc32str(crc, str, len, pos) { + var t = crcTable, end = pos + len; + + crc = crc ^ (-1); + + for (var i = pos; i < end; i++ ) { + crc = (crc >>> 8) ^ t[(crc ^ str.charCodeAt(i)) & 0xFF]; + } + + return (crc ^ (-1)); // >>> 0; +} + +module.exports = function crc32wrapper(input, crc) { + if (typeof input === "undefined" || !input.length) { + return 0; + } + + var isArray = utils.getTypeOf(input) !== "string"; + + if(isArray) { + return crc32(crc|0, input, input.length, 0); + } else { + return crc32str(crc|0, input, input.length, 0); + } +}; + +},{"./utils":32}],5:[function(require,module,exports){ +'use strict'; +exports.base64 = false; +exports.binary = false; +exports.dir = false; +exports.createFolders = true; +exports.date = null; +exports.compression = null; +exports.compressionOptions = null; +exports.comment = null; +exports.unixPermissions = null; +exports.dosPermissions = null; + +},{}],6:[function(require,module,exports){ +/* global Promise */ +'use strict'; + +// load the global object first: +// - it should be better integrated in the system (unhandledRejection in node) +// - the environment may have a custom Promise implementation (see zone.js) +var ES6Promise = null; +if (typeof Promise !== "undefined") { + ES6Promise = Promise; +} else { + ES6Promise = require("lie"); +} + +/** + * Let the user use/change some implementations. + */ +module.exports = { + Promise: ES6Promise +}; + +},{"lie":58}],7:[function(require,module,exports){ +'use strict'; +var USE_TYPEDARRAY = (typeof Uint8Array !== 'undefined') && (typeof Uint16Array !== 'undefined') && (typeof Uint32Array !== 'undefined'); + +var pako = require("pako"); +var utils = require("./utils"); +var GenericWorker = require("./stream/GenericWorker"); + +var ARRAY_TYPE = USE_TYPEDARRAY ? "uint8array" : "array"; + +exports.magic = "\x08\x00"; + +/** + * Create a worker that uses pako to inflate/deflate. + * @constructor + * @param {String} action the name of the pako function to call : either "Deflate" or "Inflate". + * @param {Object} options the options to use when (de)compressing. + */ +function FlateWorker(action, options) { + GenericWorker.call(this, "FlateWorker/" + action); + + this._pako = null; + this._pakoAction = action; + this._pakoOptions = options; + // the `meta` object from the last chunk received + // this allow this worker to pass around metadata + this.meta = {}; +} + +utils.inherits(FlateWorker, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +FlateWorker.prototype.processChunk = function (chunk) { + this.meta = chunk.meta; + if (this._pako === null) { + this._createPako(); + } + this._pako.push(utils.transformTo(ARRAY_TYPE, chunk.data), false); +}; + +/** + * @see GenericWorker.flush + */ +FlateWorker.prototype.flush = function () { + GenericWorker.prototype.flush.call(this); + if (this._pako === null) { + this._createPako(); + } + this._pako.push([], true); +}; +/** + * @see GenericWorker.cleanUp + */ +FlateWorker.prototype.cleanUp = function () { + GenericWorker.prototype.cleanUp.call(this); + this._pako = null; +}; + +/** + * Create the _pako object. + * TODO: lazy-loading this object isn't the best solution but it's the + * quickest. The best solution is to lazy-load the worker list. See also the + * issue #446. + */ +FlateWorker.prototype._createPako = function () { + this._pako = new pako[this._pakoAction]({ + raw: true, + level: this._pakoOptions.level || -1 // default compression + }); + var self = this; + this._pako.onData = function(data) { + self.push({ + data : data, + meta : self.meta + }); + }; +}; + +exports.compressWorker = function (compressionOptions) { + return new FlateWorker("Deflate", compressionOptions); +}; +exports.uncompressWorker = function () { + return new FlateWorker("Inflate", {}); +}; + +},{"./stream/GenericWorker":28,"./utils":32,"pako":59}],8:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var GenericWorker = require('../stream/GenericWorker'); +var utf8 = require('../utf8'); +var crc32 = require('../crc32'); +var signature = require('../signature'); + +/** + * Transform an integer into a string in hexadecimal. + * @private + * @param {number} dec the number to convert. + * @param {number} bytes the number of bytes to generate. + * @returns {string} the result. + */ +var decToHex = function(dec, bytes) { + var hex = "", i; + for (i = 0; i < bytes; i++) { + hex += String.fromCharCode(dec & 0xff); + dec = dec >>> 8; + } + return hex; +}; + +/** + * Generate the UNIX part of the external file attributes. + * @param {Object} unixPermissions the unix permissions or null. + * @param {Boolean} isDir true if the entry is a directory, false otherwise. + * @return {Number} a 32 bit integer. + * + * adapted from http://unix.stackexchange.com/questions/14705/the-zip-formats-external-file-attribute : + * + * TTTTsstrwxrwxrwx0000000000ADVSHR + * ^^^^____________________________ file type, see zipinfo.c (UNX_*) + * ^^^_________________________ setuid, setgid, sticky + * ^^^^^^^^^________________ permissions + * ^^^^^^^^^^______ not used ? + * ^^^^^^ DOS attribute bits : Archive, Directory, Volume label, System file, Hidden, Read only + */ +var generateUnixExternalFileAttr = function (unixPermissions, isDir) { + + var result = unixPermissions; + if (!unixPermissions) { + // I can't use octal values in strict mode, hence the hexa. + // 040775 => 0x41fd + // 0100664 => 0x81b4 + result = isDir ? 0x41fd : 0x81b4; + } + return (result & 0xFFFF) << 16; +}; + +/** + * Generate the DOS part of the external file attributes. + * @param {Object} dosPermissions the dos permissions or null. + * @param {Boolean} isDir true if the entry is a directory, false otherwise. + * @return {Number} a 32 bit integer. + * + * Bit 0 Read-Only + * Bit 1 Hidden + * Bit 2 System + * Bit 3 Volume Label + * Bit 4 Directory + * Bit 5 Archive + */ +var generateDosExternalFileAttr = function (dosPermissions, isDir) { + + // the dir flag is already set for compatibility + return (dosPermissions || 0) & 0x3F; +}; + +/** + * Generate the various parts used in the construction of the final zip file. + * @param {Object} streamInfo the hash with informations about the compressed file. + * @param {Boolean} streamedContent is the content streamed ? + * @param {Boolean} streamingEnded is the stream finished ? + * @param {number} offset the current offset from the start of the zip file. + * @param {String} platform let's pretend we are this platform (change platform dependents fields) + * @param {Function} encodeFileName the function to encode the file name / comment. + * @return {Object} the zip parts. + */ +var generateZipParts = function(streamInfo, streamedContent, streamingEnded, offset, platform, encodeFileName) { + var file = streamInfo['file'], + compression = streamInfo['compression'], + useCustomEncoding = encodeFileName !== utf8.utf8encode, + encodedFileName = utils.transformTo("string", encodeFileName(file.name)), + utfEncodedFileName = utils.transformTo("string", utf8.utf8encode(file.name)), + comment = file.comment, + encodedComment = utils.transformTo("string", encodeFileName(comment)), + utfEncodedComment = utils.transformTo("string", utf8.utf8encode(comment)), + useUTF8ForFileName = utfEncodedFileName.length !== file.name.length, + useUTF8ForComment = utfEncodedComment.length !== comment.length, + dosTime, + dosDate, + extraFields = "", + unicodePathExtraField = "", + unicodeCommentExtraField = "", + dir = file.dir, + date = file.date; + + + var dataInfo = { + crc32 : 0, + compressedSize : 0, + uncompressedSize : 0 + }; + + // if the content is streamed, the sizes/crc32 are only available AFTER + // the end of the stream. + if (!streamedContent || streamingEnded) { + dataInfo.crc32 = streamInfo['crc32']; + dataInfo.compressedSize = streamInfo['compressedSize']; + dataInfo.uncompressedSize = streamInfo['uncompressedSize']; + } + + var bitflag = 0; + if (streamedContent) { + // Bit 3: the sizes/crc32 are set to zero in the local header. + // The correct values are put in the data descriptor immediately + // following the compressed data. + bitflag |= 0x0008; + } + if (!useCustomEncoding && (useUTF8ForFileName || useUTF8ForComment)) { + // Bit 11: Language encoding flag (EFS). + bitflag |= 0x0800; + } + + + var extFileAttr = 0; + var versionMadeBy = 0; + if (dir) { + // dos or unix, we set the dos dir flag + extFileAttr |= 0x00010; + } + if(platform === "UNIX") { + versionMadeBy = 0x031E; // UNIX, version 3.0 + extFileAttr |= generateUnixExternalFileAttr(file.unixPermissions, dir); + } else { // DOS or other, fallback to DOS + versionMadeBy = 0x0014; // DOS, version 2.0 + extFileAttr |= generateDosExternalFileAttr(file.dosPermissions, dir); + } + + // date + // @see http://www.delorie.com/djgpp/doc/rbinter/it/52/13.html + // @see http://www.delorie.com/djgpp/doc/rbinter/it/65/16.html + // @see http://www.delorie.com/djgpp/doc/rbinter/it/66/16.html + + dosTime = date.getUTCHours(); + dosTime = dosTime << 6; + dosTime = dosTime | date.getUTCMinutes(); + dosTime = dosTime << 5; + dosTime = dosTime | date.getUTCSeconds() / 2; + + dosDate = date.getUTCFullYear() - 1980; + dosDate = dosDate << 4; + dosDate = dosDate | (date.getUTCMonth() + 1); + dosDate = dosDate << 5; + dosDate = dosDate | date.getUTCDate(); + + if (useUTF8ForFileName) { + // set the unicode path extra field. unzip needs at least one extra + // field to correctly handle unicode path, so using the path is as good + // as any other information. This could improve the situation with + // other archive managers too. + // This field is usually used without the utf8 flag, with a non + // unicode path in the header (winrar, winzip). This helps (a bit) + // with the messy Windows' default compressed folders feature but + // breaks on p7zip which doesn't seek the unicode path extra field. + // So for now, UTF-8 everywhere ! + unicodePathExtraField = + // Version + decToHex(1, 1) + + // NameCRC32 + decToHex(crc32(encodedFileName), 4) + + // UnicodeName + utfEncodedFileName; + + extraFields += + // Info-ZIP Unicode Path Extra Field + "\x75\x70" + + // size + decToHex(unicodePathExtraField.length, 2) + + // content + unicodePathExtraField; + } + + if(useUTF8ForComment) { + + unicodeCommentExtraField = + // Version + decToHex(1, 1) + + // CommentCRC32 + decToHex(crc32(encodedComment), 4) + + // UnicodeName + utfEncodedComment; + + extraFields += + // Info-ZIP Unicode Path Extra Field + "\x75\x63" + + // size + decToHex(unicodeCommentExtraField.length, 2) + + // content + unicodeCommentExtraField; + } + + var header = ""; + + // version needed to extract + header += "\x0A\x00"; + // general purpose bit flag + header += decToHex(bitflag, 2); + // compression method + header += compression.magic; + // last mod file time + header += decToHex(dosTime, 2); + // last mod file date + header += decToHex(dosDate, 2); + // crc-32 + header += decToHex(dataInfo.crc32, 4); + // compressed size + header += decToHex(dataInfo.compressedSize, 4); + // uncompressed size + header += decToHex(dataInfo.uncompressedSize, 4); + // file name length + header += decToHex(encodedFileName.length, 2); + // extra field length + header += decToHex(extraFields.length, 2); + + + var fileRecord = signature.LOCAL_FILE_HEADER + header + encodedFileName + extraFields; + + var dirRecord = signature.CENTRAL_FILE_HEADER + + // version made by (00: DOS) + decToHex(versionMadeBy, 2) + + // file header (common to file and central directory) + header + + // file comment length + decToHex(encodedComment.length, 2) + + // disk number start + "\x00\x00" + + // internal file attributes TODO + "\x00\x00" + + // external file attributes + decToHex(extFileAttr, 4) + + // relative offset of local header + decToHex(offset, 4) + + // file name + encodedFileName + + // extra field + extraFields + + // file comment + encodedComment; + + return { + fileRecord: fileRecord, + dirRecord: dirRecord + }; +}; + +/** + * Generate the EOCD record. + * @param {Number} entriesCount the number of entries in the zip file. + * @param {Number} centralDirLength the length (in bytes) of the central dir. + * @param {Number} localDirLength the length (in bytes) of the local dir. + * @param {String} comment the zip file comment as a binary string. + * @param {Function} encodeFileName the function to encode the comment. + * @return {String} the EOCD record. + */ +var generateCentralDirectoryEnd = function (entriesCount, centralDirLength, localDirLength, comment, encodeFileName) { + var dirEnd = ""; + var encodedComment = utils.transformTo("string", encodeFileName(comment)); + + // end of central dir signature + dirEnd = signature.CENTRAL_DIRECTORY_END + + // number of this disk + "\x00\x00" + + // number of the disk with the start of the central directory + "\x00\x00" + + // total number of entries in the central directory on this disk + decToHex(entriesCount, 2) + + // total number of entries in the central directory + decToHex(entriesCount, 2) + + // size of the central directory 4 bytes + decToHex(centralDirLength, 4) + + // offset of start of central directory with respect to the starting disk number + decToHex(localDirLength, 4) + + // .ZIP file comment length + decToHex(encodedComment.length, 2) + + // .ZIP file comment + encodedComment; + + return dirEnd; +}; + +/** + * Generate data descriptors for a file entry. + * @param {Object} streamInfo the hash generated by a worker, containing informations + * on the file entry. + * @return {String} the data descriptors. + */ +var generateDataDescriptors = function (streamInfo) { + var descriptor = ""; + descriptor = signature.DATA_DESCRIPTOR + + // crc-32 4 bytes + decToHex(streamInfo['crc32'], 4) + + // compressed size 4 bytes + decToHex(streamInfo['compressedSize'], 4) + + // uncompressed size 4 bytes + decToHex(streamInfo['uncompressedSize'], 4); + + return descriptor; +}; + + +/** + * A worker to concatenate other workers to create a zip file. + * @param {Boolean} streamFiles `true` to stream the content of the files, + * `false` to accumulate it. + * @param {String} comment the comment to use. + * @param {String} platform the platform to use, "UNIX" or "DOS". + * @param {Function} encodeFileName the function to encode file names and comments. + */ +function ZipFileWorker(streamFiles, comment, platform, encodeFileName) { + GenericWorker.call(this, "ZipFileWorker"); + // The number of bytes written so far. This doesn't count accumulated chunks. + this.bytesWritten = 0; + // The comment of the zip file + this.zipComment = comment; + // The platform "generating" the zip file. + this.zipPlatform = platform; + // the function to encode file names and comments. + this.encodeFileName = encodeFileName; + // Should we stream the content of the files ? + this.streamFiles = streamFiles; + // If `streamFiles` is false, we will need to accumulate the content of the + // files to calculate sizes / crc32 (and write them *before* the content). + // This boolean indicates if we are accumulating chunks (it will change a lot + // during the lifetime of this worker). + this.accumulate = false; + // The buffer receiving chunks when accumulating content. + this.contentBuffer = []; + // The list of generated directory records. + this.dirRecords = []; + // The offset (in bytes) from the beginning of the zip file for the current source. + this.currentSourceOffset = 0; + // The total number of entries in this zip file. + this.entriesCount = 0; + // the name of the file currently being added, null when handling the end of the zip file. + // Used for the emited metadata. + this.currentFile = null; + + + + this._sources = []; +} +utils.inherits(ZipFileWorker, GenericWorker); + +/** + * @see GenericWorker.push + */ +ZipFileWorker.prototype.push = function (chunk) { + + var currentFilePercent = chunk.meta.percent || 0; + var entriesCount = this.entriesCount; + var remainingFiles = this._sources.length; + + if(this.accumulate) { + this.contentBuffer.push(chunk); + } else { + this.bytesWritten += chunk.data.length; + + GenericWorker.prototype.push.call(this, { + data : chunk.data, + meta : { + currentFile : this.currentFile, + percent : entriesCount ? (currentFilePercent + 100 * (entriesCount - remainingFiles - 1)) / entriesCount : 100 + } + }); + } +}; + +/** + * The worker started a new source (an other worker). + * @param {Object} streamInfo the streamInfo object from the new source. + */ +ZipFileWorker.prototype.openedSource = function (streamInfo) { + this.currentSourceOffset = this.bytesWritten; + this.currentFile = streamInfo['file'].name; + + var streamedContent = this.streamFiles && !streamInfo['file'].dir; + + // don't stream folders (because they don't have any content) + if(streamedContent) { + var record = generateZipParts(streamInfo, streamedContent, false, this.currentSourceOffset, this.zipPlatform, this.encodeFileName); + this.push({ + data : record.fileRecord, + meta : {percent:0} + }); + } else { + // we need to wait for the whole file before pushing anything + this.accumulate = true; + } +}; + +/** + * The worker finished a source (an other worker). + * @param {Object} streamInfo the streamInfo object from the finished source. + */ +ZipFileWorker.prototype.closedSource = function (streamInfo) { + this.accumulate = false; + var streamedContent = this.streamFiles && !streamInfo['file'].dir; + var record = generateZipParts(streamInfo, streamedContent, true, this.currentSourceOffset, this.zipPlatform, this.encodeFileName); + + this.dirRecords.push(record.dirRecord); + if(streamedContent) { + // after the streamed file, we put data descriptors + this.push({ + data : generateDataDescriptors(streamInfo), + meta : {percent:100} + }); + } else { + // the content wasn't streamed, we need to push everything now + // first the file record, then the content + this.push({ + data : record.fileRecord, + meta : {percent:0} + }); + while(this.contentBuffer.length) { + this.push(this.contentBuffer.shift()); + } + } + this.currentFile = null; +}; + +/** + * @see GenericWorker.flush + */ +ZipFileWorker.prototype.flush = function () { + + var localDirLength = this.bytesWritten; + for(var i = 0; i < this.dirRecords.length; i++) { + this.push({ + data : this.dirRecords[i], + meta : {percent:100} + }); + } + var centralDirLength = this.bytesWritten - localDirLength; + + var dirEnd = generateCentralDirectoryEnd(this.dirRecords.length, centralDirLength, localDirLength, this.zipComment, this.encodeFileName); + + this.push({ + data : dirEnd, + meta : {percent:100} + }); +}; + +/** + * Prepare the next source to be read. + */ +ZipFileWorker.prototype.prepareNextSource = function () { + this.previous = this._sources.shift(); + this.openedSource(this.previous.streamInfo); + if (this.isPaused) { + this.previous.pause(); + } else { + this.previous.resume(); + } +}; + +/** + * @see GenericWorker.registerPrevious + */ +ZipFileWorker.prototype.registerPrevious = function (previous) { + this._sources.push(previous); + var self = this; + + previous.on('data', function (chunk) { + self.processChunk(chunk); + }); + previous.on('end', function () { + self.closedSource(self.previous.streamInfo); + if(self._sources.length) { + self.prepareNextSource(); + } else { + self.end(); + } + }); + previous.on('error', function (e) { + self.error(e); + }); + return this; +}; + +/** + * @see GenericWorker.resume + */ +ZipFileWorker.prototype.resume = function () { + if(!GenericWorker.prototype.resume.call(this)) { + return false; + } + + if (!this.previous && this._sources.length) { + this.prepareNextSource(); + return true; + } + if (!this.previous && !this._sources.length && !this.generatedError) { + this.end(); + return true; + } +}; + +/** + * @see GenericWorker.error + */ +ZipFileWorker.prototype.error = function (e) { + var sources = this._sources; + if(!GenericWorker.prototype.error.call(this, e)) { + return false; + } + for(var i = 0; i < sources.length; i++) { + try { + sources[i].error(e); + } catch(e) { + // the `error` exploded, nothing to do + } + } + return true; +}; + +/** + * @see GenericWorker.lock + */ +ZipFileWorker.prototype.lock = function () { + GenericWorker.prototype.lock.call(this); + var sources = this._sources; + for(var i = 0; i < sources.length; i++) { + sources[i].lock(); + } +}; + +module.exports = ZipFileWorker; + +},{"../crc32":4,"../signature":23,"../stream/GenericWorker":28,"../utf8":31,"../utils":32}],9:[function(require,module,exports){ +'use strict'; + +var compressions = require('../compressions'); +var ZipFileWorker = require('./ZipFileWorker'); + +/** + * Find the compression to use. + * @param {String} fileCompression the compression defined at the file level, if any. + * @param {String} zipCompression the compression defined at the load() level. + * @return {Object} the compression object to use. + */ +var getCompression = function (fileCompression, zipCompression) { + + var compressionName = fileCompression || zipCompression; + var compression = compressions[compressionName]; + if (!compression) { + throw new Error(compressionName + " is not a valid compression method !"); + } + return compression; +}; + +/** + * Create a worker to generate a zip file. + * @param {JSZip} zip the JSZip instance at the right root level. + * @param {Object} options to generate the zip file. + * @param {String} comment the comment to use. + */ +exports.generateWorker = function (zip, options, comment) { + + var zipFileWorker = new ZipFileWorker(options.streamFiles, comment, options.platform, options.encodeFileName); + var entriesCount = 0; + try { + + zip.forEach(function (relativePath, file) { + entriesCount++; + var compression = getCompression(file.options.compression, options.compression); + var compressionOptions = file.options.compressionOptions || options.compressionOptions || {}; + var dir = file.dir, date = file.date; + + file._compressWorker(compression, compressionOptions) + .withStreamInfo("file", { + name : relativePath, + dir : dir, + date : date, + comment : file.comment || "", + unixPermissions : file.unixPermissions, + dosPermissions : file.dosPermissions + }) + .pipe(zipFileWorker); + }); + zipFileWorker.entriesCount = entriesCount; + } catch (e) { + zipFileWorker.error(e); + } + + return zipFileWorker; +}; + +},{"../compressions":3,"./ZipFileWorker":8}],10:[function(require,module,exports){ +'use strict'; + +/** + * Representation a of zip file in js + * @constructor + */ +function JSZip() { + // if this constructor is used without `new`, it adds `new` before itself: + if(!(this instanceof JSZip)) { + return new JSZip(); + } + + if(arguments.length) { + throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide."); + } + + // object containing the files : + // { + // "folder/" : {...}, + // "folder/data.txt" : {...} + // } + this.files = {}; + + this.comment = null; + + // Where we are in the hierarchy + this.root = ""; + this.clone = function() { + var newObj = new JSZip(); + for (var i in this) { + if (typeof this[i] !== "function") { + newObj[i] = this[i]; + } + } + return newObj; + }; +} +JSZip.prototype = require('./object'); +JSZip.prototype.loadAsync = require('./load'); +JSZip.support = require('./support'); +JSZip.defaults = require('./defaults'); + +// TODO find a better way to handle this version, +// a require('package.json').version doesn't work with webpack, see #327 +JSZip.version = "3.1.5"; + +JSZip.loadAsync = function (content, options) { + return new JSZip().loadAsync(content, options); +}; + +JSZip.external = require("./external"); +module.exports = JSZip; + +},{"./defaults":5,"./external":6,"./load":11,"./object":15,"./support":30}],11:[function(require,module,exports){ +'use strict'; +var utils = require('./utils'); +var external = require("./external"); +var utf8 = require('./utf8'); +var utils = require('./utils'); +var ZipEntries = require('./zipEntries'); +var Crc32Probe = require('./stream/Crc32Probe'); +var nodejsUtils = require("./nodejsUtils"); + +/** + * Check the CRC32 of an entry. + * @param {ZipEntry} zipEntry the zip entry to check. + * @return {Promise} the result. + */ +function checkEntryCRC32(zipEntry) { + return new external.Promise(function (resolve, reject) { + var worker = zipEntry.decompressed.getContentWorker().pipe(new Crc32Probe()); + worker.on("error", function (e) { + reject(e); + }) + .on("end", function () { + if (worker.streamInfo.crc32 !== zipEntry.decompressed.crc32) { + reject(new Error("Corrupted zip : CRC32 mismatch")); + } else { + resolve(); + } + }) + .resume(); + }); +} + +module.exports = function(data, options) { + var zip = this; + options = utils.extend(options || {}, { + base64: false, + checkCRC32: false, + optimizedBinaryString: false, + createFolders: false, + decodeFileName: utf8.utf8decode + }); + + if (nodejsUtils.isNode && nodejsUtils.isStream(data)) { + return external.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")); + } + + return utils.prepareContent("the loaded zip file", data, true, options.optimizedBinaryString, options.base64) + .then(function(data) { + var zipEntries = new ZipEntries(options); + zipEntries.load(data); + return zipEntries; + }).then(function checkCRC32(zipEntries) { + var promises = [external.Promise.resolve(zipEntries)]; + var files = zipEntries.files; + if (options.checkCRC32) { + for (var i = 0; i < files.length; i++) { + promises.push(checkEntryCRC32(files[i])); + } + } + return external.Promise.all(promises); + }).then(function addFiles(results) { + var zipEntries = results.shift(); + var files = zipEntries.files; + for (var i = 0; i < files.length; i++) { + var input = files[i]; + zip.file(input.fileNameStr, input.decompressed, { + binary: true, + optimizedBinaryString: true, + date: input.date, + dir: input.dir, + comment : input.fileCommentStr.length ? input.fileCommentStr : null, + unixPermissions : input.unixPermissions, + dosPermissions : input.dosPermissions, + createFolders: options.createFolders + }); + } + if (zipEntries.zipComment.length) { + zip.comment = zipEntries.zipComment; + } + + return zip; + }); +}; + +},{"./external":6,"./nodejsUtils":14,"./stream/Crc32Probe":25,"./utf8":31,"./utils":32,"./zipEntries":33}],12:[function(require,module,exports){ +"use strict"; + +var utils = require('../utils'); +var GenericWorker = require('../stream/GenericWorker'); + +/** + * A worker that use a nodejs stream as source. + * @constructor + * @param {String} filename the name of the file entry for this stream. + * @param {Readable} stream the nodejs stream. + */ +function NodejsStreamInputAdapter(filename, stream) { + GenericWorker.call(this, "Nodejs stream input adapter for " + filename); + this._upstreamEnded = false; + this._bindStream(stream); +} + +utils.inherits(NodejsStreamInputAdapter, GenericWorker); + +/** + * Prepare the stream and bind the callbacks on it. + * Do this ASAP on node 0.10 ! A lazy binding doesn't always work. + * @param {Stream} stream the nodejs stream to use. + */ +NodejsStreamInputAdapter.prototype._bindStream = function (stream) { + var self = this; + this._stream = stream; + stream.pause(); + stream + .on("data", function (chunk) { + self.push({ + data: chunk, + meta : { + percent : 0 + } + }); + }) + .on("error", function (e) { + if(self.isPaused) { + this.generatedError = e; + } else { + self.error(e); + } + }) + .on("end", function () { + if(self.isPaused) { + self._upstreamEnded = true; + } else { + self.end(); + } + }); +}; +NodejsStreamInputAdapter.prototype.pause = function () { + if(!GenericWorker.prototype.pause.call(this)) { + return false; + } + this._stream.pause(); + return true; +}; +NodejsStreamInputAdapter.prototype.resume = function () { + if(!GenericWorker.prototype.resume.call(this)) { + return false; + } + + if(this._upstreamEnded) { + this.end(); + } else { + this._stream.resume(); + } + + return true; +}; + +module.exports = NodejsStreamInputAdapter; + +},{"../stream/GenericWorker":28,"../utils":32}],13:[function(require,module,exports){ +'use strict'; + +var Readable = require('readable-stream').Readable; + +var utils = require('../utils'); +utils.inherits(NodejsStreamOutputAdapter, Readable); + +/** +* A nodejs stream using a worker as source. +* @see the SourceWrapper in http://nodejs.org/api/stream.html +* @constructor +* @param {StreamHelper} helper the helper wrapping the worker +* @param {Object} options the nodejs stream options +* @param {Function} updateCb the update callback. +*/ +function NodejsStreamOutputAdapter(helper, options, updateCb) { + Readable.call(this, options); + this._helper = helper; + + var self = this; + helper.on("data", function (data, meta) { + if (!self.push(data)) { + self._helper.pause(); + } + if(updateCb) { + updateCb(meta); + } + }) + .on("error", function(e) { + self.emit('error', e); + }) + .on("end", function () { + self.push(null); + }); +} + + +NodejsStreamOutputAdapter.prototype._read = function() { + this._helper.resume(); +}; + +module.exports = NodejsStreamOutputAdapter; + +},{"../utils":32,"readable-stream":16}],14:[function(require,module,exports){ +'use strict'; + +module.exports = { + /** + * True if this is running in Nodejs, will be undefined in a browser. + * In a browser, browserify won't include this file and the whole module + * will be resolved an empty object. + */ + isNode : typeof Buffer !== "undefined", + /** + * Create a new nodejs Buffer from an existing content. + * @param {Object} data the data to pass to the constructor. + * @param {String} encoding the encoding to use. + * @return {Buffer} a new Buffer. + */ + newBufferFrom: function(data, encoding) { + // XXX We can't use `Buffer.from` which comes from `Uint8Array.from` + // in nodejs v4 (< v.4.5). It's not the expected implementation (and + // has a different signature). + // see https://github.com/nodejs/node/issues/8053 + // A condition on nodejs' version won't solve the issue as we don't + // control the Buffer polyfills that may or may not be used. + return new Buffer(data, encoding); + }, + /** + * Create a new nodejs Buffer with the specified size. + * @param {Integer} size the size of the buffer. + * @return {Buffer} a new Buffer. + */ + allocBuffer: function (size) { + if (Buffer.alloc) { + return Buffer.alloc(size); + } else { + return new Buffer(size); + } + }, + /** + * Find out if an object is a Buffer. + * @param {Object} b the object to test. + * @return {Boolean} true if the object is a Buffer, false otherwise. + */ + isBuffer : function(b){ + return Buffer.isBuffer(b); + }, + + isStream : function (obj) { + return obj && + typeof obj.on === "function" && + typeof obj.pause === "function" && + typeof obj.resume === "function"; + } +}; + +},{}],15:[function(require,module,exports){ +'use strict'; +var utf8 = require('./utf8'); +var utils = require('./utils'); +var GenericWorker = require('./stream/GenericWorker'); +var StreamHelper = require('./stream/StreamHelper'); +var defaults = require('./defaults'); +var CompressedObject = require('./compressedObject'); +var ZipObject = require('./zipObject'); +var generate = require("./generate"); +var nodejsUtils = require("./nodejsUtils"); +var NodejsStreamInputAdapter = require("./nodejs/NodejsStreamInputAdapter"); + + +/** + * Add a file in the current folder. + * @private + * @param {string} name the name of the file + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data of the file + * @param {Object} originalOptions the options of the file + * @return {Object} the new file. + */ +var fileAdd = function(name, data, originalOptions) { + // be sure sub folders exist + var dataType = utils.getTypeOf(data), + parent; + + + /* + * Correct options. + */ + + var o = utils.extend(originalOptions || {}, defaults); + o.date = o.date || new Date(); + if (o.compression !== null) { + o.compression = o.compression.toUpperCase(); + } + + if (typeof o.unixPermissions === "string") { + o.unixPermissions = parseInt(o.unixPermissions, 8); + } + + // UNX_IFDIR 0040000 see zipinfo.c + if (o.unixPermissions && (o.unixPermissions & 0x4000)) { + o.dir = true; + } + // Bit 4 Directory + if (o.dosPermissions && (o.dosPermissions & 0x0010)) { + o.dir = true; + } + + if (o.dir) { + name = forceTrailingSlash(name); + } + if (o.createFolders && (parent = parentFolder(name))) { + folderAdd.call(this, parent, true); + } + + var isUnicodeString = dataType === "string" && o.binary === false && o.base64 === false; + if (!originalOptions || typeof originalOptions.binary === "undefined") { + o.binary = !isUnicodeString; + } + + + var isCompressedEmpty = (data instanceof CompressedObject) && data.uncompressedSize === 0; + + if (isCompressedEmpty || o.dir || !data || data.length === 0) { + o.base64 = false; + o.binary = true; + data = ""; + o.compression = "STORE"; + dataType = "string"; + } + + /* + * Convert content to fit. + */ + + var zipObjectContent = null; + if (data instanceof CompressedObject || data instanceof GenericWorker) { + zipObjectContent = data; + } else if (nodejsUtils.isNode && nodejsUtils.isStream(data)) { + zipObjectContent = new NodejsStreamInputAdapter(name, data); + } else { + zipObjectContent = utils.prepareContent(name, data, o.binary, o.optimizedBinaryString, o.base64); + } + + var object = new ZipObject(name, zipObjectContent, o); + this.files[name] = object; + /* + TODO: we can't throw an exception because we have async promises + (we can have a promise of a Date() for example) but returning a + promise is useless because file(name, data) returns the JSZip + object for chaining. Should we break that to allow the user + to catch the error ? + + return external.Promise.resolve(zipObjectContent) + .then(function () { + return object; + }); + */ +}; + +/** + * Find the parent folder of the path. + * @private + * @param {string} path the path to use + * @return {string} the parent folder, or "" + */ +var parentFolder = function (path) { + if (path.slice(-1) === '/') { + path = path.substring(0, path.length - 1); + } + var lastSlash = path.lastIndexOf('/'); + return (lastSlash > 0) ? path.substring(0, lastSlash) : ""; +}; + +/** + * Returns the path with a slash at the end. + * @private + * @param {String} path the path to check. + * @return {String} the path with a trailing slash. + */ +var forceTrailingSlash = function(path) { + // Check the name ends with a / + if (path.slice(-1) !== "/") { + path += "/"; // IE doesn't like substr(-1) + } + return path; +}; + +/** + * Add a (sub) folder in the current folder. + * @private + * @param {string} name the folder's name + * @param {boolean=} [createFolders] If true, automatically create sub + * folders. Defaults to false. + * @return {Object} the new folder. + */ +var folderAdd = function(name, createFolders) { + createFolders = (typeof createFolders !== 'undefined') ? createFolders : defaults.createFolders; + + name = forceTrailingSlash(name); + + // Does this folder already exist? + if (!this.files[name]) { + fileAdd.call(this, name, null, { + dir: true, + createFolders: createFolders + }); + } + return this.files[name]; +}; + +/** +* Cross-window, cross-Node-context regular expression detection +* @param {Object} object Anything +* @return {Boolean} true if the object is a regular expression, +* false otherwise +*/ +function isRegExp(object) { + return Object.prototype.toString.call(object) === "[object RegExp]"; +} + +// return the actual prototype of JSZip +var out = { + /** + * @see loadAsync + */ + load: function() { + throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide."); + }, + + + /** + * Call a callback function for each entry at this folder level. + * @param {Function} cb the callback function: + * function (relativePath, file) {...} + * It takes 2 arguments : the relative path and the file. + */ + forEach: function(cb) { + var filename, relativePath, file; + for (filename in this.files) { + if (!this.files.hasOwnProperty(filename)) { + continue; + } + file = this.files[filename]; + relativePath = filename.slice(this.root.length, filename.length); + if (relativePath && filename.slice(0, this.root.length) === this.root) { // the file is in the current root + cb(relativePath, file); // TODO reverse the parameters ? need to be clean AND consistent with the filter search fn... + } + } + }, + + /** + * Filter nested files/folders with the specified function. + * @param {Function} search the predicate to use : + * function (relativePath, file) {...} + * It takes 2 arguments : the relative path and the file. + * @return {Array} An array of matching elements. + */ + filter: function(search) { + var result = []; + this.forEach(function (relativePath, entry) { + if (search(relativePath, entry)) { // the file matches the function + result.push(entry); + } + + }); + return result; + }, + + /** + * Add a file to the zip file, or search a file. + * @param {string|RegExp} name The name of the file to add (if data is defined), + * the name of the file to find (if no data) or a regex to match files. + * @param {String|ArrayBuffer|Uint8Array|Buffer} data The file data, either raw or base64 encoded + * @param {Object} o File options + * @return {JSZip|Object|Array} this JSZip object (when adding a file), + * a file (when searching by string) or an array of files (when searching by regex). + */ + file: function(name, data, o) { + if (arguments.length === 1) { + if (isRegExp(name)) { + var regexp = name; + return this.filter(function(relativePath, file) { + return !file.dir && regexp.test(relativePath); + }); + } + else { // text + var obj = this.files[this.root + name]; + if (obj && !obj.dir) { + return obj; + } else { + return null; + } + } + } + else { // more than one argument : we have data ! + name = this.root + name; + fileAdd.call(this, name, data, o); + } + return this; + }, + + /** + * Add a directory to the zip file, or search. + * @param {String|RegExp} arg The name of the directory to add, or a regex to search folders. + * @return {JSZip} an object with the new directory as the root, or an array containing matching folders. + */ + folder: function(arg) { + if (!arg) { + return this; + } + + if (isRegExp(arg)) { + return this.filter(function(relativePath, file) { + return file.dir && arg.test(relativePath); + }); + } + + // else, name is a new folder + var name = this.root + arg; + var newFolder = folderAdd.call(this, name); + + // Allow chaining by returning a new object with this folder as the root + var ret = this.clone(); + ret.root = newFolder.name; + return ret; + }, + + /** + * Delete a file, or a directory and all sub-files, from the zip + * @param {string} name the name of the file to delete + * @return {JSZip} this JSZip object + */ + remove: function(name) { + name = this.root + name; + var file = this.files[name]; + if (!file) { + // Look for any folders + if (name.slice(-1) !== "/") { + name += "/"; + } + file = this.files[name]; + } + + if (file && !file.dir) { + // file + delete this.files[name]; + } else { + // maybe a folder, delete recursively + var kids = this.filter(function(relativePath, file) { + return file.name.slice(0, name.length) === name; + }); + for (var i = 0; i < kids.length; i++) { + delete this.files[kids[i].name]; + } + } + + return this; + }, + + /** + * Generate the complete zip file + * @param {Object} options the options to generate the zip file : + * - compression, "STORE" by default. + * - type, "base64" by default. Values are : string, base64, uint8array, arraybuffer, blob. + * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the zip file + */ + generate: function(options) { + throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide."); + }, + + /** + * Generate the complete zip file as an internal stream. + * @param {Object} options the options to generate the zip file : + * - compression, "STORE" by default. + * - type, "base64" by default. Values are : string, base64, uint8array, arraybuffer, blob. + * @return {StreamHelper} the streamed zip file. + */ + generateInternalStream: function(options) { + var worker, opts = {}; + try { + opts = utils.extend(options || {}, { + streamFiles: false, + compression: "STORE", + compressionOptions : null, + type: "", + platform: "DOS", + comment: null, + mimeType: 'application/zip', + encodeFileName: utf8.utf8encode + }); + + opts.type = opts.type.toLowerCase(); + opts.compression = opts.compression.toUpperCase(); + + // "binarystring" is prefered but the internals use "string". + if(opts.type === "binarystring") { + opts.type = "string"; + } + + if (!opts.type) { + throw new Error("No output type specified."); + } + + utils.checkSupport(opts.type); + + // accept nodejs `process.platform` + if( + opts.platform === 'darwin' || + opts.platform === 'freebsd' || + opts.platform === 'linux' || + opts.platform === 'sunos' + ) { + opts.platform = "UNIX"; + } + if (opts.platform === 'win32') { + opts.platform = "DOS"; + } + + var comment = opts.comment || this.comment || ""; + worker = generate.generateWorker(this, opts, comment); + } catch (e) { + worker = new GenericWorker("error"); + worker.error(e); + } + return new StreamHelper(worker, opts.type || "string", opts.mimeType); + }, + /** + * Generate the complete zip file asynchronously. + * @see generateInternalStream + */ + generateAsync: function(options, onUpdate) { + return this.generateInternalStream(options).accumulate(onUpdate); + }, + /** + * Generate the complete zip file asynchronously. + * @see generateInternalStream + */ + generateNodeStream: function(options, onUpdate) { + options = options || {}; + if (!options.type) { + options.type = "nodebuffer"; + } + return this.generateInternalStream(options).toNodejsStream(onUpdate); + } +}; +module.exports = out; + +},{"./compressedObject":2,"./defaults":5,"./generate":9,"./nodejs/NodejsStreamInputAdapter":12,"./nodejsUtils":14,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31,"./utils":32,"./zipObject":35}],16:[function(require,module,exports){ +/* + * This file is used by module bundlers (browserify/webpack/etc) when + * including a stream implementation. We use "readable-stream" to get a + * consistent behavior between nodejs versions but bundlers often have a shim + * for "stream". Using this shim greatly improve the compatibility and greatly + * reduce the final size of the bundle (only one stream implementation, not + * two). + */ +module.exports = require("stream"); + +},{"stream":undefined}],17:[function(require,module,exports){ +'use strict'; +var DataReader = require('./DataReader'); +var utils = require('../utils'); + +function ArrayReader(data) { + DataReader.call(this, data); + for(var i = 0; i < this.data.length; i++) { + data[i] = data[i] & 0xFF; + } +} +utils.inherits(ArrayReader, DataReader); +/** + * @see DataReader.byteAt + */ +ArrayReader.prototype.byteAt = function(i) { + return this.data[this.zero + i]; +}; +/** + * @see DataReader.lastIndexOfSignature + */ +ArrayReader.prototype.lastIndexOfSignature = function(sig) { + var sig0 = sig.charCodeAt(0), + sig1 = sig.charCodeAt(1), + sig2 = sig.charCodeAt(2), + sig3 = sig.charCodeAt(3); + for (var i = this.length - 4; i >= 0; --i) { + if (this.data[i] === sig0 && this.data[i + 1] === sig1 && this.data[i + 2] === sig2 && this.data[i + 3] === sig3) { + return i - this.zero; + } + } + + return -1; +}; +/** + * @see DataReader.readAndCheckSignature + */ +ArrayReader.prototype.readAndCheckSignature = function (sig) { + var sig0 = sig.charCodeAt(0), + sig1 = sig.charCodeAt(1), + sig2 = sig.charCodeAt(2), + sig3 = sig.charCodeAt(3), + data = this.readData(4); + return sig0 === data[0] && sig1 === data[1] && sig2 === data[2] && sig3 === data[3]; +}; +/** + * @see DataReader.readData + */ +ArrayReader.prototype.readData = function(size) { + this.checkOffset(size); + if(size === 0) { + return []; + } + var result = this.data.slice(this.zero + this.index, this.zero + this.index + size); + this.index += size; + return result; +}; +module.exports = ArrayReader; + +},{"../utils":32,"./DataReader":18}],18:[function(require,module,exports){ +'use strict'; +var utils = require('../utils'); + +function DataReader(data) { + this.data = data; // type : see implementation + this.length = data.length; + this.index = 0; + this.zero = 0; +} +DataReader.prototype = { + /** + * Check that the offset will not go too far. + * @param {string} offset the additional offset to check. + * @throws {Error} an Error if the offset is out of bounds. + */ + checkOffset: function(offset) { + this.checkIndex(this.index + offset); + }, + /** + * Check that the specified index will not be too far. + * @param {string} newIndex the index to check. + * @throws {Error} an Error if the index is out of bounds. + */ + checkIndex: function(newIndex) { + if (this.length < this.zero + newIndex || newIndex < 0) { + throw new Error("End of data reached (data length = " + this.length + ", asked index = " + (newIndex) + "). Corrupted zip ?"); + } + }, + /** + * Change the index. + * @param {number} newIndex The new index. + * @throws {Error} if the new index is out of the data. + */ + setIndex: function(newIndex) { + this.checkIndex(newIndex); + this.index = newIndex; + }, + /** + * Skip the next n bytes. + * @param {number} n the number of bytes to skip. + * @throws {Error} if the new index is out of the data. + */ + skip: function(n) { + this.setIndex(this.index + n); + }, + /** + * Get the byte at the specified index. + * @param {number} i the index to use. + * @return {number} a byte. + */ + byteAt: function(i) { + // see implementations + }, + /** + * Get the next number with a given byte size. + * @param {number} size the number of bytes to read. + * @return {number} the corresponding number. + */ + readInt: function(size) { + var result = 0, + i; + this.checkOffset(size); + for (i = this.index + size - 1; i >= this.index; i--) { + result = (result << 8) + this.byteAt(i); + } + this.index += size; + return result; + }, + /** + * Get the next string with a given byte size. + * @param {number} size the number of bytes to read. + * @return {string} the corresponding string. + */ + readString: function(size) { + return utils.transformTo("string", this.readData(size)); + }, + /** + * Get raw data without conversion, bytes. + * @param {number} size the number of bytes to read. + * @return {Object} the raw data, implementation specific. + */ + readData: function(size) { + // see implementations + }, + /** + * Find the last occurence of a zip signature (4 bytes). + * @param {string} sig the signature to find. + * @return {number} the index of the last occurence, -1 if not found. + */ + lastIndexOfSignature: function(sig) { + // see implementations + }, + /** + * Read the signature (4 bytes) at the current position and compare it with sig. + * @param {string} sig the expected signature + * @return {boolean} true if the signature matches, false otherwise. + */ + readAndCheckSignature: function(sig) { + // see implementations + }, + /** + * Get the next date. + * @return {Date} the date. + */ + readDate: function() { + var dostime = this.readInt(4); + return new Date(Date.UTC( + ((dostime >> 25) & 0x7f) + 1980, // year + ((dostime >> 21) & 0x0f) - 1, // month + (dostime >> 16) & 0x1f, // day + (dostime >> 11) & 0x1f, // hour + (dostime >> 5) & 0x3f, // minute + (dostime & 0x1f) << 1)); // second + } +}; +module.exports = DataReader; + +},{"../utils":32}],19:[function(require,module,exports){ +'use strict'; +var Uint8ArrayReader = require('./Uint8ArrayReader'); +var utils = require('../utils'); + +function NodeBufferReader(data) { + Uint8ArrayReader.call(this, data); +} +utils.inherits(NodeBufferReader, Uint8ArrayReader); + +/** + * @see DataReader.readData + */ +NodeBufferReader.prototype.readData = function(size) { + this.checkOffset(size); + var result = this.data.slice(this.zero + this.index, this.zero + this.index + size); + this.index += size; + return result; +}; +module.exports = NodeBufferReader; + +},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(require,module,exports){ +'use strict'; +var DataReader = require('./DataReader'); +var utils = require('../utils'); + +function StringReader(data) { + DataReader.call(this, data); +} +utils.inherits(StringReader, DataReader); +/** + * @see DataReader.byteAt + */ +StringReader.prototype.byteAt = function(i) { + return this.data.charCodeAt(this.zero + i); +}; +/** + * @see DataReader.lastIndexOfSignature + */ +StringReader.prototype.lastIndexOfSignature = function(sig) { + return this.data.lastIndexOf(sig) - this.zero; +}; +/** + * @see DataReader.readAndCheckSignature + */ +StringReader.prototype.readAndCheckSignature = function (sig) { + var data = this.readData(4); + return sig === data; +}; +/** + * @see DataReader.readData + */ +StringReader.prototype.readData = function(size) { + this.checkOffset(size); + // this will work because the constructor applied the "& 0xff" mask. + var result = this.data.slice(this.zero + this.index, this.zero + this.index + size); + this.index += size; + return result; +}; +module.exports = StringReader; + +},{"../utils":32,"./DataReader":18}],21:[function(require,module,exports){ +'use strict'; +var ArrayReader = require('./ArrayReader'); +var utils = require('../utils'); + +function Uint8ArrayReader(data) { + ArrayReader.call(this, data); +} +utils.inherits(Uint8ArrayReader, ArrayReader); +/** + * @see DataReader.readData + */ +Uint8ArrayReader.prototype.readData = function(size) { + this.checkOffset(size); + if(size === 0) { + // in IE10, when using subarray(idx, idx), we get the array [0x00] instead of []. + return new Uint8Array(0); + } + var result = this.data.subarray(this.zero + this.index, this.zero + this.index + size); + this.index += size; + return result; +}; +module.exports = Uint8ArrayReader; + +},{"../utils":32,"./ArrayReader":17}],22:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var support = require('../support'); +var ArrayReader = require('./ArrayReader'); +var StringReader = require('./StringReader'); +var NodeBufferReader = require('./NodeBufferReader'); +var Uint8ArrayReader = require('./Uint8ArrayReader'); + +/** + * Create a reader adapted to the data. + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data to read. + * @return {DataReader} the data reader. + */ +module.exports = function (data) { + var type = utils.getTypeOf(data); + utils.checkSupport(type); + if (type === "string" && !support.uint8array) { + return new StringReader(data); + } + if (type === "nodebuffer") { + return new NodeBufferReader(data); + } + if (support.uint8array) { + return new Uint8ArrayReader(utils.transformTo("uint8array", data)); + } + return new ArrayReader(utils.transformTo("array", data)); +}; + +},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(require,module,exports){ +'use strict'; +exports.LOCAL_FILE_HEADER = "PK\x03\x04"; +exports.CENTRAL_FILE_HEADER = "PK\x01\x02"; +exports.CENTRAL_DIRECTORY_END = "PK\x05\x06"; +exports.ZIP64_CENTRAL_DIRECTORY_LOCATOR = "PK\x06\x07"; +exports.ZIP64_CENTRAL_DIRECTORY_END = "PK\x06\x06"; +exports.DATA_DESCRIPTOR = "PK\x07\x08"; + +},{}],24:[function(require,module,exports){ +'use strict'; + +var GenericWorker = require('./GenericWorker'); +var utils = require('../utils'); + +/** + * A worker which convert chunks to a specified type. + * @constructor + * @param {String} destType the destination type. + */ +function ConvertWorker(destType) { + GenericWorker.call(this, "ConvertWorker to " + destType); + this.destType = destType; +} +utils.inherits(ConvertWorker, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +ConvertWorker.prototype.processChunk = function (chunk) { + this.push({ + data : utils.transformTo(this.destType, chunk.data), + meta : chunk.meta + }); +}; +module.exports = ConvertWorker; + +},{"../utils":32,"./GenericWorker":28}],25:[function(require,module,exports){ +'use strict'; + +var GenericWorker = require('./GenericWorker'); +var crc32 = require('../crc32'); +var utils = require('../utils'); + +/** + * A worker which calculate the crc32 of the data flowing through. + * @constructor + */ +function Crc32Probe() { + GenericWorker.call(this, "Crc32Probe"); + this.withStreamInfo("crc32", 0); +} +utils.inherits(Crc32Probe, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +Crc32Probe.prototype.processChunk = function (chunk) { + this.streamInfo.crc32 = crc32(chunk.data, this.streamInfo.crc32 || 0); + this.push(chunk); +}; +module.exports = Crc32Probe; + +},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var GenericWorker = require('./GenericWorker'); + +/** + * A worker which calculate the total length of the data flowing through. + * @constructor + * @param {String} propName the name used to expose the length + */ +function DataLengthProbe(propName) { + GenericWorker.call(this, "DataLengthProbe for " + propName); + this.propName = propName; + this.withStreamInfo(propName, 0); +} +utils.inherits(DataLengthProbe, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +DataLengthProbe.prototype.processChunk = function (chunk) { + if(chunk) { + var length = this.streamInfo[this.propName] || 0; + this.streamInfo[this.propName] = length + chunk.data.length; + } + GenericWorker.prototype.processChunk.call(this, chunk); +}; +module.exports = DataLengthProbe; + + +},{"../utils":32,"./GenericWorker":28}],27:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var GenericWorker = require('./GenericWorker'); + +// the size of the generated chunks +// TODO expose this as a public variable +var DEFAULT_BLOCK_SIZE = 16 * 1024; + +/** + * A worker that reads a content and emits chunks. + * @constructor + * @param {Promise} dataP the promise of the data to split + */ +function DataWorker(dataP) { + GenericWorker.call(this, "DataWorker"); + var self = this; + this.dataIsReady = false; + this.index = 0; + this.max = 0; + this.data = null; + this.type = ""; + + this._tickScheduled = false; + + dataP.then(function (data) { + self.dataIsReady = true; + self.data = data; + self.max = data && data.length || 0; + self.type = utils.getTypeOf(data); + if(!self.isPaused) { + self._tickAndRepeat(); + } + }, function (e) { + self.error(e); + }); +} + +utils.inherits(DataWorker, GenericWorker); + +/** + * @see GenericWorker.cleanUp + */ +DataWorker.prototype.cleanUp = function () { + GenericWorker.prototype.cleanUp.call(this); + this.data = null; +}; + +/** + * @see GenericWorker.resume + */ +DataWorker.prototype.resume = function () { + if(!GenericWorker.prototype.resume.call(this)) { + return false; + } + + if (!this._tickScheduled && this.dataIsReady) { + this._tickScheduled = true; + utils.delay(this._tickAndRepeat, [], this); + } + return true; +}; + +/** + * Trigger a tick a schedule an other call to this function. + */ +DataWorker.prototype._tickAndRepeat = function() { + this._tickScheduled = false; + if(this.isPaused || this.isFinished) { + return; + } + this._tick(); + if(!this.isFinished) { + utils.delay(this._tickAndRepeat, [], this); + this._tickScheduled = true; + } +}; + +/** + * Read and push a chunk. + */ +DataWorker.prototype._tick = function() { + + if(this.isPaused || this.isFinished) { + return false; + } + + var size = DEFAULT_BLOCK_SIZE; + var data = null, nextIndex = Math.min(this.max, this.index + size); + if (this.index >= this.max) { + // EOF + return this.end(); + } else { + switch(this.type) { + case "string": + data = this.data.substring(this.index, nextIndex); + break; + case "uint8array": + data = this.data.subarray(this.index, nextIndex); + break; + case "array": + case "nodebuffer": + data = this.data.slice(this.index, nextIndex); + break; + } + this.index = nextIndex; + return this.push({ + data : data, + meta : { + percent : this.max ? this.index / this.max * 100 : 0 + } + }); + } +}; + +module.exports = DataWorker; + +},{"../utils":32,"./GenericWorker":28}],28:[function(require,module,exports){ +'use strict'; + +/** + * A worker that does nothing but passing chunks to the next one. This is like + * a nodejs stream but with some differences. On the good side : + * - it works on IE 6-9 without any issue / polyfill + * - it weights less than the full dependencies bundled with browserify + * - it forwards errors (no need to declare an error handler EVERYWHERE) + * + * A chunk is an object with 2 attributes : `meta` and `data`. The former is an + * object containing anything (`percent` for example), see each worker for more + * details. The latter is the real data (String, Uint8Array, etc). + * + * @constructor + * @param {String} name the name of the stream (mainly used for debugging purposes) + */ +function GenericWorker(name) { + // the name of the worker + this.name = name || "default"; + // an object containing metadata about the workers chain + this.streamInfo = {}; + // an error which happened when the worker was paused + this.generatedError = null; + // an object containing metadata to be merged by this worker into the general metadata + this.extraStreamInfo = {}; + // true if the stream is paused (and should not do anything), false otherwise + this.isPaused = true; + // true if the stream is finished (and should not do anything), false otherwise + this.isFinished = false; + // true if the stream is locked to prevent further structure updates (pipe), false otherwise + this.isLocked = false; + // the event listeners + this._listeners = { + 'data':[], + 'end':[], + 'error':[] + }; + // the previous worker, if any + this.previous = null; +} + +GenericWorker.prototype = { + /** + * Push a chunk to the next workers. + * @param {Object} chunk the chunk to push + */ + push : function (chunk) { + this.emit("data", chunk); + }, + /** + * End the stream. + * @return {Boolean} true if this call ended the worker, false otherwise. + */ + end : function () { + if (this.isFinished) { + return false; + } + + this.flush(); + try { + this.emit("end"); + this.cleanUp(); + this.isFinished = true; + } catch (e) { + this.emit("error", e); + } + return true; + }, + /** + * End the stream with an error. + * @param {Error} e the error which caused the premature end. + * @return {Boolean} true if this call ended the worker with an error, false otherwise. + */ + error : function (e) { + if (this.isFinished) { + return false; + } + + if(this.isPaused) { + this.generatedError = e; + } else { + this.isFinished = true; + + this.emit("error", e); + + // in the workers chain exploded in the middle of the chain, + // the error event will go downward but we also need to notify + // workers upward that there has been an error. + if(this.previous) { + this.previous.error(e); + } + + this.cleanUp(); + } + return true; + }, + /** + * Add a callback on an event. + * @param {String} name the name of the event (data, end, error) + * @param {Function} listener the function to call when the event is triggered + * @return {GenericWorker} the current object for chainability + */ + on : function (name, listener) { + this._listeners[name].push(listener); + return this; + }, + /** + * Clean any references when a worker is ending. + */ + cleanUp : function () { + this.streamInfo = this.generatedError = this.extraStreamInfo = null; + this._listeners = []; + }, + /** + * Trigger an event. This will call registered callback with the provided arg. + * @param {String} name the name of the event (data, end, error) + * @param {Object} arg the argument to call the callback with. + */ + emit : function (name, arg) { + if (this._listeners[name]) { + for(var i = 0; i < this._listeners[name].length; i++) { + this._listeners[name][i].call(this, arg); + } + } + }, + /** + * Chain a worker with an other. + * @param {Worker} next the worker receiving events from the current one. + * @return {worker} the next worker for chainability + */ + pipe : function (next) { + return next.registerPrevious(this); + }, + /** + * Same as `pipe` in the other direction. + * Using an API with `pipe(next)` is very easy. + * Implementing the API with the point of view of the next one registering + * a source is easier, see the ZipFileWorker. + * @param {Worker} previous the previous worker, sending events to this one + * @return {Worker} the current worker for chainability + */ + registerPrevious : function (previous) { + if (this.isLocked) { + throw new Error("The stream '" + this + "' has already been used."); + } + + // sharing the streamInfo... + this.streamInfo = previous.streamInfo; + // ... and adding our own bits + this.mergeStreamInfo(); + this.previous = previous; + var self = this; + previous.on('data', function (chunk) { + self.processChunk(chunk); + }); + previous.on('end', function () { + self.end(); + }); + previous.on('error', function (e) { + self.error(e); + }); + return this; + }, + /** + * Pause the stream so it doesn't send events anymore. + * @return {Boolean} true if this call paused the worker, false otherwise. + */ + pause : function () { + if(this.isPaused || this.isFinished) { + return false; + } + this.isPaused = true; + + if(this.previous) { + this.previous.pause(); + } + return true; + }, + /** + * Resume a paused stream. + * @return {Boolean} true if this call resumed the worker, false otherwise. + */ + resume : function () { + if(!this.isPaused || this.isFinished) { + return false; + } + this.isPaused = false; + + // if true, the worker tried to resume but failed + var withError = false; + if(this.generatedError) { + this.error(this.generatedError); + withError = true; + } + if(this.previous) { + this.previous.resume(); + } + + return !withError; + }, + /** + * Flush any remaining bytes as the stream is ending. + */ + flush : function () {}, + /** + * Process a chunk. This is usually the method overridden. + * @param {Object} chunk the chunk to process. + */ + processChunk : function(chunk) { + this.push(chunk); + }, + /** + * Add a key/value to be added in the workers chain streamInfo once activated. + * @param {String} key the key to use + * @param {Object} value the associated value + * @return {Worker} the current worker for chainability + */ + withStreamInfo : function (key, value) { + this.extraStreamInfo[key] = value; + this.mergeStreamInfo(); + return this; + }, + /** + * Merge this worker's streamInfo into the chain's streamInfo. + */ + mergeStreamInfo : function () { + for(var key in this.extraStreamInfo) { + if (!this.extraStreamInfo.hasOwnProperty(key)) { + continue; + } + this.streamInfo[key] = this.extraStreamInfo[key]; + } + }, + + /** + * Lock the stream to prevent further updates on the workers chain. + * After calling this method, all calls to pipe will fail. + */ + lock: function () { + if (this.isLocked) { + throw new Error("The stream '" + this + "' has already been used."); + } + this.isLocked = true; + if (this.previous) { + this.previous.lock(); + } + }, + + /** + * + * Pretty print the workers chain. + */ + toString : function () { + var me = "Worker " + this.name; + if (this.previous) { + return this.previous + " -> " + me; + } else { + return me; + } + } +}; + +module.exports = GenericWorker; + +},{}],29:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var ConvertWorker = require('./ConvertWorker'); +var GenericWorker = require('./GenericWorker'); +var base64 = require('../base64'); +var support = require("../support"); +var external = require("../external"); + +var NodejsStreamOutputAdapter = null; +if (support.nodestream) { + try { + NodejsStreamOutputAdapter = require('../nodejs/NodejsStreamOutputAdapter'); + } catch(e) {} +} + +/** + * Apply the final transformation of the data. If the user wants a Blob for + * example, it's easier to work with an U8intArray and finally do the + * ArrayBuffer/Blob conversion. + * @param {String} type the name of the final type + * @param {String|Uint8Array|Buffer} content the content to transform + * @param {String} mimeType the mime type of the content, if applicable. + * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the content in the right format. + */ +function transformZipOutput(type, content, mimeType) { + switch(type) { + case "blob" : + return utils.newBlob(utils.transformTo("arraybuffer", content), mimeType); + case "base64" : + return base64.encode(content); + default : + return utils.transformTo(type, content); + } +} + +/** + * Concatenate an array of data of the given type. + * @param {String} type the type of the data in the given array. + * @param {Array} dataArray the array containing the data chunks to concatenate + * @return {String|Uint8Array|Buffer} the concatenated data + * @throws Error if the asked type is unsupported + */ +function concat (type, dataArray) { + var i, index = 0, res = null, totalLength = 0; + for(i = 0; i < dataArray.length; i++) { + totalLength += dataArray[i].length; + } + switch(type) { + case "string": + return dataArray.join(""); + case "array": + return Array.prototype.concat.apply([], dataArray); + case "uint8array": + res = new Uint8Array(totalLength); + for(i = 0; i < dataArray.length; i++) { + res.set(dataArray[i], index); + index += dataArray[i].length; + } + return res; + case "nodebuffer": + return Buffer.concat(dataArray); + default: + throw new Error("concat : unsupported type '" + type + "'"); + } +} + +/** + * Listen a StreamHelper, accumulate its content and concatenate it into a + * complete block. + * @param {StreamHelper} helper the helper to use. + * @param {Function} updateCallback a callback called on each update. Called + * with one arg : + * - the metadata linked to the update received. + * @return Promise the promise for the accumulation. + */ +function accumulate(helper, updateCallback) { + return new external.Promise(function (resolve, reject){ + var dataArray = []; + var chunkType = helper._internalType, + resultType = helper._outputType, + mimeType = helper._mimeType; + helper + .on('data', function (data, meta) { + dataArray.push(data); + if(updateCallback) { + updateCallback(meta); + } + }) + .on('error', function(err) { + dataArray = []; + reject(err); + }) + .on('end', function (){ + try { + var result = transformZipOutput(resultType, concat(chunkType, dataArray), mimeType); + resolve(result); + } catch (e) { + reject(e); + } + dataArray = []; + }) + .resume(); + }); +} + +/** + * An helper to easily use workers outside of JSZip. + * @constructor + * @param {Worker} worker the worker to wrap + * @param {String} outputType the type of data expected by the use + * @param {String} mimeType the mime type of the content, if applicable. + */ +function StreamHelper(worker, outputType, mimeType) { + var internalType = outputType; + switch(outputType) { + case "blob": + case "arraybuffer": + internalType = "uint8array"; + break; + case "base64": + internalType = "string"; + break; + } + + try { + // the type used internally + this._internalType = internalType; + // the type used to output results + this._outputType = outputType; + // the mime type + this._mimeType = mimeType; + utils.checkSupport(internalType); + this._worker = worker.pipe(new ConvertWorker(internalType)); + // the last workers can be rewired without issues but we need to + // prevent any updates on previous workers. + worker.lock(); + } catch(e) { + this._worker = new GenericWorker("error"); + this._worker.error(e); + } +} + +StreamHelper.prototype = { + /** + * Listen a StreamHelper, accumulate its content and concatenate it into a + * complete block. + * @param {Function} updateCb the update callback. + * @return Promise the promise for the accumulation. + */ + accumulate : function (updateCb) { + return accumulate(this, updateCb); + }, + /** + * Add a listener on an event triggered on a stream. + * @param {String} evt the name of the event + * @param {Function} fn the listener + * @return {StreamHelper} the current helper. + */ + on : function (evt, fn) { + var self = this; + + if(evt === "data") { + this._worker.on(evt, function (chunk) { + fn.call(self, chunk.data, chunk.meta); + }); + } else { + this._worker.on(evt, function () { + utils.delay(fn, arguments, self); + }); + } + return this; + }, + /** + * Resume the flow of chunks. + * @return {StreamHelper} the current helper. + */ + resume : function () { + utils.delay(this._worker.resume, [], this._worker); + return this; + }, + /** + * Pause the flow of chunks. + * @return {StreamHelper} the current helper. + */ + pause : function () { + this._worker.pause(); + return this; + }, + /** + * Return a nodejs stream for this helper. + * @param {Function} updateCb the update callback. + * @return {NodejsStreamOutputAdapter} the nodejs stream. + */ + toNodejsStream : function (updateCb) { + utils.checkSupport("nodestream"); + if (this._outputType !== "nodebuffer") { + // an object stream containing blob/arraybuffer/uint8array/string + // is strange and I don't know if it would be useful. + // I you find this comment and have a good usecase, please open a + // bug report ! + throw new Error(this._outputType + " is not supported by this method"); + } + + return new NodejsStreamOutputAdapter(this, { + objectMode : this._outputType !== "nodebuffer" + }, updateCb); + } +}; + + +module.exports = StreamHelper; + +},{"../base64":1,"../external":6,"../nodejs/NodejsStreamOutputAdapter":13,"../support":30,"../utils":32,"./ConvertWorker":24,"./GenericWorker":28}],30:[function(require,module,exports){ +'use strict'; + +exports.base64 = true; +exports.array = true; +exports.string = true; +exports.arraybuffer = typeof ArrayBuffer !== "undefined" && typeof Uint8Array !== "undefined"; +exports.nodebuffer = typeof Buffer !== "undefined"; +// contains true if JSZip can read/generate Uint8Array, false otherwise. +exports.uint8array = typeof Uint8Array !== "undefined"; + +if (typeof ArrayBuffer === "undefined") { + exports.blob = false; +} +else { + var buffer = new ArrayBuffer(0); + try { + exports.blob = new Blob([buffer], { + type: "application/zip" + }).size === 0; + } + catch (e) { + try { + var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder; + var builder = new Builder(); + builder.append(buffer); + exports.blob = builder.getBlob('application/zip').size === 0; + } + catch (e) { + exports.blob = false; + } + } +} + +try { + exports.nodestream = !!require('readable-stream').Readable; +} catch(e) { + exports.nodestream = false; +} + +},{"readable-stream":16}],31:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); +var support = require('./support'); +var nodejsUtils = require('./nodejsUtils'); +var GenericWorker = require('./stream/GenericWorker'); + +/** + * The following functions come from pako, from pako/lib/utils/strings + * released under the MIT license, see pako https://github.com/nodeca/pako/ + */ + +// Table with utf8 lengths (calculated by first byte of sequence) +// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS, +// because max possible codepoint is 0x10ffff +var _utf8len = new Array(256); +for (var i=0; i<256; i++) { + _utf8len[i] = (i >= 252 ? 6 : i >= 248 ? 5 : i >= 240 ? 4 : i >= 224 ? 3 : i >= 192 ? 2 : 1); +} +_utf8len[254]=_utf8len[254]=1; // Invalid sequence start + +// convert string to array (typed, when possible) +var string2buf = function (str) { + var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0; + + // count binary size + for (m_pos = 0; m_pos < str_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) { + c2 = str.charCodeAt(m_pos+1); + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); + m_pos++; + } + } + buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4; + } + + // allocate buffer + if (support.uint8array) { + buf = new Uint8Array(buf_len); + } else { + buf = new Array(buf_len); + } + + // convert + for (i=0, m_pos = 0; i < buf_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) { + c2 = str.charCodeAt(m_pos+1); + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); + m_pos++; + } + } + if (c < 0x80) { + /* one byte */ + buf[i++] = c; + } else if (c < 0x800) { + /* two bytes */ + buf[i++] = 0xC0 | (c >>> 6); + buf[i++] = 0x80 | (c & 0x3f); + } else if (c < 0x10000) { + /* three bytes */ + buf[i++] = 0xE0 | (c >>> 12); + buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | (c & 0x3f); + } else { + /* four bytes */ + buf[i++] = 0xf0 | (c >>> 18); + buf[i++] = 0x80 | (c >>> 12 & 0x3f); + buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | (c & 0x3f); + } + } + + return buf; +}; + +// Calculate max possible position in utf8 buffer, +// that will not break sequence. If that's not possible +// - (very small limits) return max size as is. +// +// buf[] - utf8 bytes array +// max - length limit (mandatory); +var utf8border = function(buf, max) { + var pos; + + max = max || buf.length; + if (max > buf.length) { max = buf.length; } + + // go back from last position, until start of sequence found + pos = max-1; + while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; } + + // Fuckup - very small and broken sequence, + // return max, because we should return something anyway. + if (pos < 0) { return max; } + + // If we came to start of buffer - that means vuffer is too small, + // return max too. + if (pos === 0) { return max; } + + return (pos + _utf8len[buf[pos]] > max) ? pos : max; +}; + +// convert array to string +var buf2string = function (buf) { + var str, i, out, c, c_len; + var len = buf.length; + + // Reserve max possible length (2 words per char) + // NB: by unknown reasons, Array is significantly faster for + // String.fromCharCode.apply than Uint16Array. + var utf16buf = new Array(len*2); + + for (out=0, i=0; i 4) { utf16buf[out++] = 0xfffd; i += c_len-1; continue; } + + // apply mask on first byte + c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07; + // join the rest + while (c_len > 1 && i < len) { + c = (c << 6) | (buf[i++] & 0x3f); + c_len--; + } + + // terminated by end of string? + if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; } + + if (c < 0x10000) { + utf16buf[out++] = c; + } else { + c -= 0x10000; + utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff); + utf16buf[out++] = 0xdc00 | (c & 0x3ff); + } + } + + // shrinkBuf(utf16buf, out) + if (utf16buf.length !== out) { + if(utf16buf.subarray) { + utf16buf = utf16buf.subarray(0, out); + } else { + utf16buf.length = out; + } + } + + // return String.fromCharCode.apply(null, utf16buf); + return utils.applyFromCharCode(utf16buf); +}; + + +// That's all for the pako functions. + + +/** + * Transform a javascript string into an array (typed if possible) of bytes, + * UTF-8 encoded. + * @param {String} str the string to encode + * @return {Array|Uint8Array|Buffer} the UTF-8 encoded string. + */ +exports.utf8encode = function utf8encode(str) { + if (support.nodebuffer) { + return nodejsUtils.newBufferFrom(str, "utf-8"); + } + + return string2buf(str); +}; + + +/** + * Transform a bytes array (or a representation) representing an UTF-8 encoded + * string into a javascript string. + * @param {Array|Uint8Array|Buffer} buf the data de decode + * @return {String} the decoded string. + */ +exports.utf8decode = function utf8decode(buf) { + if (support.nodebuffer) { + return utils.transformTo("nodebuffer", buf).toString("utf-8"); + } + + buf = utils.transformTo(support.uint8array ? "uint8array" : "array", buf); + + return buf2string(buf); +}; + +/** + * A worker to decode utf8 encoded binary chunks into string chunks. + * @constructor + */ +function Utf8DecodeWorker() { + GenericWorker.call(this, "utf-8 decode"); + // the last bytes if a chunk didn't end with a complete codepoint. + this.leftOver = null; +} +utils.inherits(Utf8DecodeWorker, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +Utf8DecodeWorker.prototype.processChunk = function (chunk) { + + var data = utils.transformTo(support.uint8array ? "uint8array" : "array", chunk.data); + + // 1st step, re-use what's left of the previous chunk + if (this.leftOver && this.leftOver.length) { + if(support.uint8array) { + var previousData = data; + data = new Uint8Array(previousData.length + this.leftOver.length); + data.set(this.leftOver, 0); + data.set(previousData, this.leftOver.length); + } else { + data = this.leftOver.concat(data); + } + this.leftOver = null; + } + + var nextBoundary = utf8border(data); + var usableData = data; + if (nextBoundary !== data.length) { + if (support.uint8array) { + usableData = data.subarray(0, nextBoundary); + this.leftOver = data.subarray(nextBoundary, data.length); + } else { + usableData = data.slice(0, nextBoundary); + this.leftOver = data.slice(nextBoundary, data.length); + } + } + + this.push({ + data : exports.utf8decode(usableData), + meta : chunk.meta + }); +}; + +/** + * @see GenericWorker.flush + */ +Utf8DecodeWorker.prototype.flush = function () { + if(this.leftOver && this.leftOver.length) { + this.push({ + data : exports.utf8decode(this.leftOver), + meta : {} + }); + this.leftOver = null; + } +}; +exports.Utf8DecodeWorker = Utf8DecodeWorker; + +/** + * A worker to endcode string chunks into utf8 encoded binary chunks. + * @constructor + */ +function Utf8EncodeWorker() { + GenericWorker.call(this, "utf-8 encode"); +} +utils.inherits(Utf8EncodeWorker, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +Utf8EncodeWorker.prototype.processChunk = function (chunk) { + this.push({ + data : exports.utf8encode(chunk.data), + meta : chunk.meta + }); +}; +exports.Utf8EncodeWorker = Utf8EncodeWorker; + +},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(require,module,exports){ +'use strict'; + +var support = require('./support'); +var base64 = require('./base64'); +var nodejsUtils = require('./nodejsUtils'); +var setImmediate = require('core-js/library/fn/set-immediate'); +var external = require("./external"); + + +/** + * Convert a string that pass as a "binary string": it should represent a byte + * array but may have > 255 char codes. Be sure to take only the first byte + * and returns the byte array. + * @param {String} str the string to transform. + * @return {Array|Uint8Array} the string in a binary format. + */ +function string2binary(str) { + var result = null; + if (support.uint8array) { + result = new Uint8Array(str.length); + } else { + result = new Array(str.length); + } + return stringToArrayLike(str, result); +} + +/** + * Create a new blob with the given content and the given type. + * @param {String|ArrayBuffer} part the content to put in the blob. DO NOT use + * an Uint8Array because the stock browser of android 4 won't accept it (it + * will be silently converted to a string, "[object Uint8Array]"). + * + * Use only ONE part to build the blob to avoid a memory leak in IE11 / Edge: + * when a large amount of Array is used to create the Blob, the amount of + * memory consumed is nearly 100 times the original data amount. + * + * @param {String} type the mime type of the blob. + * @return {Blob} the created blob. + */ +exports.newBlob = function(part, type) { + exports.checkSupport("blob"); + + try { + // Blob constructor + return new Blob([part], { + type: type + }); + } + catch (e) { + + try { + // deprecated, browser only, old way + var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder; + var builder = new Builder(); + builder.append(part); + return builder.getBlob(type); + } + catch (e) { + + // well, fuck ?! + throw new Error("Bug : can't construct the Blob."); + } + } + + +}; +/** + * The identity function. + * @param {Object} input the input. + * @return {Object} the same input. + */ +function identity(input) { + return input; +} + +/** + * Fill in an array with a string. + * @param {String} str the string to use. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to fill in (will be mutated). + * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated array. + */ +function stringToArrayLike(str, array) { + for (var i = 0; i < str.length; ++i) { + array[i] = str.charCodeAt(i) & 0xFF; + } + return array; +} + +/** + * An helper for the function arrayLikeToString. + * This contains static informations and functions that + * can be optimized by the browser JIT compiler. + */ +var arrayToStringHelper = { + /** + * Transform an array of int into a string, chunk by chunk. + * See the performances notes on arrayLikeToString. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform. + * @param {String} type the type of the array. + * @param {Integer} chunk the chunk size. + * @return {String} the resulting string. + * @throws Error if the chunk is too big for the stack. + */ + stringifyByChunk: function(array, type, chunk) { + var result = [], k = 0, len = array.length; + // shortcut + if (len <= chunk) { + return String.fromCharCode.apply(null, array); + } + while (k < len) { + if (type === "array" || type === "nodebuffer") { + result.push(String.fromCharCode.apply(null, array.slice(k, Math.min(k + chunk, len)))); + } + else { + result.push(String.fromCharCode.apply(null, array.subarray(k, Math.min(k + chunk, len)))); + } + k += chunk; + } + return result.join(""); + }, + /** + * Call String.fromCharCode on every item in the array. + * This is the naive implementation, which generate A LOT of intermediate string. + * This should be used when everything else fail. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform. + * @return {String} the result. + */ + stringifyByChar: function(array){ + var resultStr = ""; + for(var i = 0; i < array.length; i++) { + resultStr += String.fromCharCode(array[i]); + } + return resultStr; + }, + applyCanBeUsed : { + /** + * true if the browser accepts to use String.fromCharCode on Uint8Array + */ + uint8array : (function () { + try { + return support.uint8array && String.fromCharCode.apply(null, new Uint8Array(1)).length === 1; + } catch (e) { + return false; + } + })(), + /** + * true if the browser accepts to use String.fromCharCode on nodejs Buffer. + */ + nodebuffer : (function () { + try { + return support.nodebuffer && String.fromCharCode.apply(null, nodejsUtils.allocBuffer(1)).length === 1; + } catch (e) { + return false; + } + })() + } +}; + +/** + * Transform an array-like object to a string. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform. + * @return {String} the result. + */ +function arrayLikeToString(array) { + // Performances notes : + // -------------------- + // String.fromCharCode.apply(null, array) is the fastest, see + // see http://jsperf.com/converting-a-uint8array-to-a-string/2 + // but the stack is limited (and we can get huge arrays !). + // + // result += String.fromCharCode(array[i]); generate too many strings ! + // + // This code is inspired by http://jsperf.com/arraybuffer-to-string-apply-performance/2 + // TODO : we now have workers that split the work. Do we still need that ? + var chunk = 65536, + type = exports.getTypeOf(array), + canUseApply = true; + if (type === "uint8array") { + canUseApply = arrayToStringHelper.applyCanBeUsed.uint8array; + } else if (type === "nodebuffer") { + canUseApply = arrayToStringHelper.applyCanBeUsed.nodebuffer; + } + + if (canUseApply) { + while (chunk > 1) { + try { + return arrayToStringHelper.stringifyByChunk(array, type, chunk); + } catch (e) { + chunk = Math.floor(chunk / 2); + } + } + } + + // no apply or chunk error : slow and painful algorithm + // default browser on android 4.* + return arrayToStringHelper.stringifyByChar(array); +} + +exports.applyFromCharCode = arrayLikeToString; + + +/** + * Copy the data from an array-like to an other array-like. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayFrom the origin array. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayTo the destination array which will be mutated. + * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated destination array. + */ +function arrayLikeToArrayLike(arrayFrom, arrayTo) { + for (var i = 0; i < arrayFrom.length; i++) { + arrayTo[i] = arrayFrom[i]; + } + return arrayTo; +} + +// a matrix containing functions to transform everything into everything. +var transform = {}; + +// string to ? +transform["string"] = { + "string": identity, + "array": function(input) { + return stringToArrayLike(input, new Array(input.length)); + }, + "arraybuffer": function(input) { + return transform["string"]["uint8array"](input).buffer; + }, + "uint8array": function(input) { + return stringToArrayLike(input, new Uint8Array(input.length)); + }, + "nodebuffer": function(input) { + return stringToArrayLike(input, nodejsUtils.allocBuffer(input.length)); + } +}; + +// array to ? +transform["array"] = { + "string": arrayLikeToString, + "array": identity, + "arraybuffer": function(input) { + return (new Uint8Array(input)).buffer; + }, + "uint8array": function(input) { + return new Uint8Array(input); + }, + "nodebuffer": function(input) { + return nodejsUtils.newBufferFrom(input); + } +}; + +// arraybuffer to ? +transform["arraybuffer"] = { + "string": function(input) { + return arrayLikeToString(new Uint8Array(input)); + }, + "array": function(input) { + return arrayLikeToArrayLike(new Uint8Array(input), new Array(input.byteLength)); + }, + "arraybuffer": identity, + "uint8array": function(input) { + return new Uint8Array(input); + }, + "nodebuffer": function(input) { + return nodejsUtils.newBufferFrom(new Uint8Array(input)); + } +}; + +// uint8array to ? +transform["uint8array"] = { + "string": arrayLikeToString, + "array": function(input) { + return arrayLikeToArrayLike(input, new Array(input.length)); + }, + "arraybuffer": function(input) { + return input.buffer; + }, + "uint8array": identity, + "nodebuffer": function(input) { + return nodejsUtils.newBufferFrom(input); + } +}; + +// nodebuffer to ? +transform["nodebuffer"] = { + "string": arrayLikeToString, + "array": function(input) { + return arrayLikeToArrayLike(input, new Array(input.length)); + }, + "arraybuffer": function(input) { + return transform["nodebuffer"]["uint8array"](input).buffer; + }, + "uint8array": function(input) { + return arrayLikeToArrayLike(input, new Uint8Array(input.length)); + }, + "nodebuffer": identity +}; + +/** + * Transform an input into any type. + * The supported output type are : string, array, uint8array, arraybuffer, nodebuffer. + * If no output type is specified, the unmodified input will be returned. + * @param {String} outputType the output type. + * @param {String|Array|ArrayBuffer|Uint8Array|Buffer} input the input to convert. + * @throws {Error} an Error if the browser doesn't support the requested output type. + */ +exports.transformTo = function(outputType, input) { + if (!input) { + // undefined, null, etc + // an empty string won't harm. + input = ""; + } + if (!outputType) { + return input; + } + exports.checkSupport(outputType); + var inputType = exports.getTypeOf(input); + var result = transform[inputType][outputType](input); + return result; +}; + +/** + * Return the type of the input. + * The type will be in a format valid for JSZip.utils.transformTo : string, array, uint8array, arraybuffer. + * @param {Object} input the input to identify. + * @return {String} the (lowercase) type of the input. + */ +exports.getTypeOf = function(input) { + if (typeof input === "string") { + return "string"; + } + if (Object.prototype.toString.call(input) === "[object Array]") { + return "array"; + } + if (support.nodebuffer && nodejsUtils.isBuffer(input)) { + return "nodebuffer"; + } + if (support.uint8array && input instanceof Uint8Array) { + return "uint8array"; + } + if (support.arraybuffer && input instanceof ArrayBuffer) { + return "arraybuffer"; + } +}; + +/** + * Throw an exception if the type is not supported. + * @param {String} type the type to check. + * @throws {Error} an Error if the browser doesn't support the requested type. + */ +exports.checkSupport = function(type) { + var supported = support[type.toLowerCase()]; + if (!supported) { + throw new Error(type + " is not supported by this platform"); + } +}; + +exports.MAX_VALUE_16BITS = 65535; +exports.MAX_VALUE_32BITS = -1; // well, "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" is parsed as -1 + +/** + * Prettify a string read as binary. + * @param {string} str the string to prettify. + * @return {string} a pretty string. + */ +exports.pretty = function(str) { + var res = '', + code, i; + for (i = 0; i < (str || "").length; i++) { + code = str.charCodeAt(i); + res += '\\x' + (code < 16 ? "0" : "") + code.toString(16).toUpperCase(); + } + return res; +}; + +/** + * Defer the call of a function. + * @param {Function} callback the function to call asynchronously. + * @param {Array} args the arguments to give to the callback. + */ +exports.delay = function(callback, args, self) { + setImmediate(function () { + callback.apply(self || null, args || []); + }); +}; + +/** + * Extends a prototype with an other, without calling a constructor with + * side effects. Inspired by nodejs' `utils.inherits` + * @param {Function} ctor the constructor to augment + * @param {Function} superCtor the parent constructor to use + */ +exports.inherits = function (ctor, superCtor) { + var Obj = function() {}; + Obj.prototype = superCtor.prototype; + ctor.prototype = new Obj(); +}; + +/** + * Merge the objects passed as parameters into a new one. + * @private + * @param {...Object} var_args All objects to merge. + * @return {Object} a new object with the data of the others. + */ +exports.extend = function() { + var result = {}, i, attr; + for (i = 0; i < arguments.length; i++) { // arguments is not enumerable in some browsers + for (attr in arguments[i]) { + if (arguments[i].hasOwnProperty(attr) && typeof result[attr] === "undefined") { + result[attr] = arguments[i][attr]; + } + } + } + return result; +}; + +/** + * Transform arbitrary content into a Promise. + * @param {String} name a name for the content being processed. + * @param {Object} inputData the content to process. + * @param {Boolean} isBinary true if the content is not an unicode string + * @param {Boolean} isOptimizedBinaryString true if the string content only has one byte per character. + * @param {Boolean} isBase64 true if the string content is encoded with base64. + * @return {Promise} a promise in a format usable by JSZip. + */ +exports.prepareContent = function(name, inputData, isBinary, isOptimizedBinaryString, isBase64) { + + // if inputData is already a promise, this flatten it. + var promise = external.Promise.resolve(inputData).then(function(data) { + + + var isBlob = support.blob && (data instanceof Blob || ['[object File]', '[object Blob]'].indexOf(Object.prototype.toString.call(data)) !== -1); + + if (isBlob && typeof FileReader !== "undefined") { + return new external.Promise(function (resolve, reject) { + var reader = new FileReader(); + + reader.onload = function(e) { + resolve(e.target.result); + }; + reader.onerror = function(e) { + reject(e.target.error); + }; + reader.readAsArrayBuffer(data); + }); + } else { + return data; + } + }); + + return promise.then(function(data) { + var dataType = exports.getTypeOf(data); + + if (!dataType) { + return external.Promise.reject( + new Error("Can't read the data of '" + name + "'. Is it " + + "in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?") + ); + } + // special case : it's way easier to work with Uint8Array than with ArrayBuffer + if (dataType === "arraybuffer") { + data = exports.transformTo("uint8array", data); + } else if (dataType === "string") { + if (isBase64) { + data = base64.decode(data); + } + else if (isBinary) { + // optimizedBinaryString === true means that the file has already been filtered with a 0xFF mask + if (isOptimizedBinaryString !== true) { + // this is a string, not in a base64 format. + // Be sure that this is a correct "binary string" + data = string2binary(data); + } + } + } + return data; + }); +}; + +},{"./base64":1,"./external":6,"./nodejsUtils":14,"./support":30,"core-js/library/fn/set-immediate":36}],33:[function(require,module,exports){ +'use strict'; +var readerFor = require('./reader/readerFor'); +var utils = require('./utils'); +var sig = require('./signature'); +var ZipEntry = require('./zipEntry'); +var utf8 = require('./utf8'); +var support = require('./support'); +// class ZipEntries {{{ +/** + * All the entries in the zip file. + * @constructor + * @param {Object} loadOptions Options for loading the stream. + */ +function ZipEntries(loadOptions) { + this.files = []; + this.loadOptions = loadOptions; +} +ZipEntries.prototype = { + /** + * Check that the reader is on the specified signature. + * @param {string} expectedSignature the expected signature. + * @throws {Error} if it is an other signature. + */ + checkSignature: function(expectedSignature) { + if (!this.reader.readAndCheckSignature(expectedSignature)) { + this.reader.index -= 4; + var signature = this.reader.readString(4); + throw new Error("Corrupted zip or bug: unexpected signature " + "(" + utils.pretty(signature) + ", expected " + utils.pretty(expectedSignature) + ")"); + } + }, + /** + * Check if the given signature is at the given index. + * @param {number} askedIndex the index to check. + * @param {string} expectedSignature the signature to expect. + * @return {boolean} true if the signature is here, false otherwise. + */ + isSignature: function(askedIndex, expectedSignature) { + var currentIndex = this.reader.index; + this.reader.setIndex(askedIndex); + var signature = this.reader.readString(4); + var result = signature === expectedSignature; + this.reader.setIndex(currentIndex); + return result; + }, + /** + * Read the end of the central directory. + */ + readBlockEndOfCentral: function() { + this.diskNumber = this.reader.readInt(2); + this.diskWithCentralDirStart = this.reader.readInt(2); + this.centralDirRecordsOnThisDisk = this.reader.readInt(2); + this.centralDirRecords = this.reader.readInt(2); + this.centralDirSize = this.reader.readInt(4); + this.centralDirOffset = this.reader.readInt(4); + + this.zipCommentLength = this.reader.readInt(2); + // warning : the encoding depends of the system locale + // On a linux machine with LANG=en_US.utf8, this field is utf8 encoded. + // On a windows machine, this field is encoded with the localized windows code page. + var zipComment = this.reader.readData(this.zipCommentLength); + var decodeParamType = support.uint8array ? "uint8array" : "array"; + // To get consistent behavior with the generation part, we will assume that + // this is utf8 encoded unless specified otherwise. + var decodeContent = utils.transformTo(decodeParamType, zipComment); + this.zipComment = this.loadOptions.decodeFileName(decodeContent); + }, + /** + * Read the end of the Zip 64 central directory. + * Not merged with the method readEndOfCentral : + * The end of central can coexist with its Zip64 brother, + * I don't want to read the wrong number of bytes ! + */ + readBlockZip64EndOfCentral: function() { + this.zip64EndOfCentralSize = this.reader.readInt(8); + this.reader.skip(4); + // this.versionMadeBy = this.reader.readString(2); + // this.versionNeeded = this.reader.readInt(2); + this.diskNumber = this.reader.readInt(4); + this.diskWithCentralDirStart = this.reader.readInt(4); + this.centralDirRecordsOnThisDisk = this.reader.readInt(8); + this.centralDirRecords = this.reader.readInt(8); + this.centralDirSize = this.reader.readInt(8); + this.centralDirOffset = this.reader.readInt(8); + + this.zip64ExtensibleData = {}; + var extraDataSize = this.zip64EndOfCentralSize - 44, + index = 0, + extraFieldId, + extraFieldLength, + extraFieldValue; + while (index < extraDataSize) { + extraFieldId = this.reader.readInt(2); + extraFieldLength = this.reader.readInt(4); + extraFieldValue = this.reader.readData(extraFieldLength); + this.zip64ExtensibleData[extraFieldId] = { + id: extraFieldId, + length: extraFieldLength, + value: extraFieldValue + }; + } + }, + /** + * Read the end of the Zip 64 central directory locator. + */ + readBlockZip64EndOfCentralLocator: function() { + this.diskWithZip64CentralDirStart = this.reader.readInt(4); + this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8); + this.disksCount = this.reader.readInt(4); + if (this.disksCount > 1) { + throw new Error("Multi-volumes zip are not supported"); + } + }, + /** + * Read the local files, based on the offset read in the central part. + */ + readLocalFiles: function() { + var i, file; + for (i = 0; i < this.files.length; i++) { + file = this.files[i]; + this.reader.setIndex(file.localHeaderOffset); + this.checkSignature(sig.LOCAL_FILE_HEADER); + file.readLocalPart(this.reader); + file.handleUTF8(); + file.processAttributes(); + } + }, + /** + * Read the central directory. + */ + readCentralDir: function() { + var file; + + this.reader.setIndex(this.centralDirOffset); + while (this.reader.readAndCheckSignature(sig.CENTRAL_FILE_HEADER)) { + file = new ZipEntry({ + zip64: this.zip64 + }, this.loadOptions); + file.readCentralPart(this.reader); + this.files.push(file); + } + + if (this.centralDirRecords !== this.files.length) { + if (this.centralDirRecords !== 0 && this.files.length === 0) { + // We expected some records but couldn't find ANY. + // This is really suspicious, as if something went wrong. + throw new Error("Corrupted zip or bug: expected " + this.centralDirRecords + " records in central dir, got " + this.files.length); + } else { + // We found some records but not all. + // Something is wrong but we got something for the user: no error here. + // console.warn("expected", this.centralDirRecords, "records in central dir, got", this.files.length); + } + } + }, + /** + * Read the end of central directory. + */ + readEndOfCentral: function() { + var offset = this.reader.lastIndexOfSignature(sig.CENTRAL_DIRECTORY_END); + if (offset < 0) { + // Check if the content is a truncated zip or complete garbage. + // A "LOCAL_FILE_HEADER" is not required at the beginning (auto + // extractible zip for example) but it can give a good hint. + // If an ajax request was used without responseType, we will also + // get unreadable data. + var isGarbage = !this.isSignature(0, sig.LOCAL_FILE_HEADER); + + if (isGarbage) { + throw new Error("Can't find end of central directory : is this a zip file ? " + + "If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html"); + } else { + throw new Error("Corrupted zip: can't find end of central directory"); + } + + } + this.reader.setIndex(offset); + var endOfCentralDirOffset = offset; + this.checkSignature(sig.CENTRAL_DIRECTORY_END); + this.readBlockEndOfCentral(); + + + /* extract from the zip spec : + 4) If one of the fields in the end of central directory + record is too small to hold required data, the field + should be set to -1 (0xFFFF or 0xFFFFFFFF) and the + ZIP64 format record should be created. + 5) The end of central directory record and the + Zip64 end of central directory locator record must + reside on the same disk when splitting or spanning + an archive. + */ + if (this.diskNumber === utils.MAX_VALUE_16BITS || this.diskWithCentralDirStart === utils.MAX_VALUE_16BITS || this.centralDirRecordsOnThisDisk === utils.MAX_VALUE_16BITS || this.centralDirRecords === utils.MAX_VALUE_16BITS || this.centralDirSize === utils.MAX_VALUE_32BITS || this.centralDirOffset === utils.MAX_VALUE_32BITS) { + this.zip64 = true; + + /* + Warning : the zip64 extension is supported, but ONLY if the 64bits integer read from + the zip file can fit into a 32bits integer. This cannot be solved : JavaScript represents + all numbers as 64-bit double precision IEEE 754 floating point numbers. + So, we have 53bits for integers and bitwise operations treat everything as 32bits. + see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators + and http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf section 8.5 + */ + + // should look for a zip64 EOCD locator + offset = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR); + if (offset < 0) { + throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator"); + } + this.reader.setIndex(offset); + this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR); + this.readBlockZip64EndOfCentralLocator(); + + // now the zip64 EOCD record + if (!this.isSignature(this.relativeOffsetEndOfZip64CentralDir, sig.ZIP64_CENTRAL_DIRECTORY_END)) { + // console.warn("ZIP64 end of central directory not where expected."); + this.relativeOffsetEndOfZip64CentralDir = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_END); + if (this.relativeOffsetEndOfZip64CentralDir < 0) { + throw new Error("Corrupted zip: can't find the ZIP64 end of central directory"); + } + } + this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir); + this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_END); + this.readBlockZip64EndOfCentral(); + } + + var expectedEndOfCentralDirOffset = this.centralDirOffset + this.centralDirSize; + if (this.zip64) { + expectedEndOfCentralDirOffset += 20; // end of central dir 64 locator + expectedEndOfCentralDirOffset += 12 /* should not include the leading 12 bytes */ + this.zip64EndOfCentralSize; + } + + var extraBytes = endOfCentralDirOffset - expectedEndOfCentralDirOffset; + + if (extraBytes > 0) { + // console.warn(extraBytes, "extra bytes at beginning or within zipfile"); + if (this.isSignature(endOfCentralDirOffset, sig.CENTRAL_FILE_HEADER)) { + // The offsets seem wrong, but we have something at the specified offset. + // So… we keep it. + } else { + // the offset is wrong, update the "zero" of the reader + // this happens if data has been prepended (crx files for example) + this.reader.zero = extraBytes; + } + } else if (extraBytes < 0) { + throw new Error("Corrupted zip: missing " + Math.abs(extraBytes) + " bytes."); + } + }, + prepareReader: function(data) { + this.reader = readerFor(data); + }, + /** + * Read a zip file and create ZipEntries. + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the binary string representing a zip file. + */ + load: function(data) { + this.prepareReader(data); + this.readEndOfCentral(); + this.readCentralDir(); + this.readLocalFiles(); + } +}; +// }}} end of ZipEntries +module.exports = ZipEntries; + +},{"./reader/readerFor":22,"./signature":23,"./support":30,"./utf8":31,"./utils":32,"./zipEntry":34}],34:[function(require,module,exports){ +'use strict'; +var readerFor = require('./reader/readerFor'); +var utils = require('./utils'); +var CompressedObject = require('./compressedObject'); +var crc32fn = require('./crc32'); +var utf8 = require('./utf8'); +var compressions = require('./compressions'); +var support = require('./support'); + +var MADE_BY_DOS = 0x00; +var MADE_BY_UNIX = 0x03; + +/** + * Find a compression registered in JSZip. + * @param {string} compressionMethod the method magic to find. + * @return {Object|null} the JSZip compression object, null if none found. + */ +var findCompression = function(compressionMethod) { + for (var method in compressions) { + if (!compressions.hasOwnProperty(method)) { + continue; + } + if (compressions[method].magic === compressionMethod) { + return compressions[method]; + } + } + return null; +}; + +// class ZipEntry {{{ +/** + * An entry in the zip file. + * @constructor + * @param {Object} options Options of the current file. + * @param {Object} loadOptions Options for loading the stream. + */ +function ZipEntry(options, loadOptions) { + this.options = options; + this.loadOptions = loadOptions; +} +ZipEntry.prototype = { + /** + * say if the file is encrypted. + * @return {boolean} true if the file is encrypted, false otherwise. + */ + isEncrypted: function() { + // bit 1 is set + return (this.bitFlag & 0x0001) === 0x0001; + }, + /** + * say if the file has utf-8 filename/comment. + * @return {boolean} true if the filename/comment is in utf-8, false otherwise. + */ + useUTF8: function() { + // bit 11 is set + return (this.bitFlag & 0x0800) === 0x0800; + }, + /** + * Read the local part of a zip file and add the info in this object. + * @param {DataReader} reader the reader to use. + */ + readLocalPart: function(reader) { + var compression, localExtraFieldsLength; + + // we already know everything from the central dir ! + // If the central dir data are false, we are doomed. + // On the bright side, the local part is scary : zip64, data descriptors, both, etc. + // The less data we get here, the more reliable this should be. + // Let's skip the whole header and dash to the data ! + reader.skip(22); + // in some zip created on windows, the filename stored in the central dir contains \ instead of /. + // Strangely, the filename here is OK. + // I would love to treat these zip files as corrupted (see http://www.info-zip.org/FAQ.html#backslashes + // or APPNOTE#4.4.17.1, "All slashes MUST be forward slashes '/'") but there are a lot of bad zip generators... + // Search "unzip mismatching "local" filename continuing with "central" filename version" on + // the internet. + // + // I think I see the logic here : the central directory is used to display + // content and the local directory is used to extract the files. Mixing / and \ + // may be used to display \ to windows users and use / when extracting the files. + // Unfortunately, this lead also to some issues : http://seclists.org/fulldisclosure/2009/Sep/394 + this.fileNameLength = reader.readInt(2); + localExtraFieldsLength = reader.readInt(2); // can't be sure this will be the same as the central dir + // the fileName is stored as binary data, the handleUTF8 method will take care of the encoding. + this.fileName = reader.readData(this.fileNameLength); + reader.skip(localExtraFieldsLength); + + if (this.compressedSize === -1 || this.uncompressedSize === -1) { + throw new Error("Bug or corrupted zip : didn't get enough informations from the central directory " + "(compressedSize === -1 || uncompressedSize === -1)"); + } + + compression = findCompression(this.compressionMethod); + if (compression === null) { // no compression found + throw new Error("Corrupted zip : compression " + utils.pretty(this.compressionMethod) + " unknown (inner file : " + utils.transformTo("string", this.fileName) + ")"); + } + this.decompressed = new CompressedObject(this.compressedSize, this.uncompressedSize, this.crc32, compression, reader.readData(this.compressedSize)); + }, + + /** + * Read the central part of a zip file and add the info in this object. + * @param {DataReader} reader the reader to use. + */ + readCentralPart: function(reader) { + this.versionMadeBy = reader.readInt(2); + reader.skip(2); + // this.versionNeeded = reader.readInt(2); + this.bitFlag = reader.readInt(2); + this.compressionMethod = reader.readString(2); + this.date = reader.readDate(); + this.crc32 = reader.readInt(4); + this.compressedSize = reader.readInt(4); + this.uncompressedSize = reader.readInt(4); + var fileNameLength = reader.readInt(2); + this.extraFieldsLength = reader.readInt(2); + this.fileCommentLength = reader.readInt(2); + this.diskNumberStart = reader.readInt(2); + this.internalFileAttributes = reader.readInt(2); + this.externalFileAttributes = reader.readInt(4); + this.localHeaderOffset = reader.readInt(4); + + if (this.isEncrypted()) { + throw new Error("Encrypted zip are not supported"); + } + + // will be read in the local part, see the comments there + reader.skip(fileNameLength); + this.readExtraFields(reader); + this.parseZIP64ExtraField(reader); + this.fileComment = reader.readData(this.fileCommentLength); + }, + + /** + * Parse the external file attributes and get the unix/dos permissions. + */ + processAttributes: function () { + this.unixPermissions = null; + this.dosPermissions = null; + var madeBy = this.versionMadeBy >> 8; + + // Check if we have the DOS directory flag set. + // We look for it in the DOS and UNIX permissions + // but some unknown platform could set it as a compatibility flag. + this.dir = this.externalFileAttributes & 0x0010 ? true : false; + + if(madeBy === MADE_BY_DOS) { + // first 6 bits (0 to 5) + this.dosPermissions = this.externalFileAttributes & 0x3F; + } + + if(madeBy === MADE_BY_UNIX) { + this.unixPermissions = (this.externalFileAttributes >> 16) & 0xFFFF; + // the octal permissions are in (this.unixPermissions & 0x01FF).toString(8); + } + + // fail safe : if the name ends with a / it probably means a folder + if (!this.dir && this.fileNameStr.slice(-1) === '/') { + this.dir = true; + } + }, + + /** + * Parse the ZIP64 extra field and merge the info in the current ZipEntry. + * @param {DataReader} reader the reader to use. + */ + parseZIP64ExtraField: function(reader) { + + if (!this.extraFields[0x0001]) { + return; + } + + // should be something, preparing the extra reader + var extraReader = readerFor(this.extraFields[0x0001].value); + + // I really hope that these 64bits integer can fit in 32 bits integer, because js + // won't let us have more. + if (this.uncompressedSize === utils.MAX_VALUE_32BITS) { + this.uncompressedSize = extraReader.readInt(8); + } + if (this.compressedSize === utils.MAX_VALUE_32BITS) { + this.compressedSize = extraReader.readInt(8); + } + if (this.localHeaderOffset === utils.MAX_VALUE_32BITS) { + this.localHeaderOffset = extraReader.readInt(8); + } + if (this.diskNumberStart === utils.MAX_VALUE_32BITS) { + this.diskNumberStart = extraReader.readInt(4); + } + }, + /** + * Read the central part of a zip file and add the info in this object. + * @param {DataReader} reader the reader to use. + */ + readExtraFields: function(reader) { + var end = reader.index + this.extraFieldsLength, + extraFieldId, + extraFieldLength, + extraFieldValue; + + if (!this.extraFields) { + this.extraFields = {}; + } + + while (reader.index < end) { + extraFieldId = reader.readInt(2); + extraFieldLength = reader.readInt(2); + extraFieldValue = reader.readData(extraFieldLength); + + this.extraFields[extraFieldId] = { + id: extraFieldId, + length: extraFieldLength, + value: extraFieldValue + }; + } + }, + /** + * Apply an UTF8 transformation if needed. + */ + handleUTF8: function() { + var decodeParamType = support.uint8array ? "uint8array" : "array"; + if (this.useUTF8()) { + this.fileNameStr = utf8.utf8decode(this.fileName); + this.fileCommentStr = utf8.utf8decode(this.fileComment); + } else { + var upath = this.findExtraFieldUnicodePath(); + if (upath !== null) { + this.fileNameStr = upath; + } else { + // ASCII text or unsupported code page + var fileNameByteArray = utils.transformTo(decodeParamType, this.fileName); + this.fileNameStr = this.loadOptions.decodeFileName(fileNameByteArray); + } + + var ucomment = this.findExtraFieldUnicodeComment(); + if (ucomment !== null) { + this.fileCommentStr = ucomment; + } else { + // ASCII text or unsupported code page + var commentByteArray = utils.transformTo(decodeParamType, this.fileComment); + this.fileCommentStr = this.loadOptions.decodeFileName(commentByteArray); + } + } + }, + + /** + * Find the unicode path declared in the extra field, if any. + * @return {String} the unicode path, null otherwise. + */ + findExtraFieldUnicodePath: function() { + var upathField = this.extraFields[0x7075]; + if (upathField) { + var extraReader = readerFor(upathField.value); + + // wrong version + if (extraReader.readInt(1) !== 1) { + return null; + } + + // the crc of the filename changed, this field is out of date. + if (crc32fn(this.fileName) !== extraReader.readInt(4)) { + return null; + } + + return utf8.utf8decode(extraReader.readData(upathField.length - 5)); + } + return null; + }, + + /** + * Find the unicode comment declared in the extra field, if any. + * @return {String} the unicode comment, null otherwise. + */ + findExtraFieldUnicodeComment: function() { + var ucommentField = this.extraFields[0x6375]; + if (ucommentField) { + var extraReader = readerFor(ucommentField.value); + + // wrong version + if (extraReader.readInt(1) !== 1) { + return null; + } + + // the crc of the comment changed, this field is out of date. + if (crc32fn(this.fileComment) !== extraReader.readInt(4)) { + return null; + } + + return utf8.utf8decode(extraReader.readData(ucommentField.length - 5)); + } + return null; + } +}; +module.exports = ZipEntry; + +},{"./compressedObject":2,"./compressions":3,"./crc32":4,"./reader/readerFor":22,"./support":30,"./utf8":31,"./utils":32}],35:[function(require,module,exports){ +'use strict'; + +var StreamHelper = require('./stream/StreamHelper'); +var DataWorker = require('./stream/DataWorker'); +var utf8 = require('./utf8'); +var CompressedObject = require('./compressedObject'); +var GenericWorker = require('./stream/GenericWorker'); + +/** + * A simple object representing a file in the zip file. + * @constructor + * @param {string} name the name of the file + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data + * @param {Object} options the options of the file + */ +var ZipObject = function(name, data, options) { + this.name = name; + this.dir = options.dir; + this.date = options.date; + this.comment = options.comment; + this.unixPermissions = options.unixPermissions; + this.dosPermissions = options.dosPermissions; + + this._data = data; + this._dataBinary = options.binary; + // keep only the compression + this.options = { + compression : options.compression, + compressionOptions : options.compressionOptions + }; +}; + +ZipObject.prototype = { + /** + * Create an internal stream for the content of this object. + * @param {String} type the type of each chunk. + * @return StreamHelper the stream. + */ + internalStream: function (type) { + var result = null, outputType = "string"; + try { + if (!type) { + throw new Error("No output type specified."); + } + outputType = type.toLowerCase(); + var askUnicodeString = outputType === "string" || outputType === "text"; + if (outputType === "binarystring" || outputType === "text") { + outputType = "string"; + } + result = this._decompressWorker(); + + var isUnicodeString = !this._dataBinary; + + if (isUnicodeString && !askUnicodeString) { + result = result.pipe(new utf8.Utf8EncodeWorker()); + } + if (!isUnicodeString && askUnicodeString) { + result = result.pipe(new utf8.Utf8DecodeWorker()); + } + } catch (e) { + result = new GenericWorker("error"); + result.error(e); + } + + return new StreamHelper(result, outputType, ""); + }, + + /** + * Prepare the content in the asked type. + * @param {String} type the type of the result. + * @param {Function} onUpdate a function to call on each internal update. + * @return Promise the promise of the result. + */ + async: function (type, onUpdate) { + return this.internalStream(type).accumulate(onUpdate); + }, + + /** + * Prepare the content as a nodejs stream. + * @param {String} type the type of each chunk. + * @param {Function} onUpdate a function to call on each internal update. + * @return Stream the stream. + */ + nodeStream: function (type, onUpdate) { + return this.internalStream(type || "nodebuffer").toNodejsStream(onUpdate); + }, + + /** + * Return a worker for the compressed content. + * @private + * @param {Object} compression the compression object to use. + * @param {Object} compressionOptions the options to use when compressing. + * @return Worker the worker. + */ + _compressWorker: function (compression, compressionOptions) { + if ( + this._data instanceof CompressedObject && + this._data.compression.magic === compression.magic + ) { + return this._data.getCompressedWorker(); + } else { + var result = this._decompressWorker(); + if(!this._dataBinary) { + result = result.pipe(new utf8.Utf8EncodeWorker()); + } + return CompressedObject.createWorkerFrom(result, compression, compressionOptions); + } + }, + /** + * Return a worker for the decompressed content. + * @private + * @return Worker the worker. + */ + _decompressWorker : function () { + if (this._data instanceof CompressedObject) { + return this._data.getContentWorker(); + } else if (this._data instanceof GenericWorker) { + return this._data; + } else { + return new DataWorker(this._data); + } + } +}; + +var removedMethods = ["asText", "asBinary", "asNodeBuffer", "asUint8Array", "asArrayBuffer"]; +var removedFn = function () { + throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide."); +}; + +for(var i = 0; i < removedMethods.length; i++) { + ZipObject.prototype[removedMethods[i]] = removedFn; +} +module.exports = ZipObject; + +},{"./compressedObject":2,"./stream/DataWorker":27,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31}],36:[function(require,module,exports){ +require('../modules/web.immediate'); +module.exports = require('../modules/_core').setImmediate; +},{"../modules/_core":40,"../modules/web.immediate":56}],37:[function(require,module,exports){ +module.exports = function(it){ + if(typeof it != 'function')throw TypeError(it + ' is not a function!'); + return it; +}; +},{}],38:[function(require,module,exports){ +var isObject = require('./_is-object'); +module.exports = function(it){ + if(!isObject(it))throw TypeError(it + ' is not an object!'); + return it; +}; +},{"./_is-object":51}],39:[function(require,module,exports){ +var toString = {}.toString; + +module.exports = function(it){ + return toString.call(it).slice(8, -1); +}; +},{}],40:[function(require,module,exports){ +var core = module.exports = {version: '2.3.0'}; +if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef +},{}],41:[function(require,module,exports){ +// optional / simple context binding +var aFunction = require('./_a-function'); +module.exports = function(fn, that, length){ + aFunction(fn); + if(that === undefined)return fn; + switch(length){ + case 1: return function(a){ + return fn.call(that, a); + }; + case 2: return function(a, b){ + return fn.call(that, a, b); + }; + case 3: return function(a, b, c){ + return fn.call(that, a, b, c); + }; + } + return function(/* ...args */){ + return fn.apply(that, arguments); + }; +}; +},{"./_a-function":37}],42:[function(require,module,exports){ +// Thank's IE8 for his funny defineProperty +module.exports = !require('./_fails')(function(){ + return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7; +}); +},{"./_fails":45}],43:[function(require,module,exports){ +var isObject = require('./_is-object') + , document = require('./_global').document + // in old IE typeof document.createElement is 'object' + , is = isObject(document) && isObject(document.createElement); +module.exports = function(it){ + return is ? document.createElement(it) : {}; +}; +},{"./_global":46,"./_is-object":51}],44:[function(require,module,exports){ +var global = require('./_global') + , core = require('./_core') + , ctx = require('./_ctx') + , hide = require('./_hide') + , PROTOTYPE = 'prototype'; + +var $export = function(type, name, source){ + var IS_FORCED = type & $export.F + , IS_GLOBAL = type & $export.G + , IS_STATIC = type & $export.S + , IS_PROTO = type & $export.P + , IS_BIND = type & $export.B + , IS_WRAP = type & $export.W + , exports = IS_GLOBAL ? core : core[name] || (core[name] = {}) + , expProto = exports[PROTOTYPE] + , target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE] + , key, own, out; + if(IS_GLOBAL)source = name; + for(key in source){ + // contains in native + own = !IS_FORCED && target && target[key] !== undefined; + if(own && key in exports)continue; + // export native or passed + out = own ? target[key] : source[key]; + // prevent global pollution for namespaces + exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key] + // bind timers to global for call from export context + : IS_BIND && own ? ctx(out, global) + // wrap global constructors for prevent change them in library + : IS_WRAP && target[key] == out ? (function(C){ + var F = function(a, b, c){ + if(this instanceof C){ + switch(arguments.length){ + case 0: return new C; + case 1: return new C(a); + case 2: return new C(a, b); + } return new C(a, b, c); + } return C.apply(this, arguments); + }; + F[PROTOTYPE] = C[PROTOTYPE]; + return F; + // make static versions for prototype methods + })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; + // export proto methods to core.%CONSTRUCTOR%.methods.%NAME% + if(IS_PROTO){ + (exports.virtual || (exports.virtual = {}))[key] = out; + // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME% + if(type & $export.R && expProto && !expProto[key])hide(expProto, key, out); + } + } +}; +// type bitmap +$export.F = 1; // forced +$export.G = 2; // global +$export.S = 4; // static +$export.P = 8; // proto +$export.B = 16; // bind +$export.W = 32; // wrap +$export.U = 64; // safe +$export.R = 128; // real proto method for `library` +module.exports = $export; +},{"./_core":40,"./_ctx":41,"./_global":46,"./_hide":47}],45:[function(require,module,exports){ +module.exports = function(exec){ + try { + return !!exec(); + } catch(e){ + return true; + } +}; +},{}],46:[function(require,module,exports){ +// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 +var global = module.exports = typeof window != 'undefined' && window.Math == Math + ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')(); +if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef +},{}],47:[function(require,module,exports){ +var dP = require('./_object-dp') + , createDesc = require('./_property-desc'); +module.exports = require('./_descriptors') ? function(object, key, value){ + return dP.f(object, key, createDesc(1, value)); +} : function(object, key, value){ + object[key] = value; + return object; +}; +},{"./_descriptors":42,"./_object-dp":52,"./_property-desc":53}],48:[function(require,module,exports){ +module.exports = require('./_global').document && document.documentElement; +},{"./_global":46}],49:[function(require,module,exports){ +module.exports = !require('./_descriptors') && !require('./_fails')(function(){ + return Object.defineProperty(require('./_dom-create')('div'), 'a', {get: function(){ return 7; }}).a != 7; +}); +},{"./_descriptors":42,"./_dom-create":43,"./_fails":45}],50:[function(require,module,exports){ +// fast apply, http://jsperf.lnkit.com/fast-apply/5 +module.exports = function(fn, args, that){ + var un = that === undefined; + switch(args.length){ + case 0: return un ? fn() + : fn.call(that); + case 1: return un ? fn(args[0]) + : fn.call(that, args[0]); + case 2: return un ? fn(args[0], args[1]) + : fn.call(that, args[0], args[1]); + case 3: return un ? fn(args[0], args[1], args[2]) + : fn.call(that, args[0], args[1], args[2]); + case 4: return un ? fn(args[0], args[1], args[2], args[3]) + : fn.call(that, args[0], args[1], args[2], args[3]); + } return fn.apply(that, args); +}; +},{}],51:[function(require,module,exports){ +module.exports = function(it){ + return typeof it === 'object' ? it !== null : typeof it === 'function'; +}; +},{}],52:[function(require,module,exports){ +var anObject = require('./_an-object') + , IE8_DOM_DEFINE = require('./_ie8-dom-define') + , toPrimitive = require('./_to-primitive') + , dP = Object.defineProperty; + +exports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes){ + anObject(O); + P = toPrimitive(P, true); + anObject(Attributes); + if(IE8_DOM_DEFINE)try { + return dP(O, P, Attributes); + } catch(e){ /* empty */ } + if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!'); + if('value' in Attributes)O[P] = Attributes.value; + return O; +}; +},{"./_an-object":38,"./_descriptors":42,"./_ie8-dom-define":49,"./_to-primitive":55}],53:[function(require,module,exports){ +module.exports = function(bitmap, value){ + return { + enumerable : !(bitmap & 1), + configurable: !(bitmap & 2), + writable : !(bitmap & 4), + value : value + }; +}; +},{}],54:[function(require,module,exports){ +var ctx = require('./_ctx') + , invoke = require('./_invoke') + , html = require('./_html') + , cel = require('./_dom-create') + , global = require('./_global') + , process = global.process + , setTask = global.setImmediate + , clearTask = global.clearImmediate + , MessageChannel = global.MessageChannel + , counter = 0 + , queue = {} + , ONREADYSTATECHANGE = 'onreadystatechange' + , defer, channel, port; +var run = function(){ + var id = +this; + if(queue.hasOwnProperty(id)){ + var fn = queue[id]; + delete queue[id]; + fn(); + } +}; +var listener = function(event){ + run.call(event.data); +}; +// Node.js 0.9+ & IE10+ has setImmediate, otherwise: +if(!setTask || !clearTask){ + setTask = function setImmediate(fn){ + var args = [], i = 1; + while(arguments.length > i)args.push(arguments[i++]); + queue[++counter] = function(){ + invoke(typeof fn == 'function' ? fn : Function(fn), args); + }; + defer(counter); + return counter; + }; + clearTask = function clearImmediate(id){ + delete queue[id]; + }; + // Node.js 0.8- + if(require('./_cof')(process) == 'process'){ + defer = function(id){ + process.nextTick(ctx(run, id, 1)); + }; + // Browsers with MessageChannel, includes WebWorkers + } else if(MessageChannel){ + channel = new MessageChannel; + port = channel.port2; + channel.port1.onmessage = listener; + defer = ctx(port.postMessage, port, 1); + // Browsers with postMessage, skip WebWorkers + // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' + } else if(global.addEventListener && typeof postMessage == 'function' && !global.importScripts){ + defer = function(id){ + global.postMessage(id + '', '*'); + }; + global.addEventListener('message', listener, false); + // IE8- + } else if(ONREADYSTATECHANGE in cel('script')){ + defer = function(id){ + html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function(){ + html.removeChild(this); + run.call(id); + }; + }; + // Rest old browsers + } else { + defer = function(id){ + setTimeout(ctx(run, id, 1), 0); + }; + } +} +module.exports = { + set: setTask, + clear: clearTask +}; +},{"./_cof":39,"./_ctx":41,"./_dom-create":43,"./_global":46,"./_html":48,"./_invoke":50}],55:[function(require,module,exports){ +// 7.1.1 ToPrimitive(input [, PreferredType]) +var isObject = require('./_is-object'); +// instead of the ES6 spec version, we didn't implement @@toPrimitive case +// and the second argument - flag - preferred type is a string +module.exports = function(it, S){ + if(!isObject(it))return it; + var fn, val; + if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val; + if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val; + if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val; + throw TypeError("Can't convert object to primitive value"); +}; +},{"./_is-object":51}],56:[function(require,module,exports){ +var $export = require('./_export') + , $task = require('./_task'); +$export($export.G + $export.B, { + setImmediate: $task.set, + clearImmediate: $task.clear +}); +},{"./_export":44,"./_task":54}],57:[function(require,module,exports){ +(function (global){ +'use strict'; +var Mutation = global.MutationObserver || global.WebKitMutationObserver; + +var scheduleDrain; + +{ + if (Mutation) { + var called = 0; + var observer = new Mutation(nextTick); + var element = global.document.createTextNode(''); + observer.observe(element, { + characterData: true + }); + scheduleDrain = function () { + element.data = (called = ++called % 2); + }; + } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') { + var channel = new global.MessageChannel(); + channel.port1.onmessage = nextTick; + scheduleDrain = function () { + channel.port2.postMessage(0); + }; + } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) { + scheduleDrain = function () { + + // Create a + + + + + +
    + +

    index.html

    +
    + + diff --git a/doc/0.1.4/en_private/overview-tree.html b/doc/0.1.4/en_private/overview-tree.html new file mode 100644 index 0000000..055d307 --- /dev/null +++ b/doc/0.1.4/en_private/overview-tree.html @@ -0,0 +1,313 @@ + + + + + +Class Hierarchy + + + + + + + + + + + + + + + +
    + +
    +
    + +
    +
    +

    Class Hierarchy

    + +
    +
    +

    Interface Hierarchy

    + +
    +
    +

    Enum Hierarchy

    + +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_private/package-search-index.js b/doc/0.1.4/en_private/package-search-index.js new file mode 100644 index 0000000..195d1ef --- /dev/null +++ b/doc/0.1.4/en_private/package-search-index.js @@ -0,0 +1 @@ +packageSearchIndex = [{"l":"All Packages","url":"allpackages-index.html"},{"l":"bitchanger.calculations"},{"l":"bitchanger.gui.controller"},{"l":"bitchanger.gui.controls"},{"l":"bitchanger.gui.views"},{"l":"bitchanger.main"},{"l":"bitchanger.preferences"},{"l":"bitchanger.util"}] \ No newline at end of file diff --git a/doc/0.1.4/en_private/package-search-index.zip b/doc/0.1.4/en_private/package-search-index.zip new file mode 100644 index 0000000000000000000000000000000000000000..90b7fa8a5681c29667a5121b06e812c3e829c791 GIT binary patch literal 282 zcmWIWW@Zs#;Nak3NL(fn$bbYSf$W0BR3-ORj{)C#?<;{3eUenY-P z4m>RTn_}9l8D#A}`ZanC#kr4*TiSKB{IGTmkXtnOZe%7uf544{aiy1)V+}v^$cEHA zhs@oVqh0n)mDfz+o7J6`u967K$$PrfYf;ie*QtN~A3s0j`{N#uyGZuO zlRpogbGvgT>%^~TKbQi%**V@i)u@yKoyN?_z!2cg$Rxsma6Yme$oZ%Mr)L7ZS=m5J N8G+CpNbd#f0|09pRK5TJ literal 0 HcmV?d00001 diff --git a/doc/0.1.4/en_private/resources/glass.png b/doc/0.1.4/en_private/resources/glass.png new file mode 100644 index 0000000000000000000000000000000000000000..a7f591f467a1c0c949bbc510156a0c1afb860a6e GIT binary patch literal 499 zcmVJoRsvExf%rEN>jUL}qZ_~k#FbE+Q;{`;0FZwVNX2n-^JoI; zP;4#$8DIy*Yk-P>VN(DUKmPse7mx+ExD4O|;?E5D0Z5($mjO3`*anwQU^s{ZDK#Lz zj>~{qyaIx5K!t%=G&2IJNzg!ChRpyLkO7}Ry!QaotAHAMpbB3AF(}|_f!G-oI|uK6 z`id_dumai5K%C3Y$;tKS_iqMPHg<*|-@e`liWLAggVM!zAP#@l;=c>S03;{#04Z~5 zN_+ss=Yg6*hTr59mzMwZ@+l~q!+?ft!fF66AXT#wWavHt30bZWFCK%!BNk}LN?0Hg z1VF_nfs`Lm^DjYZ1(1uD0u4CSIr)XAaqW6IT{!St5~1{i=i}zAy76p%_|w8rh@@c0Axr!ns=D-X+|*sY6!@wacG9%)Qn*O zl0sa739kT-&_?#oVxXF6tOnqTD)cZ}2vi$`ZU8RLAlo8=_z#*P3xI~i!lEh+Pdu-L zx{d*wgjtXbnGX_Yf@Tc7Q3YhLhPvc8noGJs2DA~1DySiA&6V{5JzFt ojAY1KXm~va;tU{v7C?Xj0BHw!K;2aXV*mgE07*qoM6N<$f;4TDA^-pY literal 0 HcmV?d00001 diff --git a/doc/0.1.4/en_private/script.js b/doc/0.1.4/en_private/script.js new file mode 100644 index 0000000..0eaaf53 --- /dev/null +++ b/doc/0.1.4/en_private/script.js @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +var moduleSearchIndex; +var packageSearchIndex; +var typeSearchIndex; +var memberSearchIndex; +var tagSearchIndex; +function loadScripts(doc, tag) { + createElem(doc, tag, 'jquery/jszip/dist/jszip.js'); + createElem(doc, tag, 'jquery/jszip-utils/dist/jszip-utils.js'); + if (window.navigator.userAgent.indexOf('MSIE ') > 0 || window.navigator.userAgent.indexOf('Trident/') > 0 || + window.navigator.userAgent.indexOf('Edge/') > 0) { + createElem(doc, tag, 'jquery/jszip-utils/dist/jszip-utils-ie.js'); + } + createElem(doc, tag, 'search.js'); + + $.get(pathtoroot + "module-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "module-search-index.zip", function(e, data) { + var zip = new JSZip(data); + zip.load(data); + moduleSearchIndex = JSON.parse(zip.file("module-search-index.json").asText()); + }); + }); + $.get(pathtoroot + "package-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "package-search-index.zip", function(e, data) { + var zip = new JSZip(data); + zip.load(data); + packageSearchIndex = JSON.parse(zip.file("package-search-index.json").asText()); + }); + }); + $.get(pathtoroot + "type-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "type-search-index.zip", function(e, data) { + var zip = new JSZip(data); + zip.load(data); + typeSearchIndex = JSON.parse(zip.file("type-search-index.json").asText()); + }); + }); + $.get(pathtoroot + "member-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "member-search-index.zip", function(e, data) { + var zip = new JSZip(data); + zip.load(data); + memberSearchIndex = JSON.parse(zip.file("member-search-index.json").asText()); + }); + }); + $.get(pathtoroot + "tag-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "tag-search-index.zip", function(e, data) { + var zip = new JSZip(data); + zip.load(data); + tagSearchIndex = JSON.parse(zip.file("tag-search-index.json").asText()); + }); + }); + if (!moduleSearchIndex) { + createElem(doc, tag, 'module-search-index.js'); + } + if (!packageSearchIndex) { + createElem(doc, tag, 'package-search-index.js'); + } + if (!typeSearchIndex) { + createElem(doc, tag, 'type-search-index.js'); + } + if (!memberSearchIndex) { + createElem(doc, tag, 'member-search-index.js'); + } + if (!tagSearchIndex) { + createElem(doc, tag, 'tag-search-index.js'); + } + $(window).resize(function() { + $('.navPadding').css('padding-top', $('.fixedNav').css("height")); + }); +} + +function createElem(doc, tag, path) { + var script = doc.createElement(tag); + var scriptElement = doc.getElementsByTagName(tag)[0]; + script.src = pathtoroot + path; + scriptElement.parentNode.insertBefore(script, scriptElement); +} + +function show(type) { + count = 0; + for (var key in data) { + var row = document.getElementById(key); + if ((data[key] & type) !== 0) { + row.style.display = ''; + row.className = (count++ % 2) ? rowColor : altColor; + } + else + row.style.display = 'none'; + } + updateTabs(type); +} + +function updateTabs(type) { + for (var value in tabs) { + var sNode = document.getElementById(tabs[value][0]); + var spanNode = sNode.firstChild; + if (value == type) { + sNode.className = activeTableTab; + spanNode.innerHTML = tabs[value][1]; + } + else { + sNode.className = tableTab; + spanNode.innerHTML = "" + tabs[value][1] + ""; + } + } +} + +function updateModuleFrame(pFrame, cFrame) { + top.packageFrame.location = pFrame; + top.classFrame.location = cFrame; +} diff --git a/doc/0.1.4/en_private/search.js b/doc/0.1.4/en_private/search.js new file mode 100644 index 0000000..b773531 --- /dev/null +++ b/doc/0.1.4/en_private/search.js @@ -0,0 +1,326 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +var noResult = {l: "No results found"}; +var catModules = "Modules"; +var catPackages = "Packages"; +var catTypes = "Types"; +var catMembers = "Members"; +var catSearchTags = "SearchTags"; +var highlight = "$&"; +var camelCaseRegexp = ""; +var secondaryMatcher = ""; +function getHighlightedText(item) { + var ccMatcher = new RegExp(camelCaseRegexp); + var label = item.replace(ccMatcher, highlight); + if (label === item) { + label = item.replace(secondaryMatcher, highlight); + } + return label; +} +function getURLPrefix(ui) { + var urlPrefix=""; + if (useModuleDirectories) { + var slash = "/"; + if (ui.item.category === catModules) { + return ui.item.l + slash; + } else if (ui.item.category === catPackages && ui.item.m) { + return ui.item.m + slash; + } else if ((ui.item.category === catTypes && ui.item.p) || ui.item.category === catMembers) { + $.each(packageSearchIndex, function(index, item) { + if (ui.item.p == item.l) { + urlPrefix = item.m + slash; + } + }); + return urlPrefix; + } else { + return urlPrefix; + } + } + return urlPrefix; +} +var watermark = 'Search'; +$(function() { + $("#search").val(''); + $("#search").prop("disabled", false); + $("#reset").prop("disabled", false); + $("#search").val(watermark).addClass('watermark'); + $("#search").blur(function() { + if ($(this).val().length == 0) { + $(this).val(watermark).addClass('watermark'); + } + }); + $("#search").on('click keydown', function() { + if ($(this).val() == watermark) { + $(this).val('').removeClass('watermark'); + } + }); + $("#reset").click(function() { + $("#search").val(''); + $("#search").focus(); + }); + $("#search").focus(); + $("#search")[0].setSelectionRange(0, 0); +}); +$.widget("custom.catcomplete", $.ui.autocomplete, { + _create: function() { + this._super(); + this.widget().menu("option", "items", "> :not(.ui-autocomplete-category)"); + }, + _renderMenu: function(ul, items) { + var rMenu = this, + currentCategory = ""; + rMenu.menu.bindings = $(); + $.each(items, function(index, item) { + var li; + if (item.l !== noResult.l && item.category !== currentCategory) { + ul.append("
  • " + item.category + "
  • "); + currentCategory = item.category; + } + li = rMenu._renderItemData(ul, item); + if (item.category) { + li.attr("aria-label", item.category + " : " + item.l); + li.attr("class", "resultItem"); + } else { + li.attr("aria-label", item.l); + li.attr("class", "resultItem"); + } + }); + }, + _renderItem: function(ul, item) { + var label = ""; + if (item.category === catModules) { + label = getHighlightedText(item.l); + } else if (item.category === catPackages) { + label = (item.m) + ? getHighlightedText(item.m + "/" + item.l) + : getHighlightedText(item.l); + } else if (item.category === catTypes) { + label = (item.p) + ? getHighlightedText(item.p + "." + item.l) + : getHighlightedText(item.l); + } else if (item.category === catMembers) { + label = getHighlightedText(item.p + "." + (item.c + "." + item.l)); + } else if (item.category === catSearchTags) { + label = getHighlightedText(item.l); + } else { + label = item.l; + } + var li = $("
  • ").appendTo(ul); + var div = $("
    ").appendTo(li); + if (item.category === catSearchTags) { + if (item.d) { + div.html(label + " (" + item.h + ")
    " + + item.d + "
    "); + } else { + div.html(label + " (" + item.h + ")"); + } + } else { + div.html(label); + } + return li; + } +}); +$(function() { + $("#search").catcomplete({ + minLength: 1, + delay: 100, + source: function(request, response) { + var result = new Array(); + var presult = new Array(); + var tresult = new Array(); + var mresult = new Array(); + var tgresult = new Array(); + var secondaryresult = new Array(); + var displayCount = 0; + var exactMatcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(request.term) + "$", "i"); + camelCaseRegexp = ($.ui.autocomplete.escapeRegex(request.term)).split(/(?=[A-Z])/).join("([a-z0-9_$]*?)"); + var camelCaseMatcher = new RegExp("^" + camelCaseRegexp); + secondaryMatcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i"); + + // Return the nested innermost name from the specified object + function nestedName(e) { + return e.l.substring(e.l.lastIndexOf(".") + 1); + } + + function concatResults(a1, a2) { + a1 = a1.concat(a2); + a2.length = 0; + return a1; + } + + if (moduleSearchIndex) { + var mdleCount = 0; + $.each(moduleSearchIndex, function(index, item) { + item.category = catModules; + if (exactMatcher.test(item.l)) { + result.push(item); + mdleCount++; + } else if (camelCaseMatcher.test(item.l)) { + result.push(item); + } else if (secondaryMatcher.test(item.l)) { + secondaryresult.push(item); + } + }); + displayCount = mdleCount; + result = concatResults(result, secondaryresult); + } + if (packageSearchIndex) { + var pCount = 0; + var pkg = ""; + $.each(packageSearchIndex, function(index, item) { + item.category = catPackages; + pkg = (item.m) + ? (item.m + "/" + item.l) + : item.l; + if (exactMatcher.test(item.l)) { + presult.push(item); + pCount++; + } else if (camelCaseMatcher.test(pkg)) { + presult.push(item); + } else if (secondaryMatcher.test(pkg)) { + secondaryresult.push(item); + } + }); + result = result.concat(concatResults(presult, secondaryresult)); + displayCount = (pCount > displayCount) ? pCount : displayCount; + } + if (typeSearchIndex) { + var tCount = 0; + $.each(typeSearchIndex, function(index, item) { + item.category = catTypes; + var s = nestedName(item); + if (exactMatcher.test(s)) { + tresult.push(item); + tCount++; + } else if (camelCaseMatcher.test(s)) { + tresult.push(item); + } else if (secondaryMatcher.test(item.p + "." + item.l)) { + secondaryresult.push(item); + } + }); + result = result.concat(concatResults(tresult, secondaryresult)); + displayCount = (tCount > displayCount) ? tCount : displayCount; + } + if (memberSearchIndex) { + var mCount = 0; + $.each(memberSearchIndex, function(index, item) { + item.category = catMembers; + var s = nestedName(item); + if (exactMatcher.test(s)) { + mresult.push(item); + mCount++; + } else if (camelCaseMatcher.test(s)) { + mresult.push(item); + } else if (secondaryMatcher.test(item.c + "." + item.l)) { + secondaryresult.push(item); + } + }); + result = result.concat(concatResults(mresult, secondaryresult)); + displayCount = (mCount > displayCount) ? mCount : displayCount; + } + if (tagSearchIndex) { + var tgCount = 0; + $.each(tagSearchIndex, function(index, item) { + item.category = catSearchTags; + if (exactMatcher.test(item.l)) { + tgresult.push(item); + tgCount++; + } else if (secondaryMatcher.test(item.l)) { + secondaryresult.push(item); + } + }); + result = result.concat(concatResults(tgresult, secondaryresult)); + displayCount = (tgCount > displayCount) ? tgCount : displayCount; + } + displayCount = (displayCount > 500) ? displayCount : 500; + var counter = function() { + var count = {Modules: 0, Packages: 0, Types: 0, Members: 0, SearchTags: 0}; + var f = function(item) { + count[item.category] += 1; + return (count[item.category] <= displayCount); + }; + return f; + }(); + response(result.filter(counter)); + }, + response: function(event, ui) { + if (!ui.content.length) { + ui.content.push(noResult); + } else { + $("#search").empty(); + } + }, + autoFocus: true, + position: { + collision: "flip" + }, + select: function(event, ui) { + if (ui.item.l !== noResult.l) { + var url = getURLPrefix(ui); + if (ui.item.category === catModules) { + if (useModuleDirectories) { + url += "module-summary.html"; + } else { + url = ui.item.l + "-summary.html"; + } + } else if (ui.item.category === catPackages) { + if (ui.item.url) { + url = ui.item.url; + } else { + url += ui.item.l.replace(/\./g, '/') + "/package-summary.html"; + } + } else if (ui.item.category === catTypes) { + if (ui.item.url) { + url = ui.item.url; + } else if (ui.item.p === "") { + url += ui.item.l + ".html"; + } else { + url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.l + ".html"; + } + } else if (ui.item.category === catMembers) { + if (ui.item.p === "") { + url += ui.item.c + ".html" + "#"; + } else { + url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.c + ".html" + "#"; + } + if (ui.item.url) { + url += ui.item.url; + } else { + url += ui.item.l; + } + } else if (ui.item.category === catSearchTags) { + url += ui.item.u; + } + if (top !== window) { + parent.classFrame.location = pathtoroot + url; + } else { + window.location.href = pathtoroot + url; + } + $("#search").focus(); + } + } + }); +}); diff --git a/doc/0.1.4/en_private/stylesheet.css b/doc/0.1.4/en_private/stylesheet.css new file mode 100644 index 0000000..fa24676 --- /dev/null +++ b/doc/0.1.4/en_private/stylesheet.css @@ -0,0 +1,906 @@ +/* + * Javadoc style sheet + */ + +@import url('resources/fonts/dejavu.css'); + +/* + * Styles for individual HTML elements. + * + * These are styles that are specific to individual HTML elements. Changing them affects the style of a particular + * HTML element throughout the page. + */ + +body { + background-color:#ffffff; + color:#353833; + font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size:14px; + margin:0; + padding:0; + height:100%; + width:100%; +} +iframe { + margin:0; + padding:0; + height:100%; + width:100%; + overflow-y:scroll; + border:none; +} +a:link, a:visited { + text-decoration:none; + color:#4A6782; +} +a[href]:hover, a[href]:focus { + text-decoration:none; + color:#bb7a2a; +} +a[name] { + color:#353833; +} +a[name]:before, a[name]:target, a[id]:before, a[id]:target { + content:""; + display:inline-block; + position:relative; + padding-top:129px; + margin-top:-129px; +} +pre { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; +} +h1 { + font-size:20px; +} +h2 { + font-size:18px; +} +h3 { + font-size:16px; + font-style:italic; +} +h4 { + font-size:13px; +} +h5 { + font-size:12px; +} +h6 { + font-size:11px; +} +ul { + list-style-type:disc; +} +code, tt { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; + margin-top:8px; + line-height:1.4em; +} +dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; +} +table tr td dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + vertical-align:top; + padding-top:4px; +} +sup { + font-size:8px; +} + +/* + * Styles for HTML generated by javadoc. + * + * These are style classes that are used by the standard doclet to generate HTML documentation. + */ + +/* + * Styles for document title and copyright. + */ +.clear { + clear:both; + height:0px; + overflow:hidden; +} +.aboutLanguage { + float:right; + padding:0px 21px; + font-size:11px; + z-index:200; + margin-top:-9px; +} +.legalCopy { + margin-left:.5em; +} +.bar a, .bar a:link, .bar a:visited, .bar a:active { + color:#FFFFFF; + text-decoration:none; +} +.bar a:hover, .bar a:focus { + color:#bb7a2a; +} +.tab { + background-color:#0066FF; + color:#ffffff; + padding:8px; + width:5em; + font-weight:bold; +} +/* + * Styles for navigation bar. + */ +.bar { + background-color:#4D7A97; + color:#FFFFFF; + padding:.8em .5em .4em .8em; + height:auto;/*height:1.8em;*/ + font-size:11px; + margin:0; +} +.navPadding { + padding-top: 107px; +} +.fixedNav { + position:fixed; + width:100%; + z-index:999; + background-color:#ffffff; +} +.topNav { + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.bottomNav { + margin-top:10px; + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.subNav { + background-color:#dee3e9; + float:left; + width:100%; + overflow:hidden; + font-size:12px; +} +.subNav div { + clear:left; + float:left; + padding:0 0 5px 6px; + text-transform:uppercase; +} +ul.navList, ul.subNavList { + float:left; + margin:0 25px 0 0; + padding:0; +} +ul.navList li{ + list-style:none; + float:left; + padding: 5px 6px; + text-transform:uppercase; +} +ul.navListSearch { + float:right; + margin:0 0 0 0; + padding:0; +} +ul.navListSearch li { + list-style:none; + float:right; + padding: 5px 6px; + text-transform:uppercase; +} +ul.navListSearch li label { + position:relative; + right:-16px; +} +ul.subNavList li { + list-style:none; + float:left; +} +.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited { + color:#FFFFFF; + text-decoration:none; + text-transform:uppercase; +} +.topNav a:hover, .bottomNav a:hover { + text-decoration:none; + color:#bb7a2a; + text-transform:uppercase; +} +.navBarCell1Rev { + background-color:#F8981D; + color:#253441; + margin: auto 5px; +} +.skipNav { + position:absolute; + top:auto; + left:-9999px; + overflow:hidden; +} +/* + * Styles for page header and footer. + */ +.header, .footer { + clear:both; + margin:0 20px; + padding:5px 0 0 0; +} +.indexNav { + position:relative; + font-size:12px; + background-color:#dee3e9; +} +.indexNav ul { + margin-top:0; + padding:5px; +} +.indexNav ul li { + display:inline; + list-style-type:none; + padding-right:10px; + text-transform:uppercase; +} +.indexNav h1 { + font-size:13px; +} +.title { + color:#2c4557; + margin:10px 0; +} +.subTitle { + margin:5px 0 0 0; +} +.header ul { + margin:0 0 15px 0; + padding:0; +} +.footer ul { + margin:20px 0 5px 0; +} +.header ul li, .footer ul li { + list-style:none; + font-size:13px; +} +/* + * Styles for headings. + */ +div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList li.blockList h3 { + padding:0; + margin:15px 0; +} +ul.blockList li.blockList h2 { + padding:0px 0 20px 0; +} +/* + * Styles for page layout containers. + */ +.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer, +.allClassesContainer, .allPackagesContainer { + clear:both; + padding:10px 20px; + position:relative; +} +.indexContainer { + margin:10px; + position:relative; + font-size:12px; +} +.indexContainer h2 { + font-size:13px; + padding:0 0 3px 0; +} +.indexContainer ul { + margin:0; + padding:0; +} +.indexContainer ul li { + list-style:none; + padding-top:2px; +} +.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt { + font-size:12px; + font-weight:bold; + margin:10px 0 0 0; + color:#4E4E4E; +} +.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd { + margin:5px 0 10px 0px; + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} +.serializedFormContainer dl.nameValue dt { + margin-left:1px; + font-size:1.1em; + display:inline; + font-weight:bold; +} +.serializedFormContainer dl.nameValue dd { + margin:0 0 0 1px; + font-size:1.1em; + display:inline; +} +/* + * Styles for lists. + */ +li.circle { + list-style:circle; +} +ul.horizontal li { + display:inline; + font-size:0.9em; +} +ul.inheritance { + margin:0; + padding:0; +} +ul.inheritance li { + display:inline; + list-style:none; +} +ul.inheritance li ul.inheritance { + margin-left:15px; + padding-left:15px; + padding-top:1px; +} +ul.blockList, ul.blockListLast { + margin:10px 0 10px 0; + padding:0; +} +ul.blockList li.blockList, ul.blockListLast li.blockList { + list-style:none; + margin-bottom:15px; + line-height:1.4; +} +ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList { + padding:0px 20px 5px 10px; + border:1px solid #ededed; + background-color:#f8f8f8; +} +ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList { + padding:0 0 5px 8px; + background-color:#ffffff; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockList { + margin-left:0; + padding-left:0; + padding-bottom:15px; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast { + list-style:none; + border-bottom:none; + padding-bottom:0; +} +table tr td dl, table tr td dl dt, table tr td dl dd { + margin-top:0; + margin-bottom:1px; +} +/* + * Styles for tables. + */ +.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary, +.requiresSummary, .packagesSummary, .providesSummary, .usesSummary { + width:100%; + border-spacing:0; + border-left:1px solid #EEE; + border-right:1px solid #EEE; + border-bottom:1px solid #EEE; +} +.overviewSummary, .memberSummary, .requiresSummary, .packagesSummary, .providesSummary, .usesSummary { + padding:0px; +} +.overviewSummary caption, .memberSummary caption, .typeSummary caption, +.useSummary caption, .constantsSummary caption, .deprecatedSummary caption, +.requiresSummary caption, .packagesSummary caption, .providesSummary caption, .usesSummary caption { + position:relative; + text-align:left; + background-repeat:no-repeat; + color:#253441; + font-weight:bold; + clear:none; + overflow:hidden; + padding:0px; + padding-top:10px; + padding-left:1px; + margin:0px; + white-space:pre; +} +.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link, +.constantsSummary caption a:link, .deprecatedSummary caption a:link, +.requiresSummary caption a:link, .packagesSummary caption a:link, .providesSummary caption a:link, +.usesSummary caption a:link, +.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover, +.constantsSummary caption a:hover, .deprecatedSummary caption a:hover, +.requiresSummary caption a:hover, .packagesSummary caption a:hover, .providesSummary caption a:hover, +.usesSummary caption a:hover, +.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active, +.constantsSummary caption a:active, .deprecatedSummary caption a:active, +.requiresSummary caption a:active, .packagesSummary caption a:active, .providesSummary caption a:active, +.usesSummary caption a:active, +.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited, +.constantsSummary caption a:visited, .deprecatedSummary caption a:visited, +.requiresSummary caption a:visited, .packagesSummary caption a:visited, .providesSummary caption a:visited, +.usesSummary caption a:visited { + color:#FFFFFF; +} +.useSummary caption a:link, .useSummary caption a:hover, .useSummary caption a:active, +.useSummary caption a:visited { + color:#1f389c; +} +.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span, +.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span, +.requiresSummary caption span, .packagesSummary caption span, .providesSummary caption span, +.usesSummary caption span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + padding-bottom:7px; + display:inline-block; + float:left; + background-color:#F8981D; + border: none; + height:16px; +} +.memberSummary caption span.activeTableTab span, .packagesSummary caption span.activeTableTab span, +.overviewSummary caption span.activeTableTab span, .typeSummary caption span.activeTableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#F8981D; + height:16px; +} +.memberSummary caption span.tableTab span, .packagesSummary caption span.tableTab span, +.overviewSummary caption span.tableTab span, .typeSummary caption span.tableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#4D7A97; + height:16px; +} +.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab, +.packagesSummary caption span.tableTab, .packagesSummary caption span.activeTableTab, +.overviewSummary caption span.tableTab, .overviewSummary caption span.activeTableTab, +.typeSummary caption span.tableTab, .typeSummary caption span.activeTableTab { + padding-top:0px; + padding-left:0px; + padding-right:0px; + background-image:none; + float:none; + display:inline; +} +.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd, +.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd, +.requiresSummary .tabEnd, .packagesSummary .tabEnd, .providesSummary .tabEnd, .usesSummary .tabEnd { + display:none; + width:5px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .activeTableTab .tabEnd, .packagesSummary .activeTableTab .tabEnd, +.overviewSummary .activeTableTab .tabEnd, .typeSummary .activeTableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .tableTab .tabEnd, .packagesSummary .tableTab .tabEnd, +.overviewSummary .tableTab .tabEnd, .typeSummary .tableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + background-color:#4D7A97; + float:left; +} +.rowColor th, .altColor th { + font-weight:normal; +} +.overviewSummary td, .memberSummary td, .typeSummary td, +.useSummary td, .constantsSummary td, .deprecatedSummary td, +.requiresSummary td, .packagesSummary td, .providesSummary td, .usesSummary td { + text-align:left; + padding:0px 0px 12px 10px; +} +th.colFirst, th.colSecond, th.colLast, th.colConstructorName, th.colDeprecatedItemName, .useSummary th, +.constantsSummary th, .packagesSummary th, td.colFirst, td.colSecond, td.colLast, .useSummary td, +.constantsSummary td { + vertical-align:top; + padding-right:0px; + padding-top:8px; + padding-bottom:3px; +} +th.colFirst, th.colSecond, th.colLast, th.colConstructorName, th.colDeprecatedItemName, .constantsSummary th, +.packagesSummary th { + background:#dee3e9; + text-align:left; + padding:8px 3px 3px 7px; +} +td.colFirst, th.colFirst { + font-size:13px; +} +td.colSecond, th.colSecond, td.colLast, th.colConstructorName, th.colDeprecatedItemName, th.colLast { + font-size:13px; +} +.constantsSummary th, .packagesSummary th { + font-size:13px; +} +.providesSummary th.colFirst, .providesSummary th.colLast, .providesSummary td.colFirst, +.providesSummary td.colLast { + white-space:normal; + font-size:13px; +} +.overviewSummary td.colFirst, .overviewSummary th.colFirst, +.requiresSummary td.colFirst, .requiresSummary th.colFirst, +.packagesSummary td.colFirst, .packagesSummary td.colSecond, .packagesSummary th.colFirst, .packagesSummary th, +.usesSummary td.colFirst, .usesSummary th.colFirst, +.providesSummary td.colFirst, .providesSummary th.colFirst, +.memberSummary td.colFirst, .memberSummary th.colFirst, +.memberSummary td.colSecond, .memberSummary th.colSecond, .memberSummary th.colConstructorName, +.typeSummary td.colFirst, .typeSummary th.colFirst { + vertical-align:top; +} +.packagesSummary th.colLast, .packagesSummary td.colLast { + white-space:normal; +} +td.colFirst a:link, td.colFirst a:visited, +td.colSecond a:link, td.colSecond a:visited, +th.colFirst a:link, th.colFirst a:visited, +th.colSecond a:link, th.colSecond a:visited, +th.colConstructorName a:link, th.colConstructorName a:visited, +th.colDeprecatedItemName a:link, th.colDeprecatedItemName a:visited, +.constantValuesContainer td a:link, .constantValuesContainer td a:visited, +.allClassesContainer td a:link, .allClassesContainer td a:visited, +.allPackagesContainer td a:link, .allPackagesContainer td a:visited { + font-weight:bold; +} +.tableSubHeadingColor { + background-color:#EEEEFF; +} +.altColor, .altColor th { + background-color:#FFFFFF; +} +.rowColor, .rowColor th { + background-color:#EEEEEF; +} +/* + * Styles for contents. + */ +.description pre { + margin-top:0; +} +.deprecatedContent { + margin:0; + padding:10px 0; +} +.docSummary { + padding:0; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + font-style:normal; +} +div.block { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} +td.colLast div { + padding-top:0px; +} +td.colLast a { + padding-bottom:3px; +} +/* + * Styles for formatting effect. + */ +.sourceLineNo { + color:green; + padding:0 30px 0 0; +} +h1.hidden { + visibility:hidden; + overflow:hidden; + font-size:10px; +} +.block { + display:block; + margin:3px 10px 2px 0px; + color:#474747; +} +.deprecatedLabel, .descfrmTypeLabel, .implementationLabel, .memberNameLabel, .memberNameLink, +.moduleLabelInPackage, .moduleLabelInType, .overrideSpecifyLabel, .packageLabelInType, +.packageHierarchyLabel, .paramLabel, .returnLabel, .seeLabel, .simpleTagLabel, +.throwsLabel, .typeNameLabel, .typeNameLink, .searchTagLink { + font-weight:bold; +} +.deprecationComment, .emphasizedPhrase, .interfaceName { + font-style:italic; +} +.deprecationBlock { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; + border-style:solid; + border-width:thin; + border-radius:10px; + padding:10px; + margin-bottom:10px; + margin-right:10px; + display:inline-block; +} +div.block div.deprecationComment, div.block div.block span.emphasizedPhrase, +div.block div.block span.interfaceName { + font-style:normal; +} +div.contentContainer ul.blockList li.blockList h2 { + padding-bottom:0px; +} +/* + * Styles for IFRAME. + */ +.mainContainer { + margin:0 auto; + padding:0; + height:100%; + width:100%; + position:fixed; + top:0; + left:0; +} +.leftContainer { + height:100%; + position:fixed; + width:320px; +} +.leftTop { + position:relative; + float:left; + width:315px; + top:0; + left:0; + height:30%; + border-right:6px solid #ccc; + border-bottom:6px solid #ccc; +} +.leftBottom { + position:relative; + float:left; + width:315px; + bottom:0; + left:0; + height:70%; + border-right:6px solid #ccc; + border-top:1px solid #000; +} +.rightContainer { + position:absolute; + left:320px; + top:0; + bottom:0; + height:100%; + right:0; + border-left:1px solid #000; +} +.rightIframe { + margin:0; + padding:0; + height:100%; + right:30px; + width:100%; + overflow:visible; + margin-bottom:30px; +} +/* + * Styles specific to HTML5 elements. + */ +main, nav, header, footer, section { + display:block; +} +/* + * Styles for javadoc search. + */ +.ui-autocomplete-category { + font-weight:bold; + font-size:15px; + padding:7px 0 7px 3px; + background-color:#4D7A97; + color:#FFFFFF; +} +.resultItem { + font-size:13px; +} +.ui-autocomplete { + max-height:85%; + max-width:65%; + overflow-y:scroll; + overflow-x:scroll; + white-space:nowrap; + box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); +} +ul.ui-autocomplete { + position:fixed; + z-index:999999; +} +ul.ui-autocomplete li { + float:left; + clear:both; + width:100%; +} +.resultHighlight { + font-weight:bold; +} +#search { + background-image:url('resources/glass.png'); + background-size:13px; + background-repeat:no-repeat; + background-position:2px 3px; + padding-left:20px; + position:relative; + right:-18px; +} +#reset { + background-color: rgb(255,255,255); + background-image:url('resources/x.png'); + background-position:center; + background-repeat:no-repeat; + background-size:12px; + border:0 none; + width:16px; + height:17px; + position:relative; + left:-4px; + top:-4px; + font-size:0px; +} +.watermark { + color:#545454; +} +.searchTagDescResult { + font-style:italic; + font-size:11px; +} +.searchTagHolderResult { + font-style:italic; + font-size:12px; +} +.searchTagResult:before, .searchTagResult:target { + color:red; +} +.moduleGraph span { + display:none; + position:absolute; +} +.moduleGraph:hover span { + display:block; + margin: -100px 0 0 100px; + z-index: 1; +} +.methodSignature { + white-space:normal; +} + +/* + * Styles for user-provided tables. + * + * borderless: + * No borders, vertical margins, styled caption. + * This style is provided for use with existing doc comments. + * In general, borderless tables should not be used for layout purposes. + * + * plain: + * Plain borders around table and cells, vertical margins, styled caption. + * Best for small tables or for complex tables for tables with cells that span + * rows and columns, when the "striped" style does not work well. + * + * striped: + * Borders around the table and vertical borders between cells, striped rows, + * vertical margins, styled caption. + * Best for tables that have a header row, and a body containing a series of simple rows. + */ + +table.borderless, +table.plain, +table.striped { + margin-top: 10px; + margin-bottom: 10px; +} +table.borderless > caption, +table.plain > caption, +table.striped > caption { + font-weight: bold; + font-size: smaller; +} +table.borderless th, table.borderless td, +table.plain th, table.plain td, +table.striped th, table.striped td { + padding: 2px 5px; +} +table.borderless, +table.borderless > thead > tr > th, table.borderless > tbody > tr > th, table.borderless > tr > th, +table.borderless > thead > tr > td, table.borderless > tbody > tr > td, table.borderless > tr > td { + border: none; +} +table.borderless > thead > tr, table.borderless > tbody > tr, table.borderless > tr { + background-color: transparent; +} +table.plain { + border-collapse: collapse; + border: 1px solid black; +} +table.plain > thead > tr, table.plain > tbody tr, table.plain > tr { + background-color: transparent; +} +table.plain > thead > tr > th, table.plain > tbody > tr > th, table.plain > tr > th, +table.plain > thead > tr > td, table.plain > tbody > tr > td, table.plain > tr > td { + border: 1px solid black; +} +table.striped { + border-collapse: collapse; + border: 1px solid black; +} +table.striped > thead { + background-color: #E3E3E3; +} +table.striped > thead > tr > th, table.striped > thead > tr > td { + border: 1px solid black; +} +table.striped > tbody > tr:nth-child(even) { + background-color: #EEE +} +table.striped > tbody > tr:nth-child(odd) { + background-color: #FFF +} +table.striped > tbody > tr > th, table.striped > tbody > tr > td { + border-left: 1px solid black; + border-right: 1px solid black; +} +table.striped > tbody > tr > th { + font-weight: normal; +} diff --git a/doc/0.1.4/en_private/type-search-index.js b/doc/0.1.4/en_private/type-search-index.js new file mode 100644 index 0000000..feeb60f --- /dev/null +++ b/doc/0.1.4/en_private/type-search-index.js @@ -0,0 +1 @@ +typeSearchIndex = [{"l":"All Classes","url":"allclasses-index.html"},{"p":"bitchanger.gui.views","l":"AlphaNumGridView"},{"p":"bitchanger.gui.controls","l":"AlphaNumKeys"},{"p":"bitchanger.gui.controller","l":"AlphaNumKeysController"},{"p":"bitchanger.util","l":"ArrayUtils"},{"p":"bitchanger.gui.controls","l":"BaseSpinner"},{"p":"bitchanger.gui.controls","l":"BasicMenuBar"},{"p":"bitchanger.gui.controller","l":"BasicMenuController"},{"p":"bitchanger.main","l":"BitchangerLauncher"},{"p":"bitchanger.calculations","l":"Calculable"},{"p":"bitchanger.gui.views","l":"CalculatorView"},{"p":"bitchanger.calculations","l":"ChangeableNumber"},{"p":"bitchanger.preferences","l":"Comma"},{"p":"bitchanger.gui.views","l":"AlphaNumGridView.ConstraintType"},{"p":"bitchanger.gui.controller","l":"Controllable"},{"p":"bitchanger.gui.controller","l":"ControllableApplication"},{"p":"bitchanger.gui.controller","l":"Controller"},{"p":"bitchanger.gui.controller","l":"ControllerBase"},{"p":"bitchanger.gui.controller","l":"ConverterController"},{"p":"bitchanger.gui.controls","l":"ConverterMenuBar"},{"p":"bitchanger.gui.controller","l":"ConverterMenuController"},{"p":"bitchanger.gui.views","l":"ConverterView"},{"p":"bitchanger.calculations","l":"ConvertingNumbers"},{"p":"bitchanger.util","l":"FXUtils"},{"p":"bitchanger.util","l":"IconFactory"},{"p":"bitchanger.gui.controller","l":"IEEEController"},{"p":"bitchanger.gui.controller","l":"IEEEMenuController"},{"p":"bitchanger.gui.views","l":"IEEEView"},{"p":"bitchanger.gui.controls","l":"InformationDialog"},{"p":"bitchanger.gui.controls","l":"InformationDialog.InformationType"},{"p":"bitchanger.preferences","l":"Preferences"},{"p":"bitchanger.main","l":"PrimaryFXApp"},{"p":"bitchanger.util","l":"Resources"},{"p":"bitchanger.calculations","l":"SimpleChangeableNumber"},{"p":"bitchanger.preferences","l":"Style"},{"p":"bitchanger.gui.controls","l":"SVGIcon"},{"p":"bitchanger.util","l":"TriConsumer"},{"p":"bitchanger.gui.controls","l":"UnfocusedButton"},{"p":"bitchanger.gui.controls","l":"ValueButton"},{"p":"bitchanger.gui.controls","l":"ValueField"},{"p":"bitchanger.gui.views","l":"Viewable"},{"p":"bitchanger.gui.views","l":"ViewBase"}] \ No newline at end of file diff --git a/doc/0.1.4/en_private/type-search-index.zip b/doc/0.1.4/en_private/type-search-index.zip new file mode 100644 index 0000000000000000000000000000000000000000..ef5a1d126a259611140c1624dc2cd032baaf689d GIT binary patch literal 592 zcmWIWW@Zs#;Nak3NL(fn$bbaIfb5dWf>hn&)Wo9X4BgDUl++5ntm6E{w~8F=H)gN!VN!g+Ve-ea=fOE8Q-RGZ(*9XLUCx=Sz~ke6#p++l z9EVEoTf8n@KRwgfWzV^AUg6!i`5wper&fF(j+Z8GhtFb;<-ht!p(JoxOVRAA ze7lv)C4{crV86`}{otJ5+4xQCd+HlAx9@McwxG5o%y>ok)^m%T_nQBGy!_h5`@2m) zX7;vznY7+Y-A=OC&Ar4d;jg#o3c1^*i{iP%ZXb$Wv>>TeXZridTWoLtN8EoO$+vz> zwVUb=Df^#0y}rC)^m(}B>B)|uWh=az9)G)ZCG6zi4ZE%PbA9r3`F}zpY+CSK^`d9m z`g0qf9*CTM$Bfrh{K*1)L$?K~;)-m7Wq&8O?EdL*ixH#^74TGO;mj0_A_91IKr l-i%Bl42XC~mIK8*D!`r!0=!w-K|;1Degi002nR`%VA= literal 0 HcmV?d00001 diff --git a/doc/0.1.4/en_public/allclasses-index.html b/doc/0.1.4/en_public/allclasses-index.html new file mode 100644 index 0000000..3ed97eb --- /dev/null +++ b/doc/0.1.4/en_public/allclasses-index.html @@ -0,0 +1,374 @@ + + + + + +All Classes + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    All Classes

    +
    +
    + +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/allclasses.html b/doc/0.1.4/en_public/allclasses.html new file mode 100644 index 0000000..775d14b --- /dev/null +++ b/doc/0.1.4/en_public/allclasses.html @@ -0,0 +1,69 @@ + + + + + +All Classes + + + + + + + + + + + + + +

    All Classes

    +
    + +
    + + diff --git a/doc/0.1.4/en_public/allpackages-index.html b/doc/0.1.4/en_public/allpackages-index.html new file mode 100644 index 0000000..697bc29 --- /dev/null +++ b/doc/0.1.4/en_public/allpackages-index.html @@ -0,0 +1,205 @@ + + + + + +All Packages + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    All Packages

    +
    +
    +
      +
    • + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Package Summary 
      PackageDescription
      bitchanger.calculations +
      Contains all classes that are needed for calculating the data.
      +
      bitchanger.gui.controller +
      Provides controller, that gives functions to the views.
      +
      bitchanger.gui.controls +
      Allocates adjusted operating elements and functions for the user interface
      +
      bitchanger.gui.views +
      Offers different views that can be represented on a graphical surface
      +
      bitchanger.main +
      Contains the launcher with the main method and the JavaFX applications for starting the graphical user interface.
      +
      bitchanger.preferences +
      With classes that are included in this package, components have access to global settings and can adjust these.
      +
      bitchanger.util +
      Contains Classes with general and cross-class methods.
      +
      +
    • +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/bitchanger/BitchangerLauncherApp.html b/doc/0.1.4/en_public/bitchanger/BitchangerLauncherApp.html new file mode 100644 index 0000000..96a13a9 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/BitchangerLauncherApp.html @@ -0,0 +1,327 @@ + + + + + +BitchangerLauncherApp + + + + + + + + + + + + + + + +
    + +
    + +
    +
    +
    Package bitchanger
    +

    Class BitchangerLauncherApp

    +
    +
    + +
    +
      +
    • +
      +
      public class BitchangerLauncherApp
      +extends Object
      +
      This class contains the main method that is the entry point for the application.
      +
      +
      Since:
      +
      0.1.0
      +
      Version:
      +
      0.1.0
      +
      Author:
      +
      Tim Mühle
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          BitchangerLauncherApp

          +
          public BitchangerLauncherApp()
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          main

          +
          public static void main​(String[] args)
          +
          The main method first reads in all stored settings for the class Preferences. + Then the main window of the application will be started and waits until this main window is closed.
          +
          +
          Parameters:
          +
          args - Arguments that are committed at the beginning of the program. The program ignores these arguments.
          +
          See Also:
          +
          Preferences, +Hauptfenster.main(String[])
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/calculations/Calculable.html b/doc/0.1.4/en_public/bitchanger/calculations/Calculable.html new file mode 100644 index 0000000..e0b6fbc --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/calculations/Calculable.html @@ -0,0 +1,191 @@ + + + + + +Calculable + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface Calculable

    +
    +
    +
    +
      +
    • +
      +
      public interface Calculable
      +
    • +
    +
    +
    +
    + +
    + +
    + + diff --git a/doc/0.1.4/en_public/bitchanger/calculations/ChangeableNumber.html b/doc/0.1.4/en_public/bitchanger/calculations/ChangeableNumber.html new file mode 100644 index 0000000..d15ae98 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/calculations/ChangeableNumber.html @@ -0,0 +1,564 @@ + + + + + +ChangeableNumber + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface ChangeableNumber

    +
    +
    +
    +
      +
    • +
      +
      All Known Implementing Classes:
      +
      SimpleChangeableNumber
      +
      +
      +
      public interface ChangeableNumber
      +
      Interface that defines methods to convert numbers from any numeral system into another numeral system
      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Muehle
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Abstract Methods Default Methods 
        Modifier and TypeMethodDescription
        default doubleasDouble() 
        voidreset() +
        Resets the wrapped value.
        +
        default voidset​(double decValue) 
        voidsetBin​(String binValue) +
        Sets the value of this ChangeableNumber to the value of a binary string
        +
        voidsetDec​(String decValue) +
        Sets the value of this ChangeableNumber to the value of a decimal string
        +
        voidsetHex​(String hexValue) +
        Sets the value of this ChangeableNumber to the value of a hexadecimal string
        +
        voidsetOct​(String octValue) +
        Sets the value of this ChangeableNumber to the value of an octal string
        +
        voidsetValue​(String value, + int baseOfValue) +
        Sets the value of this ChangeableNumber to a value of any numeral system
        +
        StringtoBaseString​(int base) +
        Returns the string representation of this ChangeableNumber to any base.
        +
        StringtoBinString() +
        Returns the string representation of this ChangeableNumber as a binary string.
        +
        StringtoDecString() +
        Returns the string representation of this ChangeableNumber as a decimal string.
        +
        StringtoHexString() +
        Returns the string representation of this ChangeableNumber as a hexadecimal string.
        +
        StringtoOctString() +
        Returns the string representation of this ChangeableNumber as an octal string.
        +
        +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          asDouble

          +
          default double asDouble()
          +
        • +
        + + + +
          +
        • +

          set

          +
          default void set​(double decValue)
          +
        • +
        + + + + + + + + + + + + + + + + + + + + + + + +
          +
        • +

          reset

          +
          void reset()
          +
          Resets the wrapped value. The previous value gets deleted! If a toString method is called + after this method, an empty string will be returned. +

          + The wrapped value can be set again by using one of the set methods. +

          +
        • +
        + + + +
          +
        • +

          toHexString

          +
          String toHexString()
          +
          Returns the string representation of this ChangeableNumber as a hexadecimal string. +

          + The string is not labeled as hexadecimal, so the prefix is not leading! +

          +
          +
          Returns:
          +
          hexadecimal string representation of this ChangeableNumber
          +
          +
        • +
        + + + +
          +
        • +

          toDecString

          +
          String toDecString()
          +
          Returns the string representation of this ChangeableNumber as a decimal string.
          +
          +
          Returns:
          +
          decimal string representation of this ChangeableNumber
          +
          +
        • +
        + + + +
          +
        • +

          toOctString

          +
          String toOctString()
          +
          Returns the string representation of this ChangeableNumber as an octal string. +

          + The string is not labeled as octal, so the prefix is not leading! +

          +
          +
          Returns:
          +
          octal string representation of this ChangeableNumber
          +
          +
        • +
        + + + +
          +
        • +

          toBinString

          +
          String toBinString()
          +
          Returns the string representation of this ChangeableNumber as a binary string. +

          + The string is not labeled as binary, so the prefix is not leading! +

          +
          +
          Returns:
          +
          binary string representation of this ChangeableNumber
          +
          +
        • +
        + + + +
          +
        • +

          toBaseString

          +
          String toBaseString​(int base)
          +             throws IllegalArgumentException
          +
          Returns the string representation of this ChangeableNumber to any base. +

          + The String is not labeled by a prefix! +

          +
          +
          Parameters:
          +
          base - Base of the numeral system, in which this ChangeableNumber is represented
          +
          Returns:
          +
          String representation of this ChangeableNumber to the committed base
          +
          Throws:
          +
          IllegalArgumentException - if base leaves the range of values [2, 36]   -   see ConvertingNumbers.isValueToBase(int, String)
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +
    + + diff --git a/doc/0.1.4/en_public/bitchanger/calculations/ConvertingNumbers.html b/doc/0.1.4/en_public/bitchanger/calculations/ConvertingNumbers.html new file mode 100644 index 0000000..710d7c1 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/calculations/ConvertingNumbers.html @@ -0,0 +1,705 @@ + + + + + +ConvertingNumbers + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class ConvertingNumbers

    +
    +
    + +
    +
      +
    • +
      +
      public class ConvertingNumbers
      +extends Object
      +
      The ConvertingNumbers class contains methods for performing conversions of numbers with different numeral systems. +

      + These methods can convert positive and negative integral and float-point numbers. + Any numeral systems from base 2 to base 36 can be used. This exactly correspond to the character storage 0-9 and A-Z. + As string representation, numbers with capital and lower case letters can be handed over to methods in this class. The return + of these string only contains Numbers and upper case letters. +

      +

      + The comma sign can be selected in German (,) or English (.) with the class Preferences. + Furthermore the indicator for truncated fractional digits (...) can be activated or disabled. +

      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Muehle, Moritz Wolter
      +
      See Also:
      +
      Preferences
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeFieldDescription
        static StringFRACTIONAL_PRECISION_INDICATOR +
        Indicator for the cut fractional part in case of converting from decimal system into a system of any base
        +
        static intMAX_BASE +
        Constant for the highest possible base of 36 characters given through 0-9 and A-Z
        +
        static intMIN_BASE +
        Constant for the lowest possible base
        +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Static Methods Concrete Methods 
        Modifier and TypeMethodDescription
        static doublebaseToDec​(int base, + String value) +
        Converts the submitted number value of any base base into a number of the base 10 in double.
        +
        static StringbaseToDecString​(int base, + String value) +
        Converts the submitted number value of any base base into a number of the decimal system as string representation.
        +
        static StringbaseToDecString​(int base, + String value, + char comma) +
        Converts the submitted number value of any base base into a number of the decimal system as string representation.
        +
        static StringdecToBase​(int newBase, + String decValue) +
        Converts the submitted number decValue of base 10 into a number of any base newBase as string representation.
        +
        static StringdecToBase​(int newBase, + String decValue, + char comma) +
        Converts the submitted number decValue of base 10 into a number of any base newBase as string representation.
        +
        static StringdecToBase​(int newBase, + String decValue, + char comma, + int fractionalPrecision) +
        Converts the submitted number decValue of base 10 into a number of any base newBase as string representation.
        +
        static StringdecToBaseBlocks​(int newBase, + String decValue, + char comma, + int blockSize) +
        Converts the submitted number decValue of base 10 into a number of any base newBase as string representation + and splits the number into blockt with given length.
        +
        static booleanisValueToBase​(int base, + String value) +
        Checks if value represents a number to the required base base.
        +
        static StringsplitInBlocks​(String value, + int blockSize) +
        Splits the String value into blocks of the given length.
        +
        + +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          MIN_BASE

          +
          public static final int MIN_BASE
          +
          Constant for the lowest possible base
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          MAX_BASE

          +
          public static final int MAX_BASE
          +
          Constant for the highest possible base of 36 characters given through 0-9 and A-Z
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          FRACTIONAL_PRECISION_INDICATOR

          +
          public static final String FRACTIONAL_PRECISION_INDICATOR
          +
          Indicator for the cut fractional part in case of converting from decimal system into a system of any base
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          isValueToBase

          +
          public static boolean isValueToBase​(int base,
          +                                    String value)
          +                             throws IllegalArgumentException
          +
          Checks if value represents a number to the required base base. + If the indicator for truncated fractional digits is activated, it will be ignored in the evaluation. + Whitespace can be used as thousands separator and will be ignored by this method.
          +
          +
          Parameters:
          +
          value - number to be checked, represented as String
          +
          base - requested base of value - only values between 2 and 36 are allowed
          +
          Returns:
          +
          true, if value represents a number to the requested base base + , otherwise false will be returned.
          +
          Throws:
          +
          IllegalArgumentException - if basis leaves the range of value [2, 36]
          +
          +
        • +
        + + + + + + + + + + + +
          +
        • +

          baseToDecString

          +
          public static String baseToDecString​(int base,
          +                                     String value,
          +                                     char comma)
          +                              throws NullPointerException,
          +                                     NumberFormatException,
          +                                     IllegalArgumentException
          +
          Converts the submitted number value of any base base into a number of the decimal system as string representation.
          +
          +
          Parameters:
          +
          base - Specific base of the submitted value value
          +
          value - The numeric value, which should be converted as string representation
          +
          comma - The char which is used as comma for floating point numbers
          +
          Returns:
          +
          Value of the Number in decimal system as string representation
          +
          Throws:
          +
          NullPointerException - if the parameter value is null
          +
          NumberFormatException - if the parameter value is not a number of base base
          +
          IllegalArgumentException - if value is an empty string or basis leaves the range of value [2, 36]   -   see isValueToBase(int,java.lang.String)
          +
          +
        • +
        + + + +
          +
        • +

          decToBase

          +
          public static String decToBase​(int newBase,
          +                               String decValue)
          +                        throws NullPointerException,
          +                               NumberFormatException
          +
          Converts the submitted number decValue of base 10 into a number of any base newBase as string representation. +

          + If the indicator of decimal places is activated in the class Preferences + the cut decimal places caused due the maximum number of decimal places will be shown as "..." +

          +
          +
          Parameters:
          +
          newBase - Base of the new numeral system, which will the number decValue be converted in
          +
          decValue - Value of the number in decimal system as string representation
          +
          Returns:
          +
          Converted number of the submitted base as string representation with default set comma
          +
          Throws:
          +
          NullPointerException - If the parameter decValue is null
          +
          NumberFormatException - If the parameter decValue is not a number of base 10
          +
          IllegalArgumentException - If decValue is an empty string or newBase leaves the range of values [2, 36]   -   see isValueToBase(int,java.lang.String)
          +
          See Also:
          +
          Preferences
          +
          +
        • +
        + + + +
          +
        • +

          decToBase

          +
          public static String decToBase​(int newBase,
          +                               String decValue,
          +                               char comma)
          +                        throws NullPointerException,
          +                               NumberFormatException,
          +                               IllegalArgumentException
          +
          Converts the submitted number decValue of base 10 into a number of any base newBase as string representation. +

          + If the indicator of decimal places is activated in the class Preferences + the cut decimal places caused due the maximum number of decimal places will be shown as "..." +

          +
          +
          Parameters:
          +
          newBase - Base of the new numeral system, which will the number decValue be converted in
          +
          decValue - Value of the number in decimal system as string representation
          +
          comma - the char which is used as comma for floating point numbers
          +
          Returns:
          +
          Converted number of the submitted base as string representation with default set comma
          +
          Throws:
          +
          NullPointerException - If the parameter decValue is null
          +
          NumberFormatException - If the parameter decValue is not a number of base 10
          +
          IllegalArgumentException - If decValue is an empty string or newBase leaves the range of values [2, 36]   -   see isValueToBase(int,java.lang.String)
          +
          See Also:
          +
          Preferences
          +
          +
        • +
        + + + +
          +
        • +

          decToBase

          +
          public static String decToBase​(int newBase,
          +                               String decValue,
          +                               char comma,
          +                               int fractionalPrecision)
          +                        throws NullPointerException,
          +                               NumberFormatException,
          +                               IllegalArgumentException,
          +                               UnsupportedOperationException
          +
          Converts the submitted number decValue of base 10 into a number of any base newBase as string representation. +

          + If the indicator of decimal places is activated in the class Preferences + the cut decimal places caused due the maximum number of decimal places will be shown as "..." +

          +
          +
          Parameters:
          +
          newBase - Base of the new numeral system, which will the number decValue be converted in
          +
          decValue - Value of the number in decimal system as String representation
          +
          comma - the char which is used as comma for floating point numbers
          +
          fractionalPrecision - maximum number of decimal places
          +
          Returns:
          +
          Converted number of the submitted base as string representation with default set comma
          +
          Throws:
          +
          NullPointerException - If the parameter decValue is null
          +
          NumberFormatException - If the parameter decValue is not a number of base 10
          +
          IllegalArgumentException - If decValue is an empty String or newBase leaves the range of values [2, 36]   -   see isValueToBase(int,java.lang.String)
          +
          UnsupportedOperationException
          +
          See Also:
          +
          Preferences
          +
          +
        • +
        + + + +
          +
        • +

          decToBaseBlocks

          +
          public static String decToBaseBlocks​(int newBase,
          +                                     String decValue,
          +                                     char comma,
          +                                     int blockSize)
          +                              throws NullPointerException,
          +                                     NumberFormatException,
          +                                     IllegalArgumentException
          +
          Converts the submitted number decValue of base 10 into a number of any base newBase as string representation + and splits the number into blockt with given length. +

          + If the indicator of decimal places is activated in the class Preferences + the cut decimal places caused due the maximum number of decimal places will be shown as "..." +

          +
          +
          Parameters:
          +
          newBase - Base of the new numeral system, which will the number decValue be converted in
          +
          decValue - Value of the number in decimal system as string representation
          +
          comma - the char which is used as comma for floating point numbers
          +
          blockSize - length of the blocks into which the string is splitted
          +
          Returns:
          +
          Converted number of the submitted base as string representation with default set comma
          +
          Throws:
          +
          NullPointerException - If the parameter decValue is null
          +
          NumberFormatException - If the parameter decValue is not a number of base 10
          +
          IllegalArgumentException - If decValue is an empty string or newBase leaves the range of values [2, 36]   -   see isValueToBase(int,java.lang.String)
          +
          Since:
          +
          Bitchanger 0.1.4
          +
          See Also:
          +
          Preferences, +decToBase(int, String, char), +splitInBlocks(String, int)
          +
          +
        • +
        + + + +
          +
        • +

          splitInBlocks

          +
          public static String splitInBlocks​(String value,
          +                                   int blockSize)
          +
          Splits the String value into blocks of the given length. This is used e.g. to separate thousands.
          +
          +
          Parameters:
          +
          value - String that is splitted
          +
          blockSize - block's length
          +
          Returns:
          +
          splitted String with blocks
          +
          Since:
          +
          Bitchanger 0.1.4
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/calculations/SimpleChangeableNumber.html b/doc/0.1.4/en_public/bitchanger/calculations/SimpleChangeableNumber.html new file mode 100644 index 0000000..5bb3b64 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/calculations/SimpleChangeableNumber.html @@ -0,0 +1,692 @@ + + + + + +SimpleChangeableNumber + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class SimpleChangeableNumber

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      ChangeableNumber
      +
      +
      +
      public class SimpleChangeableNumber
      +extends Object
      +implements ChangeableNumber
      +
      The class SimpleChangeableNumber offers a complete implementation of ChangeableNumber. +

      + Each instance of this class wraps a value, that gets set from different numeral systems and can get + converted into any numeral system. The strings in these numeral systems do not contain any prefixes + that refer to the base. +

      +

      + The string representations of the number systems are splitted into blocks for better readability. + The blocks are four characters long in the hexadecimal and binary systems, in all other number systems + the blocks are three characters long. +

      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Muehle, Moritz Wolter
      +
      See Also:
      +
      ChangeableNumber
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + + + + + +
        Constructors 
        ConstructorDescription
        SimpleChangeableNumber() +
        Generates a new instance with 0 as wrapped value
        +
        SimpleChangeableNumber​(String decValue) +
        Generates a new instance that represents the committed decimal value
        +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethodDescription
        voidreset() +
        Resets the wrapped value.
        +
        voidsetBin​(String binValue) +
        Sets the value of this ChangeableNumber to the value of a binary string
        +
        voidsetDec​(String decValue) +
        Sets the value of this ChangeableNumber to the value of a decimal string
        +
        voidsetHex​(String hexValue) +
        Sets the value of this ChangeableNumber to the value of a hexadecimal string
        +
        voidsetOct​(String octValue) +
        Sets the value of this ChangeableNumber to the value of an octal string
        +
        voidsetValue​(String value, + int baseOfValue) +
        Sets the value of this ChangeableNumber to a value of any numeral system
        +
        StringtoBaseString​(int base) +
        Returns the string representation of this ChangeableNumber to any base.
        +
        StringtoBinString() +
        Returns the string representation of this ChangeableNumber as a binary string.
        +
        StringtoDecString() +
        Returns the string representation of this ChangeableNumber as a decimal string.
        +
        StringtoHexString() +
        Returns the string representation of this ChangeableNumber as a hexadecimal string.
        +
        StringtoOctString() +
        Returns the string representation of this ChangeableNumber as an octal string.
        +
        StringtoString() +
        Returns a String that includes the hexadecimal, decimal, octal and binary + presentation of the wrapped value.
        +
        + + +
      • +
      +
      +
    • +
    +
    +
    + +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/calculations/class-use/Calculable.html b/doc/0.1.4/en_public/bitchanger/calculations/class-use/Calculable.html new file mode 100644 index 0000000..b28df54 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/calculations/class-use/Calculable.html @@ -0,0 +1,149 @@ + + + + + +Uses of Interface bitchanger.calculations.Calculable + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    bitchanger.calculations.Calculable

    +
    +
    No usage of bitchanger.calculations.Calculable
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/calculations/class-use/ChangeableNumber.html b/doc/0.1.4/en_public/bitchanger/calculations/class-use/ChangeableNumber.html new file mode 100644 index 0000000..1467f59 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/calculations/class-use/ChangeableNumber.html @@ -0,0 +1,197 @@ + + + + + +Uses of Interface bitchanger.calculations.ChangeableNumber + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    bitchanger.calculations.ChangeableNumber

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/calculations/class-use/ConvertingNumbers.html b/doc/0.1.4/en_public/bitchanger/calculations/class-use/ConvertingNumbers.html new file mode 100644 index 0000000..697dfe1 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/calculations/class-use/ConvertingNumbers.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.calculations.ConvertingNumbers + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.calculations.ConvertingNumbers

    +
    +
    No usage of bitchanger.calculations.ConvertingNumbers
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/calculations/class-use/SimpleChangeableNumber.html b/doc/0.1.4/en_public/bitchanger/calculations/class-use/SimpleChangeableNumber.html new file mode 100644 index 0000000..17161f6 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/calculations/class-use/SimpleChangeableNumber.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.calculations.SimpleChangeableNumber + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.calculations.SimpleChangeableNumber

    +
    +
    No usage of bitchanger.calculations.SimpleChangeableNumber
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/calculations/package-summary.html b/doc/0.1.4/en_public/bitchanger/calculations/package-summary.html new file mode 100644 index 0000000..9697e6b --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/calculations/package-summary.html @@ -0,0 +1,201 @@ + + + + + +bitchanger.calculations + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package bitchanger.calculations

    +
    +
    +
    + + +
    Contains all classes that are needed for calculating the data.
    +
    +
      +
    • + + + + + + + + + + + + + + + + +
      Interface Summary 
      InterfaceDescription
      Calculable 
      ChangeableNumber +
      Interface that defines methods to convert numbers from any numeral system into another numeral system
      +
      +
    • +
    • + + + + + + + + + + + + + + + + +
      Class Summary 
      ClassDescription
      ConvertingNumbers +
      The ConvertingNumbers class contains methods for performing conversions of numbers with different numeral systems.
      +
      SimpleChangeableNumber +
      The class SimpleChangeableNumber offers a complete implementation of ChangeableNumber.
      +
      +
    • +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/bitchanger/calculations/package-tree.html b/doc/0.1.4/en_public/bitchanger/calculations/package-tree.html new file mode 100644 index 0000000..5d241fc --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/calculations/package-tree.html @@ -0,0 +1,172 @@ + + + + + +bitchanger.calculations Class Hierarchy + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package bitchanger.calculations

    +Package Hierarchies: + +
    +
    +
    +

    Class Hierarchy

    + +
    +
    +

    Interface Hierarchy

    + +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/bitchanger/calculations/package-use.html b/doc/0.1.4/en_public/bitchanger/calculations/package-use.html new file mode 100644 index 0000000..afa3c26 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/calculations/package-use.html @@ -0,0 +1,188 @@ + + + + + +Uses of Package bitchanger.calculations + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    bitchanger.calculations

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/class-use/BitchangerLauncherApp.html b/doc/0.1.4/en_public/bitchanger/class-use/BitchangerLauncherApp.html new file mode 100644 index 0000000..390daca --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/class-use/BitchangerLauncherApp.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.BitchangerLauncherApp + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.BitchangerLauncherApp

    +
    +
    No usage of bitchanger.BitchangerLauncherApp
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/components/Calculable.html b/doc/0.1.4/en_public/bitchanger/components/Calculable.html new file mode 100644 index 0000000..b36536c --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/components/Calculable.html @@ -0,0 +1,191 @@ + + + + + +Calculable + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface Calculable

    +
    +
    +
    +
      +
    • +
      +
      public interface Calculable
      +
    • +
    +
    +
    +
    + +
    + +
    + + diff --git a/doc/0.1.4/en_public/bitchanger/components/ChangeableNumber.html b/doc/0.1.4/en_public/bitchanger/components/ChangeableNumber.html new file mode 100644 index 0000000..a69b0eb --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/components/ChangeableNumber.html @@ -0,0 +1,447 @@ + + + + + +ChangeableNumber + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface ChangeableNumber

    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    + +
    + +
    + + diff --git a/doc/0.1.4/en_public/bitchanger/components/ConvertingNumbers.html b/doc/0.1.4/en_public/bitchanger/components/ConvertingNumbers.html new file mode 100644 index 0000000..23e1e7d --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/components/ConvertingNumbers.html @@ -0,0 +1,624 @@ + + + + + +ConvertingNumbers + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class ConvertingNumbers

    +
    +
    + +
    +
      +
    • +
      +
      public class ConvertingNumbers
      +extends Object
      +
      The ConvertingNumbers class contains methods for performing conversions of numbers with different numeral systems. +

      + These methods can convert positive and negative integral and float-point numbers. + Any numeral systems from base 2 to base 36 can be used. This exactly correspond to the character storage 0-9 and A-Z. + As string representation, numbers with capital and lower case letters can be handed over to methods in this class. The return + of these string only contains Numbers and upper case letters. +

      +

      + The comma sign can be selected in German (,) or English (.) with the class Preferences. + Furthermore the indicator for truncated fractional digits (...) can be activated or disabled. +

      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle, Moritz Wolter
      +
      See Also:
      +
      Preferences
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeFieldDescription
        static StringFRACTIONAL_PRECISION_INDICATOR +
        Indicator for the cut fractional part in case of converting from decimal system into a system of any base
        +
        static intMAX_BASE +
        Constant for the highest possible base of 36 characters given through 0-9 and A-Z
        +
        static intMIN_BASE +
        Constant for the lowest possible base
        +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Static Methods Concrete Methods 
        Modifier and TypeMethodDescription
        static doublebaseToDec​(int base, + String value) +
        Converts the submitted number value of any base base into a number of the base 10 in double.
        +
        static StringbaseToDecString​(int base, + String value) +
        Converts the submitted number value of any base base into a number of the decimal system as string representation.
        +
        static StringbaseToDecString​(int base, + String value, + char comma) +
        Converts the submitted number value of any base base into a number of the decimal system as string representation.
        +
        static StringdecToBase​(int newBase, + String decValue) +
        Converts the submitted number decValue of base 10 into a number of any base newBase as string representation.
        +
        static StringdecToBase​(int newBase, + String decValue, + char comma) +
        Converts the submitted number decValue of base 10 into a number of any base newBase as string representation.
        +
        static StringdecToBase​(int newBase, + String decValue, + char comma, + int fractionalPrecision) +
        Converts the submitted number decValue of base 10 into a number of any base newBase as string representation.
        +
        static booleanisValueToBase​(int base, + String value) +
        Checks if value represents a number to the required base base.
        +
        + +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          MIN_BASE

          +
          public static final int MIN_BASE
          +
          Constant for the lowest possible base
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          MAX_BASE

          +
          public static final int MAX_BASE
          +
          Constant for the highest possible base of 36 characters given through 0-9 and A-Z
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        + + + +
          +
        • +

          FRACTIONAL_PRECISION_INDICATOR

          +
          public static final String FRACTIONAL_PRECISION_INDICATOR
          +
          Indicator for the cut fractional part in case of converting from decimal system into a system of any base
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          isValueToBase

          +
          public static boolean isValueToBase​(int base,
          +                                    String value)
          +                             throws IllegalArgumentException
          +
          Checks if value represents a number to the required base base. + If the indicator for truncated fractional digits is activated, it will be ignored in the evaluation. + Whitespace can be used as thousands separator and will be ignored by this method.
          +
          +
          Parameters:
          +
          value - number to be checked, represented as String
          +
          base - requested base of value - only values between 2 and 36 are allowed
          +
          Returns:
          +
          true, if value represents a number to the requested base base + , otherwise false will be returned.
          +
          Throws:
          +
          IllegalArgumentException - if basis leaves the range of value [2, 36]
          +
          +
        • +
        + + + + + + + + + + + +
          +
        • +

          baseToDecString

          +
          public static String baseToDecString​(int base,
          +                                     String value,
          +                                     char comma)
          +                              throws NullPointerException,
          +                                     NumberFormatException,
          +                                     IllegalArgumentException
          +
          Converts the submitted number value of any base base into a number of the decimal system as string representation.
          +
          +
          Parameters:
          +
          base - Specific base of the submitted value value
          +
          value - The numeric value, which should be converted as string representation
          +
          comma - The char which is used as comma for floating point numbers
          +
          Returns:
          +
          Value of the Number in decimal system as string representation
          +
          Throws:
          +
          NullPointerException - if the parameter value is null
          +
          NumberFormatException - if the parameter value is not a number of base base
          +
          IllegalArgumentException - if value is an empty string or basis leaves the range of value [2, 36]   -   see isValueToBase(int,java.lang.String)
          +
          +
        • +
        + + + +
          +
        • +

          decToBase

          +
          public static String decToBase​(int newBase,
          +                               String decValue)
          +                        throws NullPointerException,
          +                               NumberFormatException
          +
          Converts the submitted number decValue of base 10 into a number of any base newBase as string representation. +

          + If the indicator of decimal places is activated in the class Preferences + the cut decimal places caused due the maximum number of decimal places will be shown as "..." +

          +
          +
          Parameters:
          +
          newBase - Base of the new numeral system, which will the number decValue be converted in
          +
          decValue - Value of the number in decimal system as string representation
          +
          Returns:
          +
          Converted number of the submitted base as string representation with default set comma
          +
          Throws:
          +
          NullPointerException - If the parameter decValue is null
          +
          NumberFormatException - If the parameter decValue is not a number of base 10
          +
          IllegalArgumentException - If decValue is an empty string or newBase leaves the range of value [2, 36]   -   see isValueToBase(int,java.lang.String)
          +
          See Also:
          +
          Preferences
          +
          +
        • +
        + + + +
          +
        • +

          decToBase

          +
          public static String decToBase​(int newBase,
          +                               String decValue,
          +                               char comma)
          +                        throws NullPointerException,
          +                               NumberFormatException,
          +                               IllegalArgumentException
          +
          Converts the submitted number decValue of base 10 into a number of any base newBase as string representation. +

          + If the indicator of decimal places is activated in the class Preferences + the cut decimal places caused due the maximum number of decimal places will be shown as "..." +

          +
          +
          Parameters:
          +
          newBase - Base of the new numeral system, which will the number decValue be converted in
          +
          decValue - Value of the number in decimal system as string representation
          +
          comma - the char which is used as comma for floating point numbers
          +
          Returns:
          +
          Converted number of the submitted base as string representation with default set comma
          +
          Throws:
          +
          NullPointerException - If the parameter decValue is null
          +
          NumberFormatException - If the parameter decValue is not a number of base 10
          +
          IllegalArgumentException - If decValue is an empty string or newBase leaves the range of value [2, 36]   -   see isValueToBase(int,java.lang.String)
          +
          See Also:
          +
          Preferences
          +
          +
        • +
        + + + +
          +
        • +

          decToBase

          +
          public static String decToBase​(int newBase,
          +                               String decValue,
          +                               char comma,
          +                               int fractionalPrecision)
          +                        throws NullPointerException,
          +                               NumberFormatException,
          +                               IllegalArgumentException
          +
          Converts the submitted number decValue of base 10 into a number of any base newBase as string representation. +

          + If the indicator of decimal places is activated in the class Preferences + the cut decimal places caused due the maximum number of decimal places will be shown as "..." +

          +
          +
          Parameters:
          +
          newBase - Base of the new numeral system, which will the number decValue be converted in
          +
          decValue - Value of the number in decimal system as string representation
          +
          comma - the char which is used as comma for floating point numbers
          +
          fractionalPrecision - maximum number of decimal places
          +
          Returns:
          +
          Converted number of the submitted base as string representation with default set comma
          +
          Throws:
          +
          NullPointerException - If the parameter decValue is null
          +
          NumberFormatException - If the parameter decValue is not a number of base 10
          +
          IllegalArgumentException - If decValue is an empty string or newBase leaves the range of value [2, 36]   -   see isValueToBase(int,java.lang.String)
          +
          See Also:
          +
          Preferences
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/components/SimpleChangeableNumber.html b/doc/0.1.4/en_public/bitchanger/components/SimpleChangeableNumber.html new file mode 100644 index 0000000..571d161 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/components/SimpleChangeableNumber.html @@ -0,0 +1,565 @@ + + + + + +SimpleChangeableNumber + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class SimpleChangeableNumber

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/components/class-use/Calculable.html b/doc/0.1.4/en_public/bitchanger/components/class-use/Calculable.html new file mode 100644 index 0000000..d881b6d --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/components/class-use/Calculable.html @@ -0,0 +1,149 @@ + + + + + +Uses of Interface bitchanger.components.Calculable + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    bitchanger.components.Calculable

    +
    +
    No usage of bitchanger.components.Calculable
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/components/class-use/ChangeableNumber.html b/doc/0.1.4/en_public/bitchanger/components/class-use/ChangeableNumber.html new file mode 100644 index 0000000..0f07e9a --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/components/class-use/ChangeableNumber.html @@ -0,0 +1,193 @@ + + + + + +Uses of Interface bitchanger.components.ChangeableNumber + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    bitchanger.components.ChangeableNumber

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/components/class-use/ConvertingNumbers.html b/doc/0.1.4/en_public/bitchanger/components/class-use/ConvertingNumbers.html new file mode 100644 index 0000000..ab81fe8 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/components/class-use/ConvertingNumbers.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.components.ConvertingNumbers + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.components.ConvertingNumbers

    +
    +
    No usage of bitchanger.components.ConvertingNumbers
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/components/class-use/SimpleChangeableNumber.html b/doc/0.1.4/en_public/bitchanger/components/class-use/SimpleChangeableNumber.html new file mode 100644 index 0000000..f39f6e0 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/components/class-use/SimpleChangeableNumber.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.components.SimpleChangeableNumber + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.components.SimpleChangeableNumber

    +
    +
    No usage of bitchanger.components.SimpleChangeableNumber
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/components/package-summary.html b/doc/0.1.4/en_public/bitchanger/components/package-summary.html new file mode 100644 index 0000000..43a61ad --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/components/package-summary.html @@ -0,0 +1,192 @@ + + + + + +bitchanger.components + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package bitchanger.components

    +
    +
    +
      +
    • + + + + + + + + + + + + + + + + +
      Interface Summary 
      InterfaceDescription
      Calculable 
      ChangeableNumber 
      +
    • +
    • + + + + + + + + + + + + + + + + +
      Class Summary 
      ClassDescription
      ConvertingNumbers +
      The ConvertingNumbers class contains methods for performing conversions of numbers with different numeral systems.
      +
      SimpleChangeableNumber 
      +
    • +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/bitchanger/components/package-tree.html b/doc/0.1.4/en_public/bitchanger/components/package-tree.html new file mode 100644 index 0000000..4d8bde4 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/components/package-tree.html @@ -0,0 +1,172 @@ + + + + + +bitchanger.components Class Hierarchy + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package bitchanger.components

    +Package Hierarchies: + +
    +
    +
    +

    Class Hierarchy

    + +
    +
    +

    Interface Hierarchy

    + +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/bitchanger/components/package-use.html b/doc/0.1.4/en_public/bitchanger/components/package-use.html new file mode 100644 index 0000000..9bde0af --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/components/package-use.html @@ -0,0 +1,184 @@ + + + + + +Uses of Package bitchanger.components + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    bitchanger.components

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/Hauptfenster.html b/doc/0.1.4/en_public/bitchanger/gui/Hauptfenster.html new file mode 100644 index 0000000..e032395 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/Hauptfenster.html @@ -0,0 +1,423 @@ + + + + + +Hauptfenster + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class Hauptfenster

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • javafx.application.Application
      • +
      • +
          +
        • bitchanger.gui.Hauptfenster
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      public class Hauptfenster
      +extends javafx.application.Application
      +
      Main window of the application with javaFX +

      + The window contains several scenes for calculations and converting of several numeral systems. + These scenes can be changed and program settings can be opened via the menu bar. +

      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim
      +
      See Also:
      +
      ConverterView, +ConverterController
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Nested Class Summary

        +
          +
        • + + +

          Nested classes/interfaces inherited from class javafx.application.Application

          +javafx.application.Application.Parameters
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Field Summary

        +
          +
        • + + +

          Fields inherited from class javafx.application.Application

          +STYLESHEET_CASPIAN, STYLESHEET_MODENA
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + +
        Constructors 
        ConstructorDescription
        Hauptfenster() 
        +
      • +
      +
      + +
      + +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          Hauptfenster

          +
          public Hauptfenster()
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          main

          +
          public static void main​(String[] args)
          +
          Starts the applications and opens the application window.
          +
          +
          Parameters:
          +
          args - Arguments that are committed at the beginning of the application. These arguments are committed to the method launch and otherwise they will be ignored.
          +
          See Also:
          +
          Application.launch(String...)
          +
          +
        • +
        + + + +
          +
        • +

          start

          +
          public void start​(javafx.stage.Stage primaryStage)
          +           throws Exception
          +
          This method creates the content for the main window and opens it. +

          + - A menu bar is created, which allows to control the main window in every scene. +

          +

          + - Different views for the various surfaces are created. +

          +

          + - The latest scene is loaded. +

          +

          + - The in settings selected stylesheet is loaded. +

          +

          + - The window is formatted and opened. +

          + + This method will end after the main window is closed.
          +
          +
          Specified by:
          +
          start in class javafx.application.Application
          +
          Throws:
          +
          Exception
          +
          See Also:
          +
          createMenuBar(), +ConverterView, +setStageSize(Stage)
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/class-use/Hauptfenster.html b/doc/0.1.4/en_public/bitchanger/gui/class-use/Hauptfenster.html new file mode 100644 index 0000000..adc25b5 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/class-use/Hauptfenster.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.Hauptfenster + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.Hauptfenster

    +
    +
    No usage of bitchanger.gui.Hauptfenster
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controller/AlphaNumGridController.html b/doc/0.1.4/en_public/bitchanger/gui/controller/AlphaNumGridController.html new file mode 100644 index 0000000..58be658 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controller/AlphaNumGridController.html @@ -0,0 +1,349 @@ + + + + + +AlphaNumGridController + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class AlphaNumGridController

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          AlphaNumGridController

          +
          public AlphaNumGridController​(AlphaNumGrid view)
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + + + + + +
          +
        • +

          setActions

          +
          public void setActions()
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controller/AlphaNumKeysController.html b/doc/0.1.4/en_public/bitchanger/gui/controller/AlphaNumKeysController.html new file mode 100644 index 0000000..fb0b4fc --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controller/AlphaNumKeysController.html @@ -0,0 +1,403 @@ + + + + + +AlphaNumKeysController + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class AlphaNumKeysController

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Controller
      +
      +
      +
      public class AlphaNumKeysController
      +extends ControllerBase<AlphaNumKeys>
      +
      This controller gives the operating elements of an instance of AlphaNumKeys a function and links the simulation + of the keyboard to the encapsulated scene. +

      + The main function is the simulation of a keyboard with alphanumeric buttons. By clicking on one of these buttons, + the required KeyEvents get triggered and transfered to the linked scene. + The available functions are switching between keyboard modes, scroll trough keyboard and updating the comma button + if CommaProperty from Preferences is changing. +

      +

      + The function of the +/- button to change the sign of the number is free, because other operating elements are required. + The function of this button needs to be implemented in an other controller. +

      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          AlphaNumKeysController

          +
          public AlphaNumKeysController​(AlphaNumKeys keys,
          +                              javafx.scene.Scene scene)
          +
          Produces a new controller that gives function to an AlphaNumKeys.
          +
          +
          Parameters:
          +
          keys - AlphaNumKeys, that is linked to this controller
          +
          scene - Scene, where this controller is linked to, to share all KeyEvents to simulate a keyboard
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + + + + + +
          +
        • +

          setActions

          +
          public void setActions()
          +
          Sets actions to switch the keyboard mode, to scroll between the different keyboard layouts, to update the comma button + and simulates the keyboard inputs for the alphanumeric buttons +

          + The function of the +/- button to change the sign of the number is free, because other operating elements are required. + The function of this button needs to be implemented in an other controller. +

          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controller/BasicMenuController.html b/doc/0.1.4/en_public/bitchanger/gui/controller/BasicMenuController.html new file mode 100644 index 0000000..e0b10c6 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controller/BasicMenuController.html @@ -0,0 +1,559 @@ + + + + + +BasicMenuController + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class BasicMenuController

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          modusConverter

          +
          protected javafx.scene.control.MenuItem modusConverter
          +
        • +
        + + + +
          +
        • +

          modusIEEE

          +
          protected javafx.scene.control.MenuItem modusIEEE
          +
        • +
        + + + +
          +
        • +

          modusCalculator

          +
          protected javafx.scene.control.MenuItem modusCalculator
          +
        • +
        + + + +
          +
        • +

          options

          +
          protected javafx.scene.control.Menu options
          +
        • +
        + + + +
          +
        • +

          styleMenu

          +
          protected javafx.scene.control.Menu styleMenu
          +
        • +
        + + + +
          +
        • +

          styleLight

          +
          protected javafx.scene.control.MenuItem styleLight
          +
        • +
        + + + +
          +
        • +

          styleDark

          +
          protected javafx.scene.control.MenuItem styleDark
          +
        • +
        + + + +
          +
        • +

          moveToScreen

          +
          protected javafx.scene.control.Menu moveToScreen
          +
        • +
        + + + +
          +
        • +

          showFullscreen

          +
          protected javafx.scene.control.CheckMenuItem showFullscreen
          +
        • +
        + + + +
          +
        • +

          about

          +
          protected javafx.scene.control.MenuItem about
          +
        • +
        + + + +
          +
        • +

          version

          +
          protected javafx.scene.control.MenuItem version
          +
        • +
        + + + +
          +
        • +

          resetPreferences

          +
          protected javafx.scene.control.MenuItem resetPreferences
          +
        • +
        +
      • +
      +
      + +
      + +
      + +
      +
        +
      • + + +

        Method Detail

        + + + + + + + +
          +
        • +

          setActions

          +
          public void setActions()
          +
          Sets all functions that are needed for the view.
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controller/Controllable.html b/doc/0.1.4/en_public/bitchanger/gui/controller/Controllable.html new file mode 100644 index 0000000..70c0ac4 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controller/Controllable.html @@ -0,0 +1,423 @@ + + + + + +Controllable + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface Controllable

    +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + + + + + + + + + + + +
        Fields 
        Modifier and TypeFieldDescription
        static Map<String,​javafx.scene.control.Button>EMPTY_BUTTON_MAP +
        empty and immutable map that can be used as placeholder if any Controllable does not have to pass buttons to its Controller
        +
        static Map<String,​javafx.scene.Node>EMPTY_NODE_MAP +
        empty and immutable map that can be used as placeholder if any Controllable does not have to pass nodes to its Controller
        +
        static Map<String,​javafx.scene.control.TextField>EMPTY_TEXTFIELD_MAP +
        empty and immutable map that can be used as placeholder if any Controllable does not have to pass textfields to its Controller
        +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Abstract Methods 
        Modifier and TypeMethodDescription
        Map<String,​javafx.scene.control.Button>getButtonMap() +
        Returns a Map with all buttons of the controllable.
        +
        Map<String,​javafx.scene.Node>getNodeMap() +
        Returns a Map with all elements (Nodes) of the controllable, that are not buttons or text fields and are required in the controller.
        +
        Map<String,​javafx.scene.control.TextField>getTextFieldMap() +
        Returns a Map with all text fields of the controllable.
        +
        +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          EMPTY_TEXTFIELD_MAP

          +
          static final Map<String,​javafx.scene.control.TextField> EMPTY_TEXTFIELD_MAP
          +
          empty and immutable map that can be used as placeholder if any Controllable does not have to pass textfields to its Controller
          +
          +
          See Also:
          +
          Collections.emptyMap()
          +
          +
        • +
        + + + +
          +
        • +

          EMPTY_BUTTON_MAP

          +
          static final Map<String,​javafx.scene.control.Button> EMPTY_BUTTON_MAP
          +
          empty and immutable map that can be used as placeholder if any Controllable does not have to pass buttons to its Controller
          +
          +
          See Also:
          +
          Collections.emptyMap()
          +
          +
        • +
        + + + +
          +
        • +

          EMPTY_NODE_MAP

          +
          static final Map<String,​javafx.scene.Node> EMPTY_NODE_MAP
          +
          empty and immutable map that can be used as placeholder if any Controllable does not have to pass nodes to its Controller
          +
          +
          See Also:
          +
          Collections.emptyMap()
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTextFieldMap

          +
          Map<String,​javafx.scene.control.TextField> getTextFieldMap()
          +
          Returns a Map with all text fields of the controllable. Each text field is allocated to a unique keyword, + which is used to find the text field out of the map. +

          + Each keyword should have a useful connection to the use of the text field! +

          +
          +
          Returns:
          +
          Map, that contains all text fields of the controllable
          +
          +
        • +
        + + + +
          +
        • +

          getButtonMap

          +
          Map<String,​javafx.scene.control.Button> getButtonMap()
          +
          Returns a Map with all buttons of the controllable. Each button is allocated to a unique keyword, + which is used to find the button out of the map. +

          + Each Keyword should have a useful connection to the use of the button! +

          +
          +
          Returns:
          +
          Map, that contains all buttons of the controllable
          +
          +
        • +
        + + + +
          +
        • +

          getNodeMap

          +
          Map<String,​javafx.scene.Node> getNodeMap()
          +
          Returns a Map with all elements (Nodes) of the controllable, that are not buttons or text fields and are required in the controller. + Each element is allocated to a unique keyword, which is used to find the element out of the map. +

          + Each keyword should have a useful connection to the use of the elements! +

          +
          +
          Returns:
          +
          Map, which contains all elements of a controllable, that are not buttons or text fields and are required in the controller
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controller/ControllableApplication.html b/doc/0.1.4/en_public/bitchanger/gui/controller/ControllableApplication.html new file mode 100644 index 0000000..fd79dcc --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controller/ControllableApplication.html @@ -0,0 +1,332 @@ + + + + + +ControllableApplication + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface ControllableApplication

    +
    +
    +
    +
      +
    • +
      +
      All Known Implementing Classes:
      +
      PrimaryFXApp
      +
      +
      +
      public interface ControllableApplication
      +
      Interface that defines methods to connect a Application with a controller.
      +
      +
      Since:
      +
      Bitchanger 0.1.4
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Muehle
      +
      See Also:
      +
      Viewable, +Controller
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          changeView

          +
          default void changeView​(Viewable newView)
          +
          Changes the primaryStage's Scene to the Scene of the given Viewable
          +
          +
          Parameters:
          +
          newView - New View to be presented
          +
          +
        • +
        + + + +
          +
        • +

          getPrimaryStage

          +
          javafx.stage.Stage getPrimaryStage()
          +
        • +
        + + + +
          +
        • +

          getViewable

          +
          Viewable getViewable​(String key)
          +
          Returns the view that is associated to the string key
          +
          +
          Parameters:
          +
          key - key whose associated View is to be returned
          +
          Returns:
          +
          View to which the specified key is mapped, or null if there is no associated View for the given key
          +
          +
        • +
        + + + +
          +
        • +

          getCurrentViewProperty

          +
          javafx.beans.property.ObjectProperty<Viewable> getCurrentViewProperty()
          +
          Returns the CurrentViewProperty
          +
          +
          Returns:
          +
          CurrentViewProperty
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +
    + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controller/Controller.html b/doc/0.1.4/en_public/bitchanger/gui/controller/Controller.html new file mode 100644 index 0000000..bd1805b --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controller/Controller.html @@ -0,0 +1,421 @@ + + + + + +Controller + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface Controller

    +
    +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          REGISTERED_CONTROLLERS

          +
          static final HashMap<Class<? extends Controllable>,​Class<? extends Controller>> REGISTERED_CONTROLLERS
          +
          Map that saves the Controllers registered for a Controllable and associates them
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          register

          +
          static void register​(Class<? extends Controllable> controllable,
          +                     Class<? extends Controller> controller)
          +
          Registers a Controller class for the factory method of(Controllable) + and assigns it to a Controllable class.
          +
          +
          Parameters:
          +
          controllable - Controllable class to which the Controller class is assigned
          +
          controller - Controller class that is registered
          +
          +
        • +
        + + + +
          +
        • +

          of

          +
          static Controller of​(Controllable c)
          +
          Factory method that creates and returns a new Controller for the given Controllable. +

          + Note that the registered Controller must have a public Constructor that takes the + Controllable as the only parameter. +

          +

          + A suitable Controller can only be returned if a suitable value pair is available in the Map + REGISTERED_CONTROLLERS. A Controllable can be assigned a Controller with the method + register(Class, Class). +

          +
          +
          Parameters:
          +
          c - Controllable, which should be given a function by the new Controller
          +
          Returns:
          +
          new Controller that is bound to the Controllable or null if no Controller has been registered
          +
          Since:
          +
          Bitchanger 0.1.4
          +
          See Also:
          +
          register(Class, Class)
          +
          +
        • +
        + + + +
          +
        • +

          ofArg

          +
          static Controller ofArg​(Controllable c,
          +                        Object... args)
          +
          Factory method that creates and returns a new Controller for the given Controllable. +

          + Note that the registered Controller must have a public constructor that takes the Controllable as the first + argument and also receives all other transferred Objects in the same order as given. +

          +

          + A suitable Controller can only be returned if a suitable value pair is available in the Map + REGISTERED_CONTROLLERS. A Controllable can be assigned a Controller with the method + register(Class, Class). +

          +
          +
          Parameters:
          +
          c - Controllable, which should be given a function by the new Controller
          +
          args - Arguments in the order they are required by the constructor
          +
          Returns:
          +
          new Controller that is bound to the Controllable or null if no Controller has been registered
          +
          Since:
          +
          Bitchanger 0.1.4
          +
          See Also:
          +
          register(Class, Class)
          +
          +
        • +
        + + + +
          +
        • +

          setActions

          +
          void setActions()
          +
          Sets all functions that are needed for the view.
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controller/ControllerBase.html b/doc/0.1.4/en_public/bitchanger/gui/controller/ControllerBase.html new file mode 100644 index 0000000..b1749fc --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controller/ControllerBase.html @@ -0,0 +1,474 @@ + + + + + +ControllerBase + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class ControllerBase<T extends Controllable>

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          textFieldMap

          +
          protected Map<String,​javafx.scene.control.TextField> textFieldMap
          +
        • +
        + + + +
          +
        • +

          buttonMap

          +
          protected Map<String,​javafx.scene.control.Button> buttonMap
          +
        • +
        + + + +
          +
        • +

          nodeMap

          +
          protected Map<String,​javafx.scene.Node> nodeMap
          +
        • +
        + + + +
          +
        • +

          controllable

          +
          protected final T extends Controllable controllable
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + + + +
          +
        • +

          ControllerBase

          +
          protected ControllerBase​(T controllable)
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          initControls

          +
          protected abstract void initControls()
          +
        • +
        + + + +
          +
        • +

          simulateKeyEvents

          +
          protected void simulateKeyEvents​(javafx.scene.control.Button source,
          +                                 javafx.scene.Node target,
          +                                 javafx.scene.Scene scene,
          +                                 String character,
          +                                 String text,
          +                                 javafx.scene.input.KeyCode keycode,
          +                                 boolean shiftDown,
          +                                 boolean controlDown,
          +                                 boolean altDown,
          +                                 boolean metaDown)
          +
        • +
        + + + +
          +
        • +

          simulateKeyEvents

          +
          protected void simulateKeyEvents​(javafx.scene.control.Button source,
          +                                 javafx.scene.Node target,
          +                                 javafx.scene.Scene scene,
          +                                 String character,
          +                                 String text,
          +                                 javafx.scene.input.KeyCode keycode)
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controller/ConverterController.html b/doc/0.1.4/en_public/bitchanger/gui/controller/ConverterController.html new file mode 100644 index 0000000..d497a8e --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controller/ConverterController.html @@ -0,0 +1,387 @@ + + + + + +ConverterController + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class ConverterController

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Controller
      +
      +
      +
      public class ConverterController
      +extends ControllerBase<ConverterView>
      +
      Controller that provides the function for a ConverterView.
      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Muehle
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ConverterController

          +
          public ConverterController​(ConverterView view)
          +
          Construct a new controller for a ConverterView and links the necessary attributes with + references to the operating elements of the ConverterView.
          +
          +
          Parameters:
          +
          view - ConverterView, where the controller is linked to
          +
          See Also:
          +
          initControls()
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + + + + + +
          +
        • +

          setActions

          +
          public void setActions()
          +
          Sets all functions that are needed for the view.
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controller/ConverterMenuController.html b/doc/0.1.4/en_public/bitchanger/gui/controller/ConverterMenuController.html new file mode 100644 index 0000000..5b53038 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controller/ConverterMenuController.html @@ -0,0 +1,419 @@ + + + + + +ConverterMenuController + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class ConverterMenuController

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controller/IEEEController.html b/doc/0.1.4/en_public/bitchanger/gui/controller/IEEEController.html new file mode 100644 index 0000000..eea1112 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controller/IEEEController.html @@ -0,0 +1,367 @@ + + + + + +IEEEController + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class IEEEController

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          IEEEController

          +
          public IEEEController​(IEEEView controllable)
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + + + + + +
          +
        • +

          setActions

          +
          public void setActions()
          +
          Sets all functions that are needed for the view.
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controller/IEEEMenuController.html b/doc/0.1.4/en_public/bitchanger/gui/controller/IEEEMenuController.html new file mode 100644 index 0000000..63e13d8 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controller/IEEEMenuController.html @@ -0,0 +1,334 @@ + + + + + +IEEEMenuController + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class IEEEMenuController

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controller/class-use/AlphaNumGridController.html b/doc/0.1.4/en_public/bitchanger/gui/controller/class-use/AlphaNumGridController.html new file mode 100644 index 0000000..fdde480 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controller/class-use/AlphaNumGridController.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controller.AlphaNumGridController + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controller.AlphaNumGridController

    +
    +
    No usage of bitchanger.gui.controller.AlphaNumGridController
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controller/class-use/AlphaNumKeysController.html b/doc/0.1.4/en_public/bitchanger/gui/controller/class-use/AlphaNumKeysController.html new file mode 100644 index 0000000..9b6c0e8 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controller/class-use/AlphaNumKeysController.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controller.AlphaNumKeysController + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controller.AlphaNumKeysController

    +
    +
    No usage of bitchanger.gui.controller.AlphaNumKeysController
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controller/class-use/BasicMenuController.html b/doc/0.1.4/en_public/bitchanger/gui/controller/class-use/BasicMenuController.html new file mode 100644 index 0000000..09d5157 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controller/class-use/BasicMenuController.html @@ -0,0 +1,200 @@ + + + + + +Uses of Class bitchanger.gui.controller.BasicMenuController + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controller.BasicMenuController

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controller/class-use/Controllable.html b/doc/0.1.4/en_public/bitchanger/gui/controller/class-use/Controllable.html new file mode 100644 index 0000000..37b471c --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controller/class-use/Controllable.html @@ -0,0 +1,376 @@ + + + + + +Uses of Interface bitchanger.gui.controller.Controllable + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    bitchanger.gui.controller.Controllable

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controller/class-use/ControllableApplication.html b/doc/0.1.4/en_public/bitchanger/gui/controller/class-use/ControllableApplication.html new file mode 100644 index 0000000..de2997c --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controller/class-use/ControllableApplication.html @@ -0,0 +1,299 @@ + + + + + +Uses of Interface bitchanger.gui.controller.ControllableApplication + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    bitchanger.gui.controller.ControllableApplication

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controller/class-use/Controller.html b/doc/0.1.4/en_public/bitchanger/gui/controller/class-use/Controller.html new file mode 100644 index 0000000..7cde426 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controller/class-use/Controller.html @@ -0,0 +1,300 @@ + + + + + +Uses of Interface bitchanger.gui.controller.Controller + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    bitchanger.gui.controller.Controller

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controller/class-use/ControllerBase.html b/doc/0.1.4/en_public/bitchanger/gui/controller/class-use/ControllerBase.html new file mode 100644 index 0000000..e6b9780 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controller/class-use/ControllerBase.html @@ -0,0 +1,225 @@ + + + + + +Uses of Class bitchanger.gui.controller.ControllerBase + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controller.ControllerBase

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controller/class-use/ConverterController.html b/doc/0.1.4/en_public/bitchanger/gui/controller/class-use/ConverterController.html new file mode 100644 index 0000000..c3e397d --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controller/class-use/ConverterController.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controller.ConverterController + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controller.ConverterController

    +
    +
    No usage of bitchanger.gui.controller.ConverterController
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controller/class-use/ConverterMenuController.html b/doc/0.1.4/en_public/bitchanger/gui/controller/class-use/ConverterMenuController.html new file mode 100644 index 0000000..c61e1b3 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controller/class-use/ConverterMenuController.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controller.ConverterMenuController + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controller.ConverterMenuController

    +
    +
    No usage of bitchanger.gui.controller.ConverterMenuController
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controller/class-use/IEEEController.html b/doc/0.1.4/en_public/bitchanger/gui/controller/class-use/IEEEController.html new file mode 100644 index 0000000..d431f3d --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controller/class-use/IEEEController.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controller.IEEEController + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controller.IEEEController

    +
    +
    No usage of bitchanger.gui.controller.IEEEController
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controller/class-use/IEEEMenuController.html b/doc/0.1.4/en_public/bitchanger/gui/controller/class-use/IEEEMenuController.html new file mode 100644 index 0000000..2791b5b --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controller/class-use/IEEEMenuController.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controller.IEEEMenuController + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controller.IEEEMenuController

    +
    +
    No usage of bitchanger.gui.controller.IEEEMenuController
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controller/package-summary.html b/doc/0.1.4/en_public/bitchanger/gui/controller/package-summary.html new file mode 100644 index 0000000..b00a27d --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controller/package-summary.html @@ -0,0 +1,230 @@ + + + + + +bitchanger.gui.controller + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package bitchanger.gui.controller

    +
    +
    +
    + + +
    Provides controller, that gives functions to the views.
    +
    + +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controller/package-tree.html b/doc/0.1.4/en_public/bitchanger/gui/controller/package-tree.html new file mode 100644 index 0000000..1f83b50 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controller/package-tree.html @@ -0,0 +1,184 @@ + + + + + +bitchanger.gui.controller Class Hierarchy + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package bitchanger.gui.controller

    +Package Hierarchies: + +
    +
    +
    +

    Class Hierarchy

    + +
    +
    +

    Interface Hierarchy

    + +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controller/package-use.html b/doc/0.1.4/en_public/bitchanger/gui/controller/package-use.html new file mode 100644 index 0000000..0447529 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controller/package-use.html @@ -0,0 +1,301 @@ + + + + + +Uses of Package bitchanger.gui.controller + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    bitchanger.gui.controller

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controls/AlphaNumGrid.html b/doc/0.1.4/en_public/bitchanger/gui/controls/AlphaNumGrid.html new file mode 100644 index 0000000..573eb2c --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controls/AlphaNumGrid.html @@ -0,0 +1,574 @@ + + + + + +AlphaNumGrid + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class AlphaNumGrid

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      + +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          AlphaNumGrid

          +
          public AlphaNumGrid​(double spacing)
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTextFieldMap

          +
          public HashMap<String,​javafx.scene.control.TextField> getTextFieldMap()
          +
          Description copied from interface: Controllable
          +
          Returns a Map with all text fields of the view. Each text field is allocated to a unique keyword, + which is used to find the text field out of the map. +

          + Each keyword should have a useful connection to the use of the text field! +

          +
          +
          Specified by:
          +
          getTextFieldMap in interface Controllable
          +
          Returns:
          +
          Map, that contains all text fields of the view
          +
          +
        • +
        + + + +
          +
        • +

          getButtonMap

          +
          public HashMap<String,​javafx.scene.control.Button> getButtonMap()
          +
          Description copied from interface: Controllable
          +
          Returns a Map with all buttons of the view. Each button is allocated to a unique keyword, + which is used to find the button out of the map. +

          + Each Keyword should have a useful connection to the use of the button! +

          +
          +
          Specified by:
          +
          getButtonMap in interface Controllable
          +
          Returns:
          +
          Map, that contains all buttons of the view
          +
          +
        • +
        + + + +
          +
        • +

          getNodeMap

          +
          public HashMap<String,​javafx.scene.Node> getNodeMap()
          +
          Description copied from interface: Controllable
          +
          Returns a Map with all elements (Nodes) of the view, that are not buttons or text fields and are required in the controller. + Each element is allocated to a unique keyword, which is used to find the element out of the map. +

          + Each keyword should have a useful connection to the use of the elements! +

          +
          +
          Specified by:
          +
          getNodeMap in interface Controllable
          +
          Returns:
          +
          Map, which contains all elements of a view, that are not buttons or text fields and are required in the controller
          +
          +
        • +
        + + + +
          +
        • +

          getArrowButtons

          +
          public javafx.scene.layout.HBox getArrowButtons()
          +
        • +
        + + + +
          +
        • +

          getButtonMatrix

          +
          public ArrayList<javafx.scene.Node> getButtonMatrix()
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controls/AlphaNumKeys.html b/doc/0.1.4/en_public/bitchanger/gui/controls/AlphaNumKeys.html new file mode 100644 index 0000000..f73df0b --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controls/AlphaNumKeys.html @@ -0,0 +1,653 @@ + + + + + +AlphaNumKeys + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class AlphaNumKeys

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      + +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          AlphaNumKeys

          +
          public AlphaNumKeys​(int firstRow,
          +                    int firstColumn,
          +                    double spacing,
          +                    javafx.scene.Scene scene)
          +
        • +
        + + + +
          +
        • +

          AlphaNumKeys

          +
          public AlphaNumKeys​(int firstRow,
          +                    int firstColumn,
          +                    javafx.beans.property.DoubleProperty spacingProperty,
          +                    javafx.scene.Scene scene)
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTextFieldMap

          +
          public Map<String,​javafx.scene.control.TextField> getTextFieldMap()
          +
          Returns a Map with all text fields of the controllable. Each text field is allocated to a unique keyword, + which is used to find the text field out of the map. +

          + Each keyword should have a useful connection to the use of the text field! +

          +
          +
          Specified by:
          +
          getTextFieldMap in interface Controllable
          +
          Returns:
          +
          Map, that contains all text fields of the controllable
          +
          +
        • +
        + + + +
          +
        • +

          getButtonMap

          +
          public Map<String,​javafx.scene.control.Button> getButtonMap()
          +
          Returns a Map with all buttons of the controllable. Each button is allocated to a unique keyword, + which is used to find the button out of the map. +

          + Each Keyword should have a useful connection to the use of the button! +

          +
          +
          Specified by:
          +
          getButtonMap in interface Controllable
          +
          Returns:
          +
          Map, that contains all buttons of the controllable
          +
          +
        • +
        + + + +
          +
        • +

          getNodeMap

          +
          public Map<String,​javafx.scene.Node> getNodeMap()
          +
          Returns a Map with all elements (Nodes) of the controllable, that are not buttons or text fields and are required in the controller. + Each element is allocated to a unique keyword, which is used to find the element out of the map. +

          + Each keyword should have a useful connection to the use of the elements! +

          +
          +
          Specified by:
          +
          getNodeMap in interface Controllable
          +
          Returns:
          +
          Map, which contains all elements of a controllable, that are not buttons or text fields and are required in the controller
          +
          +
        • +
        + + + +
          +
        • +

          getArrowButtons

          +
          public javafx.scene.layout.HBox getArrowButtons()
          +
        • +
        + + + +
          +
        • +

          getButtonMatrix

          +
          public ArrayList<javafx.scene.Node> getButtonMatrix()
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controls/BaseSpinner.html b/doc/0.1.4/en_public/bitchanger/gui/controls/BaseSpinner.html new file mode 100644 index 0000000..defeffb --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controls/BaseSpinner.html @@ -0,0 +1,391 @@ + + + + + +BaseSpinner + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class BaseSpinner

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • javafx.scene.Node
      • +
      • +
          +
        • javafx.scene.Parent
        • +
        • +
            +
          • javafx.scene.layout.Region
          • +
          • +
              +
            • javafx.scene.control.Control
            • +
            • +
                +
              • javafx.scene.control.Spinner<Integer>
              • +
              • +
                  +
                • bitchanger.gui.controls.BaseSpinner
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      javafx.css.Styleable, javafx.event.EventTarget, javafx.scene.control.Skinnable
      +
      +
      +
      public class BaseSpinner
      +extends javafx.scene.control.Spinner<Integer>
      +
      Spinner for choosing the base of a numeral system. + +

      + This class extends the function of the class Spinner<T>,so that the user + is able to give input into the editor of the spinner and that this input is updated automatically if it is a valid value. +

      +
      +
      Since:
      +
      Bitchanger 0.1.2
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Summary

        +
          +
        • + + +

          Fields inherited from class javafx.scene.control.Spinner

          +STYLE_CLASS_ARROWS_ON_LEFT_HORIZONTAL, STYLE_CLASS_ARROWS_ON_LEFT_VERTICAL, STYLE_CLASS_ARROWS_ON_RIGHT_HORIZONTAL, STYLE_CLASS_SPLIT_ARROWS_HORIZONTAL, STYLE_CLASS_SPLIT_ARROWS_VERTICAL
        • +
        +
          +
        • + + +

          Fields inherited from class javafx.scene.layout.Region

          +USE_COMPUTED_SIZE, USE_PREF_SIZE
        • +
        +
          +
        • + + +

          Fields inherited from class javafx.scene.Node

          +BASELINE_OFFSET_SAME_AS_HEIGHT
        • +
        +
      • +
      +
      + +
      + +
      + +
      +
        +
      • + + +

        Method Summary

        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Spinner

          +cancelEdit, commitValue, createDefaultSkin, decrement, decrement, editableProperty, editorProperty, executeAccessibleAction, getClassCssMetaData, getControlCssMetaData, getEditor, getInitialDelay, getPromptText, getRepeatDelay, getValue, getValueFactory, increment, increment, initialDelayProperty, isEditable, promptTextProperty, queryAccessibleAttribute, repeatDelayProperty, setEditable, setInitialDelay, setPromptText, setRepeatDelay, setValueFactory, valueFactoryProperty, valueProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Control

          +computeMaxHeight, computeMaxWidth, computeMinHeight, computeMinWidth, computePrefHeight, computePrefWidth, contextMenuProperty, getBaselineOffset, getContextMenu, getCssMetaData, getInitialFocusTraversable, getSkin, getTooltip, isResizable, layoutChildren, setContextMenu, setSkin, setTooltip, skinProperty, tooltipProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.layout.Region

          +backgroundProperty, borderProperty, cacheShapeProperty, centerShapeProperty, getBackground, getBorder, getHeight, getInsets, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getOpaqueInsets, getPadding, getPrefHeight, getPrefWidth, getShape, getUserAgentStylesheet, getWidth, heightProperty, insetsProperty, isCacheShape, isCenterShape, isScaleShape, isSnapToPixel, layoutInArea, layoutInArea, layoutInArea, layoutInArea, maxHeight, maxHeightProperty, maxWidth, maxWidthProperty, minHeight, minHeightProperty, minWidth, minWidthProperty, opaqueInsetsProperty, paddingProperty, positionInArea, positionInArea, prefHeight, prefHeightProperty, prefWidth, prefWidthProperty, resize, scaleShapeProperty, setBackground, setBorder, setCacheShape, setCenterShape, setHeight, setMaxHeight, setMaxSize, setMaxWidth, setMinHeight, setMinSize, setMinWidth, setOpaqueInsets, setPadding, setPrefHeight, setPrefSize, setPrefWidth, setScaleShape, setShape, setSnapToPixel, setWidth, shapeProperty, snappedBottomInset, snappedLeftInset, snappedRightInset, snappedTopInset, snapPosition, snapPositionX, snapPositionY, snapSize, snapSizeX, snapSizeY, snapSpace, snapSpaceX, snapSpaceY, snapToPixelProperty, widthProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Parent

          +getChildren, getChildrenUnmodifiable, getManagedChildren, getStylesheets, isNeedsLayout, layout, lookup, needsLayoutProperty, requestLayout, requestParentLayout, setNeedsLayout, updateBounds
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Node

          +accessibleHelpProperty, accessibleRoleDescriptionProperty, accessibleRoleProperty, accessibleTextProperty, addEventFilter, addEventHandler, applyCss, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen, contains, contains, cursorProperty, depthTestProperty, disabledProperty, disableProperty, effectiveNodeOrientationProperty, effectProperty, eventDispatcherProperty, fireEvent, focusedProperty, focusTraversableProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getContentBias, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInitialCursor, getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY, getLocalToParentTransform, getLocalToSceneTransform, getNodeOrientation, getOnContextMenuRequested, getOnDragDetected, getOnDragDone, getOnDragDropped, getOnDragEntered, getOnDragExited, getOnDragOver, getOnInputMethodTextChanged, getOnKeyPressed, getOnKeyReleased, getOnKeyTyped, getOnMouseClicked, getOnMouseDragEntered, getOnMouseDragExited, getOnMouseDragged, getOnMouseDragOver, getOnMouseDragReleased, getOnMouseEntered, getOnMouseExited, getOnMouseMoved, getOnMousePressed, getOnMouseReleased, getOnRotate, getOnRotationFinished, getOnRotationStarted, getOnScroll, getOnScrollFinished, getOnScrollStarted, getOnSwipeDown, getOnSwipeLeft, getOnSwipeRight, getOnSwipeUp, getOnTouchMoved, getOnTouchPressed, getOnTouchReleased, getOnTouchStationary, getOnZoom, getOnZoomFinished, getOnZoomStarted, getOpacity, getParent, getProperties, getPseudoClassStates, getRotate, getRotationAxis, getScaleX, getScaleY, getScaleZ, getScene, getStyle, getStyleableParent, getStyleClass, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getTypeSelector, getUserData, getViewOrder, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, isVisible, layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent, localToParent, localToParent, localToParent, localToParent, localToParentTransformProperty, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToSceneTransformProperty, localToScreen, localToScreen, localToScreen, localToScreen, localToScreen, lookupAll, managedProperty, mouseTransparentProperty, nodeOrientationProperty, notifyAccessibleAttributeChanged, onContextMenuRequestedProperty, onDragDetectedProperty, onDragDoneProperty, onDragDroppedProperty, onDragEnteredProperty, onDragExitedProperty, onDragOverProperty, onInputMethodTextChangedProperty, onKeyPressedProperty, onKeyReleasedProperty, onKeyTypedProperty, onMouseClickedProperty, onMouseDragEnteredProperty, onMouseDragExitedProperty, onMouseDraggedProperty, onMouseDragOverProperty, onMouseDragReleasedProperty, onMouseEnteredProperty, onMouseExitedProperty, onMouseMovedProperty, onMousePressedProperty, onMouseReleasedProperty, onRotateProperty, onRotationFinishedProperty, onRotationStartedProperty, onScrollFinishedProperty, onScrollProperty, onScrollStartedProperty, onSwipeDownProperty, onSwipeLeftProperty, onSwipeRightProperty, onSwipeUpProperty, onTouchMovedProperty, onTouchPressedProperty, onTouchReleasedProperty, onTouchStationaryProperty, onZoomFinishedProperty, onZoomProperty, onZoomStartedProperty, opacityProperty, parentProperty, parentToLocal, parentToLocal, parentToLocal, parentToLocal, parentToLocal, pickOnBoundsProperty, pressedProperty, pseudoClassStateChanged, relocate, removeEventFilter, removeEventHandler, requestFocus, resizeRelocate, rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty, scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, screenToLocal, screenToLocal, screenToLocal, setAccessibleHelp, setAccessibleRole, setAccessibleRoleDescription, setAccessibleText, setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest, setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler, setFocused, setFocusTraversable, setHover, setId, setInputMethodRequests, setLayoutX, setLayoutY, setManaged, setMouseTransparent, setNodeOrientation, setOnContextMenuRequested, setOnDragDetected, setOnDragDone, setOnDragDropped, setOnDragEntered, setOnDragExited, setOnDragOver, setOnInputMethodTextChanged, setOnKeyPressed, setOnKeyReleased, setOnKeyTyped, setOnMouseClicked, setOnMouseDragEntered, setOnMouseDragExited, setOnMouseDragged, setOnMouseDragOver, setOnMouseDragReleased, setOnMouseEntered, setOnMouseExited, setOnMouseMoved, setOnMousePressed, setOnMouseReleased, setOnRotate, setOnRotationFinished, setOnRotationStarted, setOnScroll, setOnScrollFinished, setOnScrollStarted, setOnSwipeDown, setOnSwipeLeft, setOnSwipeRight, setOnSwipeUp, setOnTouchMoved, setOnTouchPressed, setOnTouchReleased, setOnTouchStationary, setOnZoom, setOnZoomFinished, setOnZoomStarted, setOpacity, setPickOnBounds, setPressed, setRotate, setRotationAxis, setScaleX, setScaleY, setScaleZ, setStyle, setTranslateX, setTranslateY, setTranslateZ, setUserData, setViewOrder, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, toString, translateXProperty, translateYProperty, translateZProperty, usesMirroring, viewOrderProperty, visibleProperty
        • +
        + +
          +
        • + + +

          Methods inherited from interface javafx.css.Styleable

          +getStyleableNode
        • +
        +
      • +
      +
      +
    • +
    +
    +
    + +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controls/BasicMenuBar.html b/doc/0.1.4/en_public/bitchanger/gui/controls/BasicMenuBar.html new file mode 100644 index 0000000..7f11d23 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controls/BasicMenuBar.html @@ -0,0 +1,872 @@ + + + + + +BasicMenuBar + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class BasicMenuBar

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • javafx.scene.Node
      • +
      • +
          +
        • javafx.scene.Parent
        • +
        • +
            +
          • javafx.scene.layout.Region
          • +
          • +
              +
            • javafx.scene.control.Control
            • +
            • +
                +
              • javafx.scene.control.MenuBar
              • +
              • +
                  +
                • bitchanger.gui.controls.BasicMenuBar
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Controllable, javafx.css.Styleable, javafx.event.EventTarget, javafx.scene.control.Skinnable
      +
      +
      +
      Direct Known Subclasses:
      +
      ConverterMenuBar
      +
      +
      +
      public class BasicMenuBar
      +extends javafx.scene.control.MenuBar
      +implements Controllable
      +
      Basic MenuBar containing the MenuItems that are generally required. + The Preferences.commaProperty is changed accordingly via the MenuItems, + which are available in Options -> Set Comma. + Further functions can be added via Controllers.
      +
      +
      Since:
      +
      Bitchanger 0.1.4
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      See Also:
      +
      BasicMenuController
      +
      +
    • +
    +
    +
    +
      +
    • + +
      + +
      + +
      +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + + + + + +
        Constructors 
        ConstructorDescription
        BasicMenuBar() +
        Constructs a new BasicMenuBar with all MenuItems.
        +
        BasicMenuBar​(ControllableApplication controllableApp) +
        Constructs a new BasicMenuBar with all MenuItems that are already assigned the basic functions.
        +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethodDescription
        Map<String,​javafx.scene.control.Button>getButtonMap() +
        Returns a Map with all buttons of the controllable.
        +
        Map<String,​javafx.scene.Node>getNodeMap() +
        Returns a Map with all elements (Nodes) of the controllable, that are not buttons or text fields and are required in the controller.
        +
        Map<String,​javafx.scene.control.TextField>getTextFieldMap() +
        Returns a Map with all text fields of the controllable.
        +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.MenuBar

          +createDefaultSkin, getClassCssMetaData, getControlCssMetaData, getInitialFocusTraversable, getMenus, isUseSystemMenuBar, setUseSystemMenuBar, useSystemMenuBarProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Control

          +computeMaxHeight, computeMaxWidth, computeMinHeight, computeMinWidth, computePrefHeight, computePrefWidth, contextMenuProperty, executeAccessibleAction, getBaselineOffset, getContextMenu, getCssMetaData, getSkin, getTooltip, isResizable, layoutChildren, queryAccessibleAttribute, setContextMenu, setSkin, setTooltip, skinProperty, tooltipProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.layout.Region

          +backgroundProperty, borderProperty, cacheShapeProperty, centerShapeProperty, getBackground, getBorder, getHeight, getInsets, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getOpaqueInsets, getPadding, getPrefHeight, getPrefWidth, getShape, getUserAgentStylesheet, getWidth, heightProperty, insetsProperty, isCacheShape, isCenterShape, isScaleShape, isSnapToPixel, layoutInArea, layoutInArea, layoutInArea, layoutInArea, maxHeight, maxHeightProperty, maxWidth, maxWidthProperty, minHeight, minHeightProperty, minWidth, minWidthProperty, opaqueInsetsProperty, paddingProperty, positionInArea, positionInArea, prefHeight, prefHeightProperty, prefWidth, prefWidthProperty, resize, scaleShapeProperty, setBackground, setBorder, setCacheShape, setCenterShape, setHeight, setMaxHeight, setMaxSize, setMaxWidth, setMinHeight, setMinSize, setMinWidth, setOpaqueInsets, setPadding, setPrefHeight, setPrefSize, setPrefWidth, setScaleShape, setShape, setSnapToPixel, setWidth, shapeProperty, snappedBottomInset, snappedLeftInset, snappedRightInset, snappedTopInset, snapPosition, snapPositionX, snapPositionY, snapSize, snapSizeX, snapSizeY, snapSpace, snapSpaceX, snapSpaceY, snapToPixelProperty, widthProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Parent

          +getChildren, getChildrenUnmodifiable, getManagedChildren, getStylesheets, isNeedsLayout, layout, lookup, needsLayoutProperty, requestLayout, requestParentLayout, setNeedsLayout, updateBounds
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Node

          +accessibleHelpProperty, accessibleRoleDescriptionProperty, accessibleRoleProperty, accessibleTextProperty, addEventFilter, addEventHandler, applyCss, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen, contains, contains, cursorProperty, depthTestProperty, disabledProperty, disableProperty, effectiveNodeOrientationProperty, effectProperty, eventDispatcherProperty, fireEvent, focusedProperty, focusTraversableProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getContentBias, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInitialCursor, getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY, getLocalToParentTransform, getLocalToSceneTransform, getNodeOrientation, getOnContextMenuRequested, getOnDragDetected, getOnDragDone, getOnDragDropped, getOnDragEntered, getOnDragExited, getOnDragOver, getOnInputMethodTextChanged, getOnKeyPressed, getOnKeyReleased, getOnKeyTyped, getOnMouseClicked, getOnMouseDragEntered, getOnMouseDragExited, getOnMouseDragged, getOnMouseDragOver, getOnMouseDragReleased, getOnMouseEntered, getOnMouseExited, getOnMouseMoved, getOnMousePressed, getOnMouseReleased, getOnRotate, getOnRotationFinished, getOnRotationStarted, getOnScroll, getOnScrollFinished, getOnScrollStarted, getOnSwipeDown, getOnSwipeLeft, getOnSwipeRight, getOnSwipeUp, getOnTouchMoved, getOnTouchPressed, getOnTouchReleased, getOnTouchStationary, getOnZoom, getOnZoomFinished, getOnZoomStarted, getOpacity, getParent, getProperties, getPseudoClassStates, getRotate, getRotationAxis, getScaleX, getScaleY, getScaleZ, getScene, getStyle, getStyleableParent, getStyleClass, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getTypeSelector, getUserData, getViewOrder, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, isVisible, layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent, localToParent, localToParent, localToParent, localToParent, localToParentTransformProperty, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToSceneTransformProperty, localToScreen, localToScreen, localToScreen, localToScreen, localToScreen, lookupAll, managedProperty, mouseTransparentProperty, nodeOrientationProperty, notifyAccessibleAttributeChanged, onContextMenuRequestedProperty, onDragDetectedProperty, onDragDoneProperty, onDragDroppedProperty, onDragEnteredProperty, onDragExitedProperty, onDragOverProperty, onInputMethodTextChangedProperty, onKeyPressedProperty, onKeyReleasedProperty, onKeyTypedProperty, onMouseClickedProperty, onMouseDragEnteredProperty, onMouseDragExitedProperty, onMouseDraggedProperty, onMouseDragOverProperty, onMouseDragReleasedProperty, onMouseEnteredProperty, onMouseExitedProperty, onMouseMovedProperty, onMousePressedProperty, onMouseReleasedProperty, onRotateProperty, onRotationFinishedProperty, onRotationStartedProperty, onScrollFinishedProperty, onScrollProperty, onScrollStartedProperty, onSwipeDownProperty, onSwipeLeftProperty, onSwipeRightProperty, onSwipeUpProperty, onTouchMovedProperty, onTouchPressedProperty, onTouchReleasedProperty, onTouchStationaryProperty, onZoomFinishedProperty, onZoomProperty, onZoomStartedProperty, opacityProperty, parentProperty, parentToLocal, parentToLocal, parentToLocal, parentToLocal, parentToLocal, pickOnBoundsProperty, pressedProperty, pseudoClassStateChanged, relocate, removeEventFilter, removeEventHandler, requestFocus, resizeRelocate, rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty, scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, screenToLocal, screenToLocal, screenToLocal, setAccessibleHelp, setAccessibleRole, setAccessibleRoleDescription, setAccessibleText, setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest, setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler, setFocused, setFocusTraversable, setHover, setId, setInputMethodRequests, setLayoutX, setLayoutY, setManaged, setMouseTransparent, setNodeOrientation, setOnContextMenuRequested, setOnDragDetected, setOnDragDone, setOnDragDropped, setOnDragEntered, setOnDragExited, setOnDragOver, setOnInputMethodTextChanged, setOnKeyPressed, setOnKeyReleased, setOnKeyTyped, setOnMouseClicked, setOnMouseDragEntered, setOnMouseDragExited, setOnMouseDragged, setOnMouseDragOver, setOnMouseDragReleased, setOnMouseEntered, setOnMouseExited, setOnMouseMoved, setOnMousePressed, setOnMouseReleased, setOnRotate, setOnRotationFinished, setOnRotationStarted, setOnScroll, setOnScrollFinished, setOnScrollStarted, setOnSwipeDown, setOnSwipeLeft, setOnSwipeRight, setOnSwipeUp, setOnTouchMoved, setOnTouchPressed, setOnTouchReleased, setOnTouchStationary, setOnZoom, setOnZoomFinished, setOnZoomStarted, setOpacity, setPickOnBounds, setPressed, setRotate, setRotationAxis, setScaleX, setScaleY, setScaleZ, setStyle, setTranslateX, setTranslateY, setTranslateZ, setUserData, setViewOrder, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, toString, translateXProperty, translateYProperty, translateZProperty, usesMirroring, viewOrderProperty, visibleProperty
        • +
        + +
          +
        • + + +

          Methods inherited from interface javafx.css.Styleable

          +getStyleableNode
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      + +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          BasicMenuBar

          +
          public BasicMenuBar()
          +
          Constructs a new BasicMenuBar with all MenuItems. The only function provided is changing the + CommaProperty in Preferences.getPrefs() to English or German.
          +
        • +
        + + + +
          +
        • +

          BasicMenuBar

          +
          public BasicMenuBar​(ControllableApplication controllableApp)
          +             throws NullPointerException
          +
          Constructs a new BasicMenuBar with all MenuItems that are already assigned the basic functions.
          +
          +
          Parameters:
          +
          controllableApp - Application class with that the basic functions are associated
          +
          Throws:
          +
          NullPointerException - if the argument controllableApp is null
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTextFieldMap

          +
          public Map<String,​javafx.scene.control.TextField> getTextFieldMap()
          +
          Returns a Map with all text fields of the controllable. Each text field is allocated to a unique keyword, + which is used to find the text field out of the map. +

          + Each keyword should have a useful connection to the use of the text field! +

          +
          +
          Specified by:
          +
          getTextFieldMap in interface Controllable
          +
          Returns:
          +
          Map, that contains all text fields of the controllable
          +
          +
        • +
        + + + +
          +
        • +

          getButtonMap

          +
          public Map<String,​javafx.scene.control.Button> getButtonMap()
          +
          Returns a Map with all buttons of the controllable. Each button is allocated to a unique keyword, + which is used to find the button out of the map. +

          + Each Keyword should have a useful connection to the use of the button! +

          +
          +
          Specified by:
          +
          getButtonMap in interface Controllable
          +
          Returns:
          +
          Map, that contains all buttons of the controllable
          +
          +
        • +
        + + + +
          +
        • +

          getNodeMap

          +
          public Map<String,​javafx.scene.Node> getNodeMap()
          +
          Returns a Map with all elements (Nodes) of the controllable, that are not buttons or text fields and are required in the controller. + Each element is allocated to a unique keyword, which is used to find the element out of the map. +

          + Each keyword should have a useful connection to the use of the elements! +

          +
          +
          Specified by:
          +
          getNodeMap in interface Controllable
          +
          Returns:
          +
          Map, which contains all elements of a controllable, that are not buttons or text fields and are required in the controller
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controls/ConverterMenuBar.html b/doc/0.1.4/en_public/bitchanger/gui/controls/ConverterMenuBar.html new file mode 100644 index 0000000..700766c --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controls/ConverterMenuBar.html @@ -0,0 +1,447 @@ + + + + + +ConverterMenuBar + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class ConverterMenuBar

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • javafx.scene.Node
      • +
      • +
          +
        • javafx.scene.Parent
        • +
        • +
            +
          • javafx.scene.layout.Region
          • +
          • + +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Controllable, javafx.css.Styleable, javafx.event.EventTarget, javafx.scene.control.Skinnable
      +
      +
      +
      public class ConverterMenuBar
      +extends BasicMenuBar
      +
    • +
    +
    +
    +
      +
    • + +
      + +
      + +
      + +
      + +
      +
        +
      • + + +

        Method Summary

        + +
          +
        • + + +

          Methods inherited from class javafx.scene.control.MenuBar

          +createDefaultSkin, getClassCssMetaData, getControlCssMetaData, getInitialFocusTraversable, getMenus, isUseSystemMenuBar, setUseSystemMenuBar, useSystemMenuBarProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Control

          +computeMaxHeight, computeMaxWidth, computeMinHeight, computeMinWidth, computePrefHeight, computePrefWidth, contextMenuProperty, executeAccessibleAction, getBaselineOffset, getContextMenu, getCssMetaData, getSkin, getTooltip, isResizable, layoutChildren, queryAccessibleAttribute, setContextMenu, setSkin, setTooltip, skinProperty, tooltipProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.layout.Region

          +backgroundProperty, borderProperty, cacheShapeProperty, centerShapeProperty, getBackground, getBorder, getHeight, getInsets, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getOpaqueInsets, getPadding, getPrefHeight, getPrefWidth, getShape, getUserAgentStylesheet, getWidth, heightProperty, insetsProperty, isCacheShape, isCenterShape, isScaleShape, isSnapToPixel, layoutInArea, layoutInArea, layoutInArea, layoutInArea, maxHeight, maxHeightProperty, maxWidth, maxWidthProperty, minHeight, minHeightProperty, minWidth, minWidthProperty, opaqueInsetsProperty, paddingProperty, positionInArea, positionInArea, prefHeight, prefHeightProperty, prefWidth, prefWidthProperty, resize, scaleShapeProperty, setBackground, setBorder, setCacheShape, setCenterShape, setHeight, setMaxHeight, setMaxSize, setMaxWidth, setMinHeight, setMinSize, setMinWidth, setOpaqueInsets, setPadding, setPrefHeight, setPrefSize, setPrefWidth, setScaleShape, setShape, setSnapToPixel, setWidth, shapeProperty, snappedBottomInset, snappedLeftInset, snappedRightInset, snappedTopInset, snapPosition, snapPositionX, snapPositionY, snapSize, snapSizeX, snapSizeY, snapSpace, snapSpaceX, snapSpaceY, snapToPixelProperty, widthProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Parent

          +getChildren, getChildrenUnmodifiable, getManagedChildren, getStylesheets, isNeedsLayout, layout, lookup, needsLayoutProperty, requestLayout, requestParentLayout, setNeedsLayout, updateBounds
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Node

          +accessibleHelpProperty, accessibleRoleDescriptionProperty, accessibleRoleProperty, accessibleTextProperty, addEventFilter, addEventHandler, applyCss, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen, contains, contains, cursorProperty, depthTestProperty, disabledProperty, disableProperty, effectiveNodeOrientationProperty, effectProperty, eventDispatcherProperty, fireEvent, focusedProperty, focusTraversableProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getContentBias, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInitialCursor, getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY, getLocalToParentTransform, getLocalToSceneTransform, getNodeOrientation, getOnContextMenuRequested, getOnDragDetected, getOnDragDone, getOnDragDropped, getOnDragEntered, getOnDragExited, getOnDragOver, getOnInputMethodTextChanged, getOnKeyPressed, getOnKeyReleased, getOnKeyTyped, getOnMouseClicked, getOnMouseDragEntered, getOnMouseDragExited, getOnMouseDragged, getOnMouseDragOver, getOnMouseDragReleased, getOnMouseEntered, getOnMouseExited, getOnMouseMoved, getOnMousePressed, getOnMouseReleased, getOnRotate, getOnRotationFinished, getOnRotationStarted, getOnScroll, getOnScrollFinished, getOnScrollStarted, getOnSwipeDown, getOnSwipeLeft, getOnSwipeRight, getOnSwipeUp, getOnTouchMoved, getOnTouchPressed, getOnTouchReleased, getOnTouchStationary, getOnZoom, getOnZoomFinished, getOnZoomStarted, getOpacity, getParent, getProperties, getPseudoClassStates, getRotate, getRotationAxis, getScaleX, getScaleY, getScaleZ, getScene, getStyle, getStyleableParent, getStyleClass, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getTypeSelector, getUserData, getViewOrder, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, isVisible, layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent, localToParent, localToParent, localToParent, localToParent, localToParentTransformProperty, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToSceneTransformProperty, localToScreen, localToScreen, localToScreen, localToScreen, localToScreen, lookupAll, managedProperty, mouseTransparentProperty, nodeOrientationProperty, notifyAccessibleAttributeChanged, onContextMenuRequestedProperty, onDragDetectedProperty, onDragDoneProperty, onDragDroppedProperty, onDragEnteredProperty, onDragExitedProperty, onDragOverProperty, onInputMethodTextChangedProperty, onKeyPressedProperty, onKeyReleasedProperty, onKeyTypedProperty, onMouseClickedProperty, onMouseDragEnteredProperty, onMouseDragExitedProperty, onMouseDraggedProperty, onMouseDragOverProperty, onMouseDragReleasedProperty, onMouseEnteredProperty, onMouseExitedProperty, onMouseMovedProperty, onMousePressedProperty, onMouseReleasedProperty, onRotateProperty, onRotationFinishedProperty, onRotationStartedProperty, onScrollFinishedProperty, onScrollProperty, onScrollStartedProperty, onSwipeDownProperty, onSwipeLeftProperty, onSwipeRightProperty, onSwipeUpProperty, onTouchMovedProperty, onTouchPressedProperty, onTouchReleasedProperty, onTouchStationaryProperty, onZoomFinishedProperty, onZoomProperty, onZoomStartedProperty, opacityProperty, parentProperty, parentToLocal, parentToLocal, parentToLocal, parentToLocal, parentToLocal, pickOnBoundsProperty, pressedProperty, pseudoClassStateChanged, relocate, removeEventFilter, removeEventHandler, requestFocus, resizeRelocate, rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty, scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, screenToLocal, screenToLocal, screenToLocal, setAccessibleHelp, setAccessibleRole, setAccessibleRoleDescription, setAccessibleText, setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest, setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler, setFocused, setFocusTraversable, setHover, setId, setInputMethodRequests, setLayoutX, setLayoutY, setManaged, setMouseTransparent, setNodeOrientation, setOnContextMenuRequested, setOnDragDetected, setOnDragDone, setOnDragDropped, setOnDragEntered, setOnDragExited, setOnDragOver, setOnInputMethodTextChanged, setOnKeyPressed, setOnKeyReleased, setOnKeyTyped, setOnMouseClicked, setOnMouseDragEntered, setOnMouseDragExited, setOnMouseDragged, setOnMouseDragOver, setOnMouseDragReleased, setOnMouseEntered, setOnMouseExited, setOnMouseMoved, setOnMousePressed, setOnMouseReleased, setOnRotate, setOnRotationFinished, setOnRotationStarted, setOnScroll, setOnScrollFinished, setOnScrollStarted, setOnSwipeDown, setOnSwipeLeft, setOnSwipeRight, setOnSwipeUp, setOnTouchMoved, setOnTouchPressed, setOnTouchReleased, setOnTouchStationary, setOnZoom, setOnZoomFinished, setOnZoomStarted, setOpacity, setPickOnBounds, setPressed, setRotate, setRotationAxis, setScaleX, setScaleY, setScaleZ, setStyle, setTranslateX, setTranslateY, setTranslateZ, setUserData, setViewOrder, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, toString, translateXProperty, translateYProperty, translateZProperty, usesMirroring, viewOrderProperty, visibleProperty
        • +
        + +
          +
        • + + +

          Methods inherited from interface javafx.css.Styleable

          +getStyleableNode
        • +
        +
      • +
      +
      +
    • +
    +
    +
    + +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controls/InformationDialog.InformationType.html b/doc/0.1.4/en_public/bitchanger/gui/controls/InformationDialog.InformationType.html new file mode 100644 index 0000000..a1bf6f2 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controls/InformationDialog.InformationType.html @@ -0,0 +1,396 @@ + + + + + +InformationDialog.InformationType + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Enum InformationDialog.InformationType

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      + +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          values

          +
          public static InformationDialog.InformationType[] values()
          +
          Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
          +for (InformationDialog.InformationType c : InformationDialog.InformationType.values())
          +    System.out.println(c);
          +
          +
          +
          Returns:
          +
          an array containing the constants of this enum type, in the order they are declared
          +
          +
        • +
        + + + +
          +
        • +

          valueOf

          +
          public static InformationDialog.InformationType valueOf​(String name)
          +
          Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
          +
          +
          Parameters:
          +
          name - the name of the enum constant to be returned.
          +
          Returns:
          +
          the enum constant with the specified name
          +
          Throws:
          +
          IllegalArgumentException - if this enum type has no constant with the specified name
          +
          NullPointerException - if the argument is null
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controls/InformationDialog.html b/doc/0.1.4/en_public/bitchanger/gui/controls/InformationDialog.html new file mode 100644 index 0000000..944fe62 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controls/InformationDialog.html @@ -0,0 +1,340 @@ + + + + + +InformationDialog + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class InformationDialog

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • javafx.scene.control.Dialog<javafx.scene.control.ButtonType>
      • +
      • +
          +
        • javafx.scene.control.Alert
        • +
        • +
            +
          • bitchanger.gui.controls.InformationDialog
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      javafx.event.EventTarget
      +
      +
      +
      public class InformationDialog
      +extends javafx.scene.control.Alert
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Nested Class Summary

        + + + + + + + + + + + + +
        Nested Classes 
        Modifier and TypeClassDescription
        static class InformationDialog.InformationType 
        +
          +
        • + + +

          Nested classes/interfaces inherited from class javafx.scene.control.Alert

          +javafx.scene.control.Alert.AlertType
        • +
        +
      • +
      +
      + +
      + +
      + +
      +
        +
      • + + +

        Method Summary

        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Alert

          +alertTypeProperty, getAlertType, getButtonTypes, setAlertType
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Dialog

          +buildEventDispatchChain, close, contentTextProperty, dialogPaneProperty, getContentText, getDialogPane, getGraphic, getHeaderText, getHeight, getModality, getOnCloseRequest, getOnHidden, getOnHiding, getOnShowing, getOnShown, getOwner, getResult, getResultConverter, getTitle, getWidth, getX, getY, graphicProperty, headerTextProperty, heightProperty, hide, initModality, initOwner, initStyle, isResizable, isShowing, onCloseRequestProperty, onHiddenProperty, onHidingProperty, onShowingProperty, onShownProperty, resizableProperty, resultConverterProperty, resultProperty, setContentText, setDialogPane, setGraphic, setHeaderText, setHeight, setOnCloseRequest, setOnHidden, setOnHiding, setOnShowing, setOnShown, setResizable, setResult, setResultConverter, setTitle, setWidth, setX, setY, show, showAndWait, showingProperty, titleProperty, widthProperty, xProperty, yProperty
        • +
        + +
      • +
      +
      +
    • +
    +
    +
    + +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controls/SVGIcon.html b/doc/0.1.4/en_public/bitchanger/gui/controls/SVGIcon.html new file mode 100644 index 0000000..66fd376 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controls/SVGIcon.html @@ -0,0 +1,411 @@ + + + + + +SVGIcon + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class SVGIcon

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • javafx.scene.Node
      • +
      • +
          +
        • javafx.scene.shape.Shape
        • +
        • +
            +
          • javafx.scene.shape.SVGPath
          • +
          • +
              +
            • bitchanger.gui.controls.SVGIcon
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      javafx.css.Styleable, javafx.event.EventTarget
      +
      +
      +
      public class SVGIcon
      +extends javafx.scene.shape.SVGPath
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Summary

        +
          +
        • + + +

          Fields inherited from class javafx.scene.Node

          +BASELINE_OFFSET_SAME_AS_HEIGHT
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + + + + + + + + + +
        Constructors 
        ConstructorDescription
        SVGIcon() 
        SVGIcon​(File svgFile) 
        SVGIcon​(javafx.scene.shape.SVGPath svgPath) 
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethodDescription
        booleanhasPath() 
        voidsetSVG​(javafx.scene.shape.SVGPath svgPath) 
        +
          +
        • + + +

          Methods inherited from class javafx.scene.shape.SVGPath

          +contentProperty, fillRuleProperty, getContent, getFillRule, setContent, setFillRule, toString
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.shape.Shape

          +fillProperty, getClassCssMetaData, getCssMetaData, getFill, getStroke, getStrokeDashArray, getStrokeDashOffset, getStrokeLineCap, getStrokeLineJoin, getStrokeMiterLimit, getStrokeType, getStrokeWidth, intersect, isSmooth, setFill, setSmooth, setStroke, setStrokeDashOffset, setStrokeLineCap, setStrokeLineJoin, setStrokeMiterLimit, setStrokeType, setStrokeWidth, smoothProperty, strokeDashOffsetProperty, strokeLineCapProperty, strokeLineJoinProperty, strokeMiterLimitProperty, strokeProperty, strokeTypeProperty, strokeWidthProperty, subtract, union
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Node

          +accessibleHelpProperty, accessibleRoleDescriptionProperty, accessibleRoleProperty, accessibleTextProperty, addEventFilter, addEventHandler, applyCss, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen, contains, contains, cursorProperty, depthTestProperty, disabledProperty, disableProperty, effectiveNodeOrientationProperty, effectProperty, eventDispatcherProperty, executeAccessibleAction, fireEvent, focusedProperty, focusTraversableProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBaselineOffset, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getContentBias, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInitialCursor, getInitialFocusTraversable, getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY, getLocalToParentTransform, getLocalToSceneTransform, getNodeOrientation, getOnContextMenuRequested, getOnDragDetected, getOnDragDone, getOnDragDropped, getOnDragEntered, getOnDragExited, getOnDragOver, getOnInputMethodTextChanged, getOnKeyPressed, getOnKeyReleased, getOnKeyTyped, getOnMouseClicked, getOnMouseDragEntered, getOnMouseDragExited, getOnMouseDragged, getOnMouseDragOver, getOnMouseDragReleased, getOnMouseEntered, getOnMouseExited, getOnMouseMoved, getOnMousePressed, getOnMouseReleased, getOnRotate, getOnRotationFinished, getOnRotationStarted, getOnScroll, getOnScrollFinished, getOnScrollStarted, getOnSwipeDown, getOnSwipeLeft, getOnSwipeRight, getOnSwipeUp, getOnTouchMoved, getOnTouchPressed, getOnTouchReleased, getOnTouchStationary, getOnZoom, getOnZoomFinished, getOnZoomStarted, getOpacity, getParent, getProperties, getPseudoClassStates, getRotate, getRotationAxis, getScaleX, getScaleY, getScaleZ, getScene, getStyle, getStyleableParent, getStyleClass, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getTypeSelector, getUserData, getViewOrder, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, isResizable, isVisible, layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent, localToParent, localToParent, localToParent, localToParent, localToParentTransformProperty, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToSceneTransformProperty, localToScreen, localToScreen, localToScreen, localToScreen, localToScreen, lookup, lookupAll, managedProperty, maxHeight, maxWidth, minHeight, minWidth, mouseTransparentProperty, nodeOrientationProperty, notifyAccessibleAttributeChanged, onContextMenuRequestedProperty, onDragDetectedProperty, onDragDoneProperty, onDragDroppedProperty, onDragEnteredProperty, onDragExitedProperty, onDragOverProperty, onInputMethodTextChangedProperty, onKeyPressedProperty, onKeyReleasedProperty, onKeyTypedProperty, onMouseClickedProperty, onMouseDragEnteredProperty, onMouseDragExitedProperty, onMouseDraggedProperty, onMouseDragOverProperty, onMouseDragReleasedProperty, onMouseEnteredProperty, onMouseExitedProperty, onMouseMovedProperty, onMousePressedProperty, onMouseReleasedProperty, onRotateProperty, onRotationFinishedProperty, onRotationStartedProperty, onScrollFinishedProperty, onScrollProperty, onScrollStartedProperty, onSwipeDownProperty, onSwipeLeftProperty, onSwipeRightProperty, onSwipeUpProperty, onTouchMovedProperty, onTouchPressedProperty, onTouchReleasedProperty, onTouchStationaryProperty, onZoomFinishedProperty, onZoomProperty, onZoomStartedProperty, opacityProperty, parentProperty, parentToLocal, parentToLocal, parentToLocal, parentToLocal, parentToLocal, pickOnBoundsProperty, prefHeight, prefWidth, pressedProperty, pseudoClassStateChanged, queryAccessibleAttribute, relocate, removeEventFilter, removeEventHandler, requestFocus, resize, resizeRelocate, rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty, scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, screenToLocal, screenToLocal, screenToLocal, setAccessibleHelp, setAccessibleRole, setAccessibleRoleDescription, setAccessibleText, setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest, setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler, setFocused, setFocusTraversable, setHover, setId, setInputMethodRequests, setLayoutX, setLayoutY, setManaged, setMouseTransparent, setNodeOrientation, setOnContextMenuRequested, setOnDragDetected, setOnDragDone, setOnDragDropped, setOnDragEntered, setOnDragExited, setOnDragOver, setOnInputMethodTextChanged, setOnKeyPressed, setOnKeyReleased, setOnKeyTyped, setOnMouseClicked, setOnMouseDragEntered, setOnMouseDragExited, setOnMouseDragged, setOnMouseDragOver, setOnMouseDragReleased, setOnMouseEntered, setOnMouseExited, setOnMouseMoved, setOnMousePressed, setOnMouseReleased, setOnRotate, setOnRotationFinished, setOnRotationStarted, setOnScroll, setOnScrollFinished, setOnScrollStarted, setOnSwipeDown, setOnSwipeLeft, setOnSwipeRight, setOnSwipeUp, setOnTouchMoved, setOnTouchPressed, setOnTouchReleased, setOnTouchStationary, setOnZoom, setOnZoomFinished, setOnZoomStarted, setOpacity, setPickOnBounds, setPressed, setRotate, setRotationAxis, setScaleX, setScaleY, setScaleZ, setStyle, setTranslateX, setTranslateY, setTranslateZ, setUserData, setViewOrder, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, translateXProperty, translateYProperty, translateZProperty, usesMirroring, viewOrderProperty, visibleProperty
        • +
        + +
          +
        • + + +

          Methods inherited from interface javafx.css.Styleable

          +getStyleableNode
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          SVGIcon

          +
          public SVGIcon()
          +
        • +
        + + + +
          +
        • +

          SVGIcon

          +
          public SVGIcon​(File svgFile)
          +
        • +
        + + + +
          +
        • +

          SVGIcon

          +
          public SVGIcon​(javafx.scene.shape.SVGPath svgPath)
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          setSVG

          +
          public void setSVG​(javafx.scene.shape.SVGPath svgPath)
          +
        • +
        + + + +
          +
        • +

          hasPath

          +
          public boolean hasPath()
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controls/UnfocusedButton.html b/doc/0.1.4/en_public/bitchanger/gui/controls/UnfocusedButton.html new file mode 100644 index 0000000..2cf3504 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controls/UnfocusedButton.html @@ -0,0 +1,534 @@ + + + + + +UnfocusedButton + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class UnfocusedButton

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • javafx.scene.Node
      • +
      • +
          +
        • javafx.scene.Parent
        • +
        • +
            +
          • javafx.scene.layout.Region
          • +
          • +
              +
            • javafx.scene.control.Control
            • +
            • +
                +
              • javafx.scene.control.Labeled
              • +
              • +
                  +
                • javafx.scene.control.ButtonBase
                • +
                • +
                    +
                  • javafx.scene.control.Button
                  • +
                  • +
                      +
                    • bitchanger.gui.controls.UnfocusedButton
                    • +
                    +
                  • +
                  +
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      javafx.css.Styleable, javafx.event.EventTarget, javafx.scene.control.Skinnable
      +
      +
      +
      Direct Known Subclasses:
      +
      ValueButton
      +
      +
      +
      public class UnfocusedButton
      +extends javafx.scene.control.Button
      +
      Button that does not get focus by clicking and has a rectangle without rounded corners as basic form.
      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Summary

        + + + + + + + + + + + + +
        Fields 
        Modifier and TypeFieldDescription
        static doubleDEFAULT_GRAPHIC_SCALE_FACTOR 
        +
          +
        • + + +

          Fields inherited from class javafx.scene.layout.Region

          +USE_COMPUTED_SIZE, USE_PREF_SIZE
        • +
        +
          +
        • + + +

          Fields inherited from class javafx.scene.Node

          +BASELINE_OFFSET_SAME_AS_HEIGHT
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + + + + + + + + + + + + + +
        Constructors 
        ConstructorDescription
        UnfocusedButton() +
        Creates an UnfocusedButton with an empty string as label
        +
        UnfocusedButton​(String text) +
        Creates an UnfocusedButton with a specific string as label
        +
        UnfocusedButton​(String text, + javafx.scene.Node graphic) +
        Creates an UnfocusedButton with a specific string and an icon as label
        +
        UnfocusedButton​(javafx.scene.Node graphic) 
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethodDescription
        voidsetGraphicScaleFactor​(Double factor) 
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Button

          +cancelButtonProperty, createDefaultSkin, defaultButtonProperty, fire, isCancelButton, isDefaultButton, setCancelButton, setDefaultButton
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.ButtonBase

          +arm, armedProperty, disarm, executeAccessibleAction, getOnAction, isArmed, onActionProperty, setOnAction
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Labeled

          +alignmentProperty, contentDisplayProperty, ellipsisStringProperty, fontProperty, getAlignment, getClassCssMetaData, getContentBias, getContentDisplay, getControlCssMetaData, getEllipsisString, getFont, getGraphic, getGraphicTextGap, getInitialAlignment, getLabelPadding, getLineSpacing, getText, getTextAlignment, getTextFill, getTextOverrun, graphicProperty, graphicTextGapProperty, isMnemonicParsing, isUnderline, isWrapText, labelPaddingProperty, lineSpacingProperty, mnemonicParsingProperty, setAlignment, setContentDisplay, setEllipsisString, setFont, setGraphic, setGraphicTextGap, setLineSpacing, setMnemonicParsing, setText, setTextAlignment, setTextFill, setTextOverrun, setUnderline, setWrapText, textAlignmentProperty, textFillProperty, textOverrunProperty, textProperty, toString, underlineProperty, wrapTextProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Control

          +computeMaxHeight, computeMaxWidth, computeMinHeight, computeMinWidth, computePrefHeight, computePrefWidth, contextMenuProperty, getBaselineOffset, getContextMenu, getCssMetaData, getInitialFocusTraversable, getSkin, getTooltip, isResizable, layoutChildren, queryAccessibleAttribute, setContextMenu, setSkin, setTooltip, skinProperty, tooltipProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.layout.Region

          +backgroundProperty, borderProperty, cacheShapeProperty, centerShapeProperty, getBackground, getBorder, getHeight, getInsets, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getOpaqueInsets, getPadding, getPrefHeight, getPrefWidth, getShape, getUserAgentStylesheet, getWidth, heightProperty, insetsProperty, isCacheShape, isCenterShape, isScaleShape, isSnapToPixel, layoutInArea, layoutInArea, layoutInArea, layoutInArea, maxHeight, maxHeightProperty, maxWidth, maxWidthProperty, minHeight, minHeightProperty, minWidth, minWidthProperty, opaqueInsetsProperty, paddingProperty, positionInArea, positionInArea, prefHeight, prefHeightProperty, prefWidth, prefWidthProperty, resize, scaleShapeProperty, setBackground, setBorder, setCacheShape, setCenterShape, setHeight, setMaxHeight, setMaxSize, setMaxWidth, setMinHeight, setMinSize, setMinWidth, setOpaqueInsets, setPadding, setPrefHeight, setPrefSize, setPrefWidth, setScaleShape, setShape, setSnapToPixel, setWidth, shapeProperty, snappedBottomInset, snappedLeftInset, snappedRightInset, snappedTopInset, snapPosition, snapPositionX, snapPositionY, snapSize, snapSizeX, snapSizeY, snapSpace, snapSpaceX, snapSpaceY, snapToPixelProperty, widthProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Parent

          +getChildren, getChildrenUnmodifiable, getManagedChildren, getStylesheets, isNeedsLayout, layout, lookup, needsLayoutProperty, requestLayout, requestParentLayout, setNeedsLayout, updateBounds
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Node

          +accessibleHelpProperty, accessibleRoleDescriptionProperty, accessibleRoleProperty, accessibleTextProperty, addEventFilter, addEventHandler, applyCss, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen, contains, contains, cursorProperty, depthTestProperty, disabledProperty, disableProperty, effectiveNodeOrientationProperty, effectProperty, eventDispatcherProperty, fireEvent, focusedProperty, focusTraversableProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInitialCursor, getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY, getLocalToParentTransform, getLocalToSceneTransform, getNodeOrientation, getOnContextMenuRequested, getOnDragDetected, getOnDragDone, getOnDragDropped, getOnDragEntered, getOnDragExited, getOnDragOver, getOnInputMethodTextChanged, getOnKeyPressed, getOnKeyReleased, getOnKeyTyped, getOnMouseClicked, getOnMouseDragEntered, getOnMouseDragExited, getOnMouseDragged, getOnMouseDragOver, getOnMouseDragReleased, getOnMouseEntered, getOnMouseExited, getOnMouseMoved, getOnMousePressed, getOnMouseReleased, getOnRotate, getOnRotationFinished, getOnRotationStarted, getOnScroll, getOnScrollFinished, getOnScrollStarted, getOnSwipeDown, getOnSwipeLeft, getOnSwipeRight, getOnSwipeUp, getOnTouchMoved, getOnTouchPressed, getOnTouchReleased, getOnTouchStationary, getOnZoom, getOnZoomFinished, getOnZoomStarted, getOpacity, getParent, getProperties, getPseudoClassStates, getRotate, getRotationAxis, getScaleX, getScaleY, getScaleZ, getScene, getStyle, getStyleableParent, getStyleClass, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getTypeSelector, getUserData, getViewOrder, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, isVisible, layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent, localToParent, localToParent, localToParent, localToParent, localToParentTransformProperty, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToSceneTransformProperty, localToScreen, localToScreen, localToScreen, localToScreen, localToScreen, lookupAll, managedProperty, mouseTransparentProperty, nodeOrientationProperty, notifyAccessibleAttributeChanged, onContextMenuRequestedProperty, onDragDetectedProperty, onDragDoneProperty, onDragDroppedProperty, onDragEnteredProperty, onDragExitedProperty, onDragOverProperty, onInputMethodTextChangedProperty, onKeyPressedProperty, onKeyReleasedProperty, onKeyTypedProperty, onMouseClickedProperty, onMouseDragEnteredProperty, onMouseDragExitedProperty, onMouseDraggedProperty, onMouseDragOverProperty, onMouseDragReleasedProperty, onMouseEnteredProperty, onMouseExitedProperty, onMouseMovedProperty, onMousePressedProperty, onMouseReleasedProperty, onRotateProperty, onRotationFinishedProperty, onRotationStartedProperty, onScrollFinishedProperty, onScrollProperty, onScrollStartedProperty, onSwipeDownProperty, onSwipeLeftProperty, onSwipeRightProperty, onSwipeUpProperty, onTouchMovedProperty, onTouchPressedProperty, onTouchReleasedProperty, onTouchStationaryProperty, onZoomFinishedProperty, onZoomProperty, onZoomStartedProperty, opacityProperty, parentProperty, parentToLocal, parentToLocal, parentToLocal, parentToLocal, parentToLocal, pickOnBoundsProperty, pressedProperty, pseudoClassStateChanged, relocate, removeEventFilter, removeEventHandler, requestFocus, resizeRelocate, rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty, scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, screenToLocal, screenToLocal, screenToLocal, setAccessibleHelp, setAccessibleRole, setAccessibleRoleDescription, setAccessibleText, setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest, setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler, setFocused, setFocusTraversable, setHover, setId, setInputMethodRequests, setLayoutX, setLayoutY, setManaged, setMouseTransparent, setNodeOrientation, setOnContextMenuRequested, setOnDragDetected, setOnDragDone, setOnDragDropped, setOnDragEntered, setOnDragExited, setOnDragOver, setOnInputMethodTextChanged, setOnKeyPressed, setOnKeyReleased, setOnKeyTyped, setOnMouseClicked, setOnMouseDragEntered, setOnMouseDragExited, setOnMouseDragged, setOnMouseDragOver, setOnMouseDragReleased, setOnMouseEntered, setOnMouseExited, setOnMouseMoved, setOnMousePressed, setOnMouseReleased, setOnRotate, setOnRotationFinished, setOnRotationStarted, setOnScroll, setOnScrollFinished, setOnScrollStarted, setOnSwipeDown, setOnSwipeLeft, setOnSwipeRight, setOnSwipeUp, setOnTouchMoved, setOnTouchPressed, setOnTouchReleased, setOnTouchStationary, setOnZoom, setOnZoomFinished, setOnZoomStarted, setOpacity, setPickOnBounds, setPressed, setRotate, setRotationAxis, setScaleX, setScaleY, setScaleZ, setStyle, setTranslateX, setTranslateY, setTranslateZ, setUserData, setViewOrder, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, translateXProperty, translateYProperty, translateZProperty, usesMirroring, viewOrderProperty, visibleProperty
        • +
        + +
          +
        • + + +

          Methods inherited from interface javafx.css.Styleable

          +getStyleableNode
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          DEFAULT_GRAPHIC_SCALE_FACTOR

          +
          public static final double DEFAULT_GRAPHIC_SCALE_FACTOR
          +
          +
          See Also:
          +
          Constant Field Values
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          UnfocusedButton

          +
          public UnfocusedButton()
          +
          Creates an UnfocusedButton with an empty string as label
          +
        • +
        + + + +
          +
        • +

          UnfocusedButton

          +
          public UnfocusedButton​(javafx.scene.Node graphic)
          +
        • +
        + + + +
          +
        • +

          UnfocusedButton

          +
          public UnfocusedButton​(String text,
          +                       javafx.scene.Node graphic)
          +
          Creates an UnfocusedButton with a specific string and an icon as label
          +
          +
          Parameters:
          +
          text - Text for the label of this button
          +
          graphic - Icon for the label of this button
          +
          +
        • +
        + + + +
          +
        • +

          UnfocusedButton

          +
          public UnfocusedButton​(String text)
          +
          Creates an UnfocusedButton with a specific string as label
          +
          +
          Parameters:
          +
          text - Text for the label of this button
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          setGraphicScaleFactor

          +
          public void setGraphicScaleFactor​(Double factor)
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controls/ValueButton.html b/doc/0.1.4/en_public/bitchanger/gui/controls/ValueButton.html new file mode 100644 index 0000000..77194e7 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controls/ValueButton.html @@ -0,0 +1,531 @@ + + + + + +ValueButton + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class ValueButton

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • javafx.scene.Node
      • +
      • +
          +
        • javafx.scene.Parent
        • +
        • +
            +
          • javafx.scene.layout.Region
          • +
          • +
              +
            • javafx.scene.control.Control
            • +
            • +
                +
              • javafx.scene.control.Labeled
              • +
              • + +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      javafx.css.Styleable, javafx.event.EventTarget, javafx.scene.control.Skinnable
      +
      +
      +
      public class ValueButton
      +extends UnfocusedButton
      +
      UnfocusedButton with an extra Property to adjust the base. + If the value, that gets represented by this button, is not available for the chosen base, + this button disables itself. If the base is changing and the value agrees to it, + this button gets activated automatically.
      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Summary

        + +
          +
        • + + +

          Fields inherited from class javafx.scene.layout.Region

          +USE_COMPUTED_SIZE, USE_PREF_SIZE
        • +
        +
          +
        • + + +

          Fields inherited from class javafx.scene.Node

          +BASELINE_OFFSET_SAME_AS_HEIGHT
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + + + + + + + + + +
        Constructors 
        ConstructorDescription
        ValueButton() +
        Creates a ValueButton with an empty string as caption
        +
        ValueButton​(String text) +
        Creates a ValueButton with a specific string as caption
        +
        ValueButton​(String text, + javafx.scene.Node graphic) +
        Creates a ValueButton with a specific string and an icon as caption
        +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethodDescription
        javafx.beans.property.IntegerPropertygetBaseProperty() +
        Returns the value of the baseProperty
        +
        voidsetBase​(int base) +
        Sets the value of the base
        +
        + +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Button

          +cancelButtonProperty, createDefaultSkin, defaultButtonProperty, fire, isCancelButton, isDefaultButton, setCancelButton, setDefaultButton
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.ButtonBase

          +arm, armedProperty, disarm, executeAccessibleAction, getOnAction, isArmed, onActionProperty, setOnAction
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Labeled

          +alignmentProperty, contentDisplayProperty, ellipsisStringProperty, fontProperty, getAlignment, getClassCssMetaData, getContentBias, getContentDisplay, getControlCssMetaData, getEllipsisString, getFont, getGraphic, getGraphicTextGap, getInitialAlignment, getLabelPadding, getLineSpacing, getText, getTextAlignment, getTextFill, getTextOverrun, graphicProperty, graphicTextGapProperty, isMnemonicParsing, isUnderline, isWrapText, labelPaddingProperty, lineSpacingProperty, mnemonicParsingProperty, setAlignment, setContentDisplay, setEllipsisString, setFont, setGraphic, setGraphicTextGap, setLineSpacing, setMnemonicParsing, setText, setTextAlignment, setTextFill, setTextOverrun, setUnderline, setWrapText, textAlignmentProperty, textFillProperty, textOverrunProperty, textProperty, toString, underlineProperty, wrapTextProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Control

          +computeMaxHeight, computeMaxWidth, computeMinHeight, computeMinWidth, computePrefHeight, computePrefWidth, contextMenuProperty, getBaselineOffset, getContextMenu, getCssMetaData, getInitialFocusTraversable, getSkin, getTooltip, isResizable, layoutChildren, queryAccessibleAttribute, setContextMenu, setSkin, setTooltip, skinProperty, tooltipProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.layout.Region

          +backgroundProperty, borderProperty, cacheShapeProperty, centerShapeProperty, getBackground, getBorder, getHeight, getInsets, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getOpaqueInsets, getPadding, getPrefHeight, getPrefWidth, getShape, getUserAgentStylesheet, getWidth, heightProperty, insetsProperty, isCacheShape, isCenterShape, isScaleShape, isSnapToPixel, layoutInArea, layoutInArea, layoutInArea, layoutInArea, maxHeight, maxHeightProperty, maxWidth, maxWidthProperty, minHeight, minHeightProperty, minWidth, minWidthProperty, opaqueInsetsProperty, paddingProperty, positionInArea, positionInArea, prefHeight, prefHeightProperty, prefWidth, prefWidthProperty, resize, scaleShapeProperty, setBackground, setBorder, setCacheShape, setCenterShape, setHeight, setMaxHeight, setMaxSize, setMaxWidth, setMinHeight, setMinSize, setMinWidth, setOpaqueInsets, setPadding, setPrefHeight, setPrefSize, setPrefWidth, setScaleShape, setShape, setSnapToPixel, setWidth, shapeProperty, snappedBottomInset, snappedLeftInset, snappedRightInset, snappedTopInset, snapPosition, snapPositionX, snapPositionY, snapSize, snapSizeX, snapSizeY, snapSpace, snapSpaceX, snapSpaceY, snapToPixelProperty, widthProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Parent

          +getChildren, getChildrenUnmodifiable, getManagedChildren, getStylesheets, isNeedsLayout, layout, lookup, needsLayoutProperty, requestLayout, requestParentLayout, setNeedsLayout, updateBounds
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Node

          +accessibleHelpProperty, accessibleRoleDescriptionProperty, accessibleRoleProperty, accessibleTextProperty, addEventFilter, addEventHandler, applyCss, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen, contains, contains, cursorProperty, depthTestProperty, disabledProperty, disableProperty, effectiveNodeOrientationProperty, effectProperty, eventDispatcherProperty, fireEvent, focusedProperty, focusTraversableProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInitialCursor, getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY, getLocalToParentTransform, getLocalToSceneTransform, getNodeOrientation, getOnContextMenuRequested, getOnDragDetected, getOnDragDone, getOnDragDropped, getOnDragEntered, getOnDragExited, getOnDragOver, getOnInputMethodTextChanged, getOnKeyPressed, getOnKeyReleased, getOnKeyTyped, getOnMouseClicked, getOnMouseDragEntered, getOnMouseDragExited, getOnMouseDragged, getOnMouseDragOver, getOnMouseDragReleased, getOnMouseEntered, getOnMouseExited, getOnMouseMoved, getOnMousePressed, getOnMouseReleased, getOnRotate, getOnRotationFinished, getOnRotationStarted, getOnScroll, getOnScrollFinished, getOnScrollStarted, getOnSwipeDown, getOnSwipeLeft, getOnSwipeRight, getOnSwipeUp, getOnTouchMoved, getOnTouchPressed, getOnTouchReleased, getOnTouchStationary, getOnZoom, getOnZoomFinished, getOnZoomStarted, getOpacity, getParent, getProperties, getPseudoClassStates, getRotate, getRotationAxis, getScaleX, getScaleY, getScaleZ, getScene, getStyle, getStyleableParent, getStyleClass, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getTypeSelector, getUserData, getViewOrder, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, isVisible, layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent, localToParent, localToParent, localToParent, localToParent, localToParentTransformProperty, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToSceneTransformProperty, localToScreen, localToScreen, localToScreen, localToScreen, localToScreen, lookupAll, managedProperty, mouseTransparentProperty, nodeOrientationProperty, notifyAccessibleAttributeChanged, onContextMenuRequestedProperty, onDragDetectedProperty, onDragDoneProperty, onDragDroppedProperty, onDragEnteredProperty, onDragExitedProperty, onDragOverProperty, onInputMethodTextChangedProperty, onKeyPressedProperty, onKeyReleasedProperty, onKeyTypedProperty, onMouseClickedProperty, onMouseDragEnteredProperty, onMouseDragExitedProperty, onMouseDraggedProperty, onMouseDragOverProperty, onMouseDragReleasedProperty, onMouseEnteredProperty, onMouseExitedProperty, onMouseMovedProperty, onMousePressedProperty, onMouseReleasedProperty, onRotateProperty, onRotationFinishedProperty, onRotationStartedProperty, onScrollFinishedProperty, onScrollProperty, onScrollStartedProperty, onSwipeDownProperty, onSwipeLeftProperty, onSwipeRightProperty, onSwipeUpProperty, onTouchMovedProperty, onTouchPressedProperty, onTouchReleasedProperty, onTouchStationaryProperty, onZoomFinishedProperty, onZoomProperty, onZoomStartedProperty, opacityProperty, parentProperty, parentToLocal, parentToLocal, parentToLocal, parentToLocal, parentToLocal, pickOnBoundsProperty, pressedProperty, pseudoClassStateChanged, relocate, removeEventFilter, removeEventHandler, requestFocus, resizeRelocate, rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty, scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, screenToLocal, screenToLocal, screenToLocal, setAccessibleHelp, setAccessibleRole, setAccessibleRoleDescription, setAccessibleText, setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest, setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler, setFocused, setFocusTraversable, setHover, setId, setInputMethodRequests, setLayoutX, setLayoutY, setManaged, setMouseTransparent, setNodeOrientation, setOnContextMenuRequested, setOnDragDetected, setOnDragDone, setOnDragDropped, setOnDragEntered, setOnDragExited, setOnDragOver, setOnInputMethodTextChanged, setOnKeyPressed, setOnKeyReleased, setOnKeyTyped, setOnMouseClicked, setOnMouseDragEntered, setOnMouseDragExited, setOnMouseDragged, setOnMouseDragOver, setOnMouseDragReleased, setOnMouseEntered, setOnMouseExited, setOnMouseMoved, setOnMousePressed, setOnMouseReleased, setOnRotate, setOnRotationFinished, setOnRotationStarted, setOnScroll, setOnScrollFinished, setOnScrollStarted, setOnSwipeDown, setOnSwipeLeft, setOnSwipeRight, setOnSwipeUp, setOnTouchMoved, setOnTouchPressed, setOnTouchReleased, setOnTouchStationary, setOnZoom, setOnZoomFinished, setOnZoomStarted, setOpacity, setPickOnBounds, setPressed, setRotate, setRotationAxis, setScaleX, setScaleY, setScaleZ, setStyle, setTranslateX, setTranslateY, setTranslateZ, setUserData, setViewOrder, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, translateXProperty, translateYProperty, translateZProperty, usesMirroring, viewOrderProperty, visibleProperty
        • +
        + +
          +
        • + + +

          Methods inherited from interface javafx.css.Styleable

          +getStyleableNode
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ValueButton

          +
          public ValueButton()
          +
          Creates a ValueButton with an empty string as caption
          +
        • +
        + + + +
          +
        • +

          ValueButton

          +
          public ValueButton​(String text,
          +                   javafx.scene.Node graphic)
          +
          Creates a ValueButton with a specific string and an icon as caption
          +
          +
          Parameters:
          +
          text - Text for the caption if this button
          +
          graphic - Icon for the caption if this button
          +
          +
        • +
        + + + +
          +
        • +

          ValueButton

          +
          public ValueButton​(String text)
          +
          Creates a ValueButton with a specific string as caption
          +
          +
          Parameters:
          +
          text - Text for the caption of this button
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          setBase

          +
          public void setBase​(int base)
          +
          Sets the value of the base
          +
          +
          Parameters:
          +
          base - new base
          +
          +
        • +
        + + + +
          +
        • +

          getBaseProperty

          +
          public javafx.beans.property.IntegerProperty getBaseProperty()
          +
          Returns the value of the baseProperty
          +
          +
          Returns:
          +
          baseProperty of this ValueButton
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controls/ValueField.html b/doc/0.1.4/en_public/bitchanger/gui/controls/ValueField.html new file mode 100644 index 0000000..4527f2f --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controls/ValueField.html @@ -0,0 +1,598 @@ + + + + + +ValueField + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class ValueField

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • javafx.scene.Node
      • +
      • +
          +
        • javafx.scene.Parent
        • +
        • +
            +
          • javafx.scene.layout.Region
          • +
          • +
              +
            • javafx.scene.control.Control
            • +
            • +
                +
              • javafx.scene.control.TextInputControl
              • +
              • +
                  +
                • javafx.scene.control.TextField
                • +
                • +
                    +
                  • bitchanger.gui.controls.ValueField
                  • +
                  +
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      javafx.css.Styleable, javafx.event.EventTarget, javafx.scene.control.Skinnable
      +
      +
      +
      public class ValueField
      +extends javafx.scene.control.TextField
      +
      Text field in which a number of a certain numeral system can be entered. + Only characters that are available in this selected numeral system can be entered. + The only exception is the space, that can be used as thousands separator for example. + The current base gets set by the baseProperty. + The basic form is a rectangle without rounded corners. + +

      + As aditional function the input is split into blocks, if the chosen numeral system is the binary system. +

      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Nested Class Summary

        +
          +
        • + + +

          Nested classes/interfaces inherited from class javafx.scene.control.TextInputControl

          +javafx.scene.control.TextInputControl.Content
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Field Summary

        +
          +
        • + + +

          Fields inherited from class javafx.scene.control.TextField

          +DEFAULT_PREF_COLUMN_COUNT
        • +
        +
          +
        • + + +

          Fields inherited from class javafx.scene.layout.Region

          +USE_COMPUTED_SIZE, USE_PREF_SIZE
        • +
        +
          +
        • + + +

          Fields inherited from class javafx.scene.Node

          +BASELINE_OFFSET_SAME_AS_HEIGHT
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Summary

        + + + + + + + + + + + + + + + + + + + + + + +
        Constructors 
        ConstructorDescription
        ValueField() +
        Creates a new ValueField with empty text and the base 10
        +
        ValueField​(int base) +
        Creates a new ValueFiled with an empty text and the committed base
        +
        ValueField​(String text) +
        Creates a new ValueField that contains the committed text and the base 10
        +
        ValueField​(String text, + int base) +
        Creates a new ValueField that contains the committed text and the committed base
        +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Instance Methods Concrete Methods 
        Modifier and TypeMethodDescription
        intgetBase() +
        Returns the value of baseProperty
        +
        javafx.beans.property.IntegerPropertygetBaseProperty() +
        Returns the baseProperty of this ValueField
        +
        voidsetBase​(int base) +
        Sets the value of baseProperty
        +
        voidstoreCaretPosition​(javafx.beans.value.ObservableValue<? extends Number> observable, + Number oldValue, + Number newValue) +
        Stores the last known CaretPosition to reset it.
        +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.TextField

          +alignmentProperty, createDefaultSkin, getAlignment, getCharacters, getClassCssMetaData, getControlCssMetaData, getOnAction, getPrefColumnCount, onActionProperty, prefColumnCountProperty, setAlignment, setOnAction, setPrefColumnCount
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.TextInputControl

          +anchorProperty, appendText, backward, cancelEdit, caretPositionProperty, clear, commitValue, copy, cut, deleteNextChar, deletePreviousChar, deleteText, deleteText, deselect, editableProperty, end, endOfNextWord, executeAccessibleAction, extendSelection, fontProperty, forward, getAnchor, getCaretPosition, getContent, getFont, getLength, getPromptText, getSelectedText, getSelection, getText, getText, getTextFormatter, home, insertText, isEditable, isRedoable, isUndoable, lengthProperty, nextWord, paste, positionCaret, previousWord, promptTextProperty, queryAccessibleAttribute, redo, redoableProperty, replaceSelection, replaceText, replaceText, selectAll, selectBackward, selectedTextProperty, selectEnd, selectEndOfNextWord, selectForward, selectHome, selectionProperty, selectNextWord, selectPositionCaret, selectPreviousWord, selectRange, setEditable, setFont, setPromptText, setText, setTextFormatter, textFormatterProperty, textProperty, undo, undoableProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.control.Control

          +computeMaxHeight, computeMaxWidth, computeMinHeight, computeMinWidth, computePrefHeight, computePrefWidth, contextMenuProperty, getBaselineOffset, getContextMenu, getCssMetaData, getInitialFocusTraversable, getSkin, getTooltip, isResizable, layoutChildren, setContextMenu, setSkin, setTooltip, skinProperty, tooltipProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.layout.Region

          +backgroundProperty, borderProperty, cacheShapeProperty, centerShapeProperty, getBackground, getBorder, getHeight, getInsets, getMaxHeight, getMaxWidth, getMinHeight, getMinWidth, getOpaqueInsets, getPadding, getPrefHeight, getPrefWidth, getShape, getUserAgentStylesheet, getWidth, heightProperty, insetsProperty, isCacheShape, isCenterShape, isScaleShape, isSnapToPixel, layoutInArea, layoutInArea, layoutInArea, layoutInArea, maxHeight, maxHeightProperty, maxWidth, maxWidthProperty, minHeight, minHeightProperty, minWidth, minWidthProperty, opaqueInsetsProperty, paddingProperty, positionInArea, positionInArea, prefHeight, prefHeightProperty, prefWidth, prefWidthProperty, resize, scaleShapeProperty, setBackground, setBorder, setCacheShape, setCenterShape, setHeight, setMaxHeight, setMaxSize, setMaxWidth, setMinHeight, setMinSize, setMinWidth, setOpaqueInsets, setPadding, setPrefHeight, setPrefSize, setPrefWidth, setScaleShape, setShape, setSnapToPixel, setWidth, shapeProperty, snappedBottomInset, snappedLeftInset, snappedRightInset, snappedTopInset, snapPosition, snapPositionX, snapPositionY, snapSize, snapSizeX, snapSizeY, snapSpace, snapSpaceX, snapSpaceY, snapToPixelProperty, widthProperty
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Parent

          +getChildren, getChildrenUnmodifiable, getManagedChildren, getStylesheets, isNeedsLayout, layout, lookup, needsLayoutProperty, requestLayout, requestParentLayout, setNeedsLayout, updateBounds
        • +
        +
          +
        • + + +

          Methods inherited from class javafx.scene.Node

          +accessibleHelpProperty, accessibleRoleDescriptionProperty, accessibleRoleProperty, accessibleTextProperty, addEventFilter, addEventHandler, applyCss, autosize, blendModeProperty, boundsInLocalProperty, boundsInParentProperty, buildEventDispatchChain, cacheHintProperty, cacheProperty, clipProperty, computeAreaInScreen, contains, contains, cursorProperty, depthTestProperty, disabledProperty, disableProperty, effectiveNodeOrientationProperty, effectProperty, eventDispatcherProperty, fireEvent, focusedProperty, focusTraversableProperty, getAccessibleHelp, getAccessibleRole, getAccessibleRoleDescription, getAccessibleText, getBlendMode, getBoundsInLocal, getBoundsInParent, getCacheHint, getClip, getContentBias, getCursor, getDepthTest, getEffect, getEffectiveNodeOrientation, getEventDispatcher, getId, getInitialCursor, getInputMethodRequests, getLayoutBounds, getLayoutX, getLayoutY, getLocalToParentTransform, getLocalToSceneTransform, getNodeOrientation, getOnContextMenuRequested, getOnDragDetected, getOnDragDone, getOnDragDropped, getOnDragEntered, getOnDragExited, getOnDragOver, getOnInputMethodTextChanged, getOnKeyPressed, getOnKeyReleased, getOnKeyTyped, getOnMouseClicked, getOnMouseDragEntered, getOnMouseDragExited, getOnMouseDragged, getOnMouseDragOver, getOnMouseDragReleased, getOnMouseEntered, getOnMouseExited, getOnMouseMoved, getOnMousePressed, getOnMouseReleased, getOnRotate, getOnRotationFinished, getOnRotationStarted, getOnScroll, getOnScrollFinished, getOnScrollStarted, getOnSwipeDown, getOnSwipeLeft, getOnSwipeRight, getOnSwipeUp, getOnTouchMoved, getOnTouchPressed, getOnTouchReleased, getOnTouchStationary, getOnZoom, getOnZoomFinished, getOnZoomStarted, getOpacity, getParent, getProperties, getPseudoClassStates, getRotate, getRotationAxis, getScaleX, getScaleY, getScaleZ, getScene, getStyle, getStyleableParent, getStyleClass, getTransforms, getTranslateX, getTranslateY, getTranslateZ, getTypeSelector, getUserData, getViewOrder, hasProperties, hoverProperty, idProperty, inputMethodRequestsProperty, intersects, intersects, isCache, isDisable, isDisabled, isFocused, isFocusTraversable, isHover, isManaged, isMouseTransparent, isPickOnBounds, isPressed, isVisible, layoutBoundsProperty, layoutXProperty, layoutYProperty, localToParent, localToParent, localToParent, localToParent, localToParent, localToParentTransformProperty, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToScene, localToSceneTransformProperty, localToScreen, localToScreen, localToScreen, localToScreen, localToScreen, lookupAll, managedProperty, mouseTransparentProperty, nodeOrientationProperty, notifyAccessibleAttributeChanged, onContextMenuRequestedProperty, onDragDetectedProperty, onDragDoneProperty, onDragDroppedProperty, onDragEnteredProperty, onDragExitedProperty, onDragOverProperty, onInputMethodTextChangedProperty, onKeyPressedProperty, onKeyReleasedProperty, onKeyTypedProperty, onMouseClickedProperty, onMouseDragEnteredProperty, onMouseDragExitedProperty, onMouseDraggedProperty, onMouseDragOverProperty, onMouseDragReleasedProperty, onMouseEnteredProperty, onMouseExitedProperty, onMouseMovedProperty, onMousePressedProperty, onMouseReleasedProperty, onRotateProperty, onRotationFinishedProperty, onRotationStartedProperty, onScrollFinishedProperty, onScrollProperty, onScrollStartedProperty, onSwipeDownProperty, onSwipeLeftProperty, onSwipeRightProperty, onSwipeUpProperty, onTouchMovedProperty, onTouchPressedProperty, onTouchReleasedProperty, onTouchStationaryProperty, onZoomFinishedProperty, onZoomProperty, onZoomStartedProperty, opacityProperty, parentProperty, parentToLocal, parentToLocal, parentToLocal, parentToLocal, parentToLocal, pickOnBoundsProperty, pressedProperty, pseudoClassStateChanged, relocate, removeEventFilter, removeEventHandler, requestFocus, resizeRelocate, rotateProperty, rotationAxisProperty, scaleXProperty, scaleYProperty, scaleZProperty, sceneProperty, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, sceneToLocal, screenToLocal, screenToLocal, screenToLocal, setAccessibleHelp, setAccessibleRole, setAccessibleRoleDescription, setAccessibleText, setBlendMode, setCache, setCacheHint, setClip, setCursor, setDepthTest, setDisable, setDisabled, setEffect, setEventDispatcher, setEventHandler, setFocused, setFocusTraversable, setHover, setId, setInputMethodRequests, setLayoutX, setLayoutY, setManaged, setMouseTransparent, setNodeOrientation, setOnContextMenuRequested, setOnDragDetected, setOnDragDone, setOnDragDropped, setOnDragEntered, setOnDragExited, setOnDragOver, setOnInputMethodTextChanged, setOnKeyPressed, setOnKeyReleased, setOnKeyTyped, setOnMouseClicked, setOnMouseDragEntered, setOnMouseDragExited, setOnMouseDragged, setOnMouseDragOver, setOnMouseDragReleased, setOnMouseEntered, setOnMouseExited, setOnMouseMoved, setOnMousePressed, setOnMouseReleased, setOnRotate, setOnRotationFinished, setOnRotationStarted, setOnScroll, setOnScrollFinished, setOnScrollStarted, setOnSwipeDown, setOnSwipeLeft, setOnSwipeRight, setOnSwipeUp, setOnTouchMoved, setOnTouchPressed, setOnTouchReleased, setOnTouchStationary, setOnZoom, setOnZoomFinished, setOnZoomStarted, setOpacity, setPickOnBounds, setPressed, setRotate, setRotationAxis, setScaleX, setScaleY, setScaleZ, setStyle, setTranslateX, setTranslateY, setTranslateZ, setUserData, setViewOrder, setVisible, snapshot, snapshot, startDragAndDrop, startFullDrag, styleProperty, toBack, toFront, toString, translateXProperty, translateYProperty, translateZProperty, usesMirroring, viewOrderProperty, visibleProperty
        • +
        + +
          +
        • + + +

          Methods inherited from interface javafx.css.Styleable

          +getStyleableNode
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          ValueField

          +
          public ValueField()
          +
          Creates a new ValueField with empty text and the base 10
          +
        • +
        + + + +
          +
        • +

          ValueField

          +
          public ValueField​(String text)
          +
          Creates a new ValueField that contains the committed text and the base 10
          +
          +
          Parameters:
          +
          text - Text for this text field
          +
          +
        • +
        + + + +
          +
        • +

          ValueField

          +
          public ValueField​(int base)
          +
          Creates a new ValueFiled with an empty text and the committed base
          +
          +
          Parameters:
          +
          base - Value for baseProperty
          +
          +
        • +
        + + + +
          +
        • +

          ValueField

          +
          public ValueField​(String text,
          +                  int base)
          +
          Creates a new ValueField that contains the committed text and the committed base
          +
          +
          Parameters:
          +
          text - Text for this text field
          +
          base - Value for baseProperty
          +
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          setBase

          +
          public void setBase​(int base)
          +
          Sets the value of baseProperty
          +
          +
          Parameters:
          +
          base - new base
          +
          +
        • +
        + + + + + + + +
          +
        • +

          getBaseProperty

          +
          public javafx.beans.property.IntegerProperty getBaseProperty()
          +
          Returns the baseProperty of this ValueField
          +
          +
          Returns:
          +
          baseProperty of this ValueFields
          +
          +
        • +
        + + + +
          +
        • +

          storeCaretPosition

          +
          public void storeCaretPosition​(javafx.beans.value.ObservableValue<? extends Number> observable,
          +                               Number oldValue,
          +                               Number newValue)
          +
          Stores the last known CaretPosition to reset it. + Can be used as method reference for a ChangeListener.
          +
          +
          Parameters:
          +
          observable - ObservableValue, which value is changing
          +
          oldValue - old value
          +
          newValue - new value
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controls/class-use/AlphaNumGrid.html b/doc/0.1.4/en_public/bitchanger/gui/controls/class-use/AlphaNumGrid.html new file mode 100644 index 0000000..e5e5e30 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controls/class-use/AlphaNumGrid.html @@ -0,0 +1,191 @@ + + + + + +Uses of Class bitchanger.gui.controls.AlphaNumGrid + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controls.AlphaNumGrid

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controls/class-use/AlphaNumKeys.html b/doc/0.1.4/en_public/bitchanger/gui/controls/class-use/AlphaNumKeys.html new file mode 100644 index 0000000..4af8740 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controls/class-use/AlphaNumKeys.html @@ -0,0 +1,224 @@ + + + + + +Uses of Class bitchanger.gui.controls.AlphaNumKeys + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controls.AlphaNumKeys

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controls/class-use/BaseSpinner.html b/doc/0.1.4/en_public/bitchanger/gui/controls/class-use/BaseSpinner.html new file mode 100644 index 0000000..fc99d5f --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controls/class-use/BaseSpinner.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controls.BaseSpinner + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controls.BaseSpinner

    +
    +
    No usage of bitchanger.gui.controls.BaseSpinner
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controls/class-use/BasicMenuBar.html b/doc/0.1.4/en_public/bitchanger/gui/controls/class-use/BasicMenuBar.html new file mode 100644 index 0000000..aa9e40d --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controls/class-use/BasicMenuBar.html @@ -0,0 +1,274 @@ + + + + + +Uses of Class bitchanger.gui.controls.BasicMenuBar + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controls.BasicMenuBar

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controls/class-use/ConverterMenuBar.html b/doc/0.1.4/en_public/bitchanger/gui/controls/class-use/ConverterMenuBar.html new file mode 100644 index 0000000..10002e7 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controls/class-use/ConverterMenuBar.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controls.ConverterMenuBar + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controls.ConverterMenuBar

    +
    +
    No usage of bitchanger.gui.controls.ConverterMenuBar
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controls/class-use/InformationDialog.InformationType.html b/doc/0.1.4/en_public/bitchanger/gui/controls/class-use/InformationDialog.InformationType.html new file mode 100644 index 0000000..bde53f5 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controls/class-use/InformationDialog.InformationType.html @@ -0,0 +1,218 @@ + + + + + +Uses of Class bitchanger.gui.controls.InformationDialog.InformationType + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controls.InformationDialog.InformationType

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controls/class-use/InformationDialog.html b/doc/0.1.4/en_public/bitchanger/gui/controls/class-use/InformationDialog.html new file mode 100644 index 0000000..c3ee392 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controls/class-use/InformationDialog.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controls.InformationDialog + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controls.InformationDialog

    +
    +
    No usage of bitchanger.gui.controls.InformationDialog
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controls/class-use/SVGIcon.html b/doc/0.1.4/en_public/bitchanger/gui/controls/class-use/SVGIcon.html new file mode 100644 index 0000000..bd6b21f --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controls/class-use/SVGIcon.html @@ -0,0 +1,237 @@ + + + + + +Uses of Class bitchanger.gui.controls.SVGIcon + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controls.SVGIcon

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controls/class-use/UnfocusedButton.html b/doc/0.1.4/en_public/bitchanger/gui/controls/class-use/UnfocusedButton.html new file mode 100644 index 0000000..4b19ac2 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controls/class-use/UnfocusedButton.html @@ -0,0 +1,197 @@ + + + + + +Uses of Class bitchanger.gui.controls.UnfocusedButton + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controls.UnfocusedButton

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controls/class-use/ValueButton.html b/doc/0.1.4/en_public/bitchanger/gui/controls/class-use/ValueButton.html new file mode 100644 index 0000000..9973d22 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controls/class-use/ValueButton.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controls.ValueButton + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controls.ValueButton

    +
    +
    No usage of bitchanger.gui.controls.ValueButton
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controls/class-use/ValueField.html b/doc/0.1.4/en_public/bitchanger/gui/controls/class-use/ValueField.html new file mode 100644 index 0000000..d46aead --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controls/class-use/ValueField.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.controls.ValueField + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.controls.ValueField

    +
    +
    No usage of bitchanger.gui.controls.ValueField
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controls/package-summary.html b/doc/0.1.4/en_public/bitchanger/gui/controls/package-summary.html new file mode 100644 index 0000000..5c65b72 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controls/package-summary.html @@ -0,0 +1,229 @@ + + + + + +bitchanger.gui.controls + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package bitchanger.gui.controls

    +
    +
    +
    + + +
    Allocates adjusted operating elements and functions for the user interface
    +
    + +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controls/package-tree.html b/doc/0.1.4/en_public/bitchanger/gui/controls/package-tree.html new file mode 100644 index 0000000..d0db8d8 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controls/package-tree.html @@ -0,0 +1,252 @@ + + + + + +bitchanger.gui.controls Class Hierarchy + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package bitchanger.gui.controls

    +Package Hierarchies: + +
    +
    +
    +

    Class Hierarchy

    +
      +
    • java.lang.Object +
        +
      • bitchanger.gui.controls.AlphaNumKeys (implements bitchanger.gui.controller.Controllable)
      • +
      • javafx.scene.control.Dialog<R> (implements javafx.event.EventTarget) + +
      • +
      • javafx.scene.Node (implements javafx.event.EventTarget, javafx.css.Styleable) +
          +
        • javafx.scene.Parent +
            +
          • javafx.scene.layout.Region +
              +
            • javafx.scene.control.Control (implements javafx.scene.control.Skinnable) +
                +
              • javafx.scene.control.Labeled +
                  +
                • javafx.scene.control.ButtonBase + +
                • +
                +
              • +
              • javafx.scene.control.MenuBar + +
              • +
              • javafx.scene.control.Spinner<T> + +
              • +
              • javafx.scene.control.TextInputControl +
                  +
                • javafx.scene.control.TextField + +
                • +
                +
              • +
              +
            • +
            +
          • +
          +
        • +
        • javafx.scene.shape.Shape +
            +
          • javafx.scene.shape.SVGPath +
              +
            • bitchanger.gui.controls.SVGIcon
            • +
            +
          • +
          +
        • +
        +
      • +
      +
    • +
    +
    +
    +

    Enum Hierarchy

    + +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/controls/package-use.html b/doc/0.1.4/en_public/bitchanger/gui/controls/package-use.html new file mode 100644 index 0000000..887b8c3 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/controls/package-use.html @@ -0,0 +1,279 @@ + + + + + +Uses of Package bitchanger.gui.controls + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    bitchanger.gui.controls

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/package-summary.html b/doc/0.1.4/en_public/bitchanger/gui/package-summary.html new file mode 100644 index 0000000..18802e7 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/package-summary.html @@ -0,0 +1,148 @@ + + + + + +bitchanger.gui + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package bitchanger.gui

    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/package-tree.html b/doc/0.1.4/en_public/bitchanger/gui/package-tree.html new file mode 100644 index 0000000..17f41d8 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/package-tree.html @@ -0,0 +1,152 @@ + + + + + +bitchanger.gui Class Hierarchy + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package bitchanger.gui

    +Package Hierarchies: + +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/package-use.html b/doc/0.1.4/en_public/bitchanger/gui/package-use.html new file mode 100644 index 0000000..01a7b11 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/package-use.html @@ -0,0 +1,149 @@ + + + + + +Uses of Package bitchanger.gui + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    bitchanger.gui

    +
    +
    No usage of bitchanger.gui
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/views/AlphaNumGridView.ConstraintType.html b/doc/0.1.4/en_public/bitchanger/gui/views/AlphaNumGridView.ConstraintType.html new file mode 100644 index 0000000..411cab3 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/views/AlphaNumGridView.ConstraintType.html @@ -0,0 +1,422 @@ + + + + + +AlphaNumGridView.ConstraintType + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Enum AlphaNumGridView.ConstraintType

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      + +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          values

          +
          public static AlphaNumGridView.ConstraintType[] values()
          +
          Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
          +for (AlphaNumGridView.ConstraintType c : AlphaNumGridView.ConstraintType.values())
          +    System.out.println(c);
          +
          +
          +
          Returns:
          +
          an array containing the constants of this enum type, in the order they are declared
          +
          +
        • +
        + + + +
          +
        • +

          valueOf

          +
          public static AlphaNumGridView.ConstraintType valueOf​(String name)
          +
          Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
          +
          +
          Parameters:
          +
          name - the name of the enum constant to be returned.
          +
          Returns:
          +
          the enum constant with the specified name
          +
          Throws:
          +
          IllegalArgumentException - if this enum type has no constant with the specified name
          +
          NullPointerException - if the argument is null
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/views/AlphaNumGridView.html b/doc/0.1.4/en_public/bitchanger/gui/views/AlphaNumGridView.html new file mode 100644 index 0000000..c653fdd --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/views/AlphaNumGridView.html @@ -0,0 +1,1203 @@ + + + + + +AlphaNumGridView + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class AlphaNumGridView

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          tfKeys

          +
          public final String[] tfKeys
          +
        • +
        + + + +
          +
        • +

          clearBtnKey

          +
          public final String clearBtnKey
          +
        • +
        + + + +
          +
        • +

          backspaceBtnKey

          +
          public final String backspaceBtnKey
          +
        • +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          +
        • +

          alphaKeys

          +
          public final String[] alphaKeys
          +
        • +
        + + + +
          +
        • +

          numKeys

          +
          public final String[] numKeys
          +
        • +
        + + + +
          +
        • +

          labelTexts

          +
          public final String[] labelTexts
          +
        • +
        + + + +
          +
        • +

          setTFColumnSpan

          +
          protected boolean setTFColumnSpan
          +
        • +
        + + + +
          +
        • +

          useClearAndBackBtn

          +
          protected boolean useClearAndBackBtn
          +
        • +
        + + + +
          +
        • +

          tfMaxHeightProperty

          +
          protected final javafx.beans.property.DoubleProperty tfMaxHeightProperty
          +
        • +
        + + + +
          +
        • +

          tfMinHeightProperty

          +
          protected final javafx.beans.property.DoubleProperty tfMinHeightProperty
          +
        • +
        + + + +
          +
        • +

          btnMaxHeigthProperty

          +
          protected final javafx.beans.property.DoubleProperty btnMaxHeigthProperty
          +
        • +
        + + + +
          +
        • +

          btnMinHeigthProperty

          +
          protected final javafx.beans.property.DoubleProperty btnMinHeigthProperty
          +
        • +
        + + + +
          +
        • +

          btnMaxWidthProperty

          +
          protected final javafx.beans.property.DoubleProperty btnMaxWidthProperty
          +
        • +
        + + + +
          +
        • +

          btnMinWidthProperty

          +
          protected final javafx.beans.property.DoubleProperty btnMinWidthProperty
          +
        • +
        + + + +
          +
        • +

          whiteSpaceHeigthProperty

          +
          protected final javafx.beans.property.DoubleProperty whiteSpaceHeigthProperty
          +
        • +
        + + + +
          +
        • +

          firstColumnWidthProperty

          +
          protected final javafx.beans.property.DoubleProperty firstColumnWidthProperty
          +
        • +
        + + + +
          +
        • +

          paddingTopProperty

          +
          protected final javafx.beans.property.DoubleProperty paddingTopProperty
          +
        • +
        + + + +
          +
        • +

          paddingRigthProperty

          +
          protected final javafx.beans.property.DoubleProperty paddingRigthProperty
          +
        • +
        + + + +
          +
        • +

          paddingBottomProperty

          +
          protected final javafx.beans.property.DoubleProperty paddingBottomProperty
          +
        • +
        + + + +
          +
        • +

          paddingLeftProperty

          +
          protected final javafx.beans.property.DoubleProperty paddingLeftProperty
          +
        • +
        + + + +
          +
        • +

          btnSpacingProperty

          +
          protected final javafx.beans.property.DoubleProperty btnSpacingProperty
          +
        • +
        + + + +
          +
        • +

          hgapProperty

          +
          protected final javafx.beans.property.DoubleProperty hgapProperty
          +
        • +
        + + + +
          +
        • +

          vgapProperty

          +
          protected final javafx.beans.property.DoubleProperty vgapProperty
          +
        • +
        + + + +
          +
        • +

          firstTFRow

          +
          protected final int firstTFRow
          +
        • +
        + + + +
          +
        • +

          tfColumn

          +
          protected final int tfColumn
          +
        • +
        + + + +
          +
        • +

          firstLabelRow

          +
          protected final int firstLabelRow
          +
        • +
        + + + +
          +
        • +

          labelColumn

          +
          protected final int labelColumn
          +
        • +
        + + + +
          +
        • +

          firstKeyBtnRow

          +
          protected final int firstKeyBtnRow
          +
        • +
        + + + +
          +
        • +

          firstKeyBtnColumn

          +
          protected final int firstKeyBtnColumn
          +
        • +
        + + + +
          +
        • +

          center

          +
          protected final javafx.scene.layout.GridPane center
          +
        • +
        + + + + +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          AlphaNumGridView

          +
          public AlphaNumGridView​(int firstKeyBtnRow,
          +                        int firstKeyBtnColumn)
          +
        • +
        + + + +
          +
        • +

          AlphaNumGridView

          +
          public AlphaNumGridView​(String[] labelTexts,
          +                        String... tfKeys)
          +
        • +
        + + + +
          +
        • +

          AlphaNumGridView

          +
          public AlphaNumGridView​(int firstLabelRow,
          +                        int labelColumn,
          +                        int firstTFRow,
          +                        int tfColumn,
          +                        int firstKeyBtnRow,
          +                        int firstKeyBtnColumn,
          +                        String[] labelTexts,
          +                        String... tfKeys)
          +
        • +
        + + + +
          +
        • +

          AlphaNumGridView

          +
          public AlphaNumGridView​(int firstLabelRow,
          +                        int labelColumn,
          +                        int firstTFRow,
          +                        int tfColumn,
          +                        int firstKeyBtnRow,
          +                        int firstKeyBtnColumn,
          +                        String[] labelTexts,
          +                        String[] tfKeys,
          +                        double tfHeight,
          +                        double btnMaxSize,
          +                        double btnMinSize,
          +                        double whiteSpaceHeigth,
          +                        double firstColumnWidth,
          +                        double paddingTopRigthBottomLeft,
          +                        double spacing)
          +
        • +
        + + + +
          +
        • +

          AlphaNumGridView

          +
          public AlphaNumGridView​(int firstLabelRow,
          +                        int labelColumn,
          +                        int firstTFRow,
          +                        int tfColumn,
          +                        int firstKeyBtnRow,
          +                        int firstKeyBtnColumn,
          +                        String[] labelTexts,
          +                        String[] tfKeys,
          +                        double tfMaxHeight,
          +                        double tfMinHeight,
          +                        double btnMaxHeigth,
          +                        double btnMinHeigth,
          +                        double btnMaxWidth,
          +                        double btnMinWidth,
          +                        double whiteSpaceHeigth,
          +                        double firstColumnWidth,
          +                        double paddingTop,
          +                        double paddingRigth,
          +                        double paddingBottom,
          +                        double paddingLeft,
          +                        double btnSpacing,
          +                        double hgap,
          +                        double vgap)
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getMaxHeigth

          +
          public double getMaxHeigth()
          +
          Indicates the maximum height of the view
          +
          +
          Returns:
          +
          maximum height of the view
          +
          +
        • +
        + + + +
          +
        • +

          getMaxWidth

          +
          public double getMaxWidth()
          +
          Indicates the maximum width of the view
          +
          +
          Returns:
          +
          maximum width of the view
          +
          +
        • +
        + + + +
          +
        • +

          getMinHeigth

          +
          public double getMinHeigth()
          +
          Indicates the minimum height of the view
          +
          +
          Returns:
          +
          minimum height of the view
          +
          +
        • +
        + + + +
          +
        • +

          getMinWidth

          +
          public double getMinWidth()
          +
          Indicates the minimum width of the view
          +
          +
          Returns:
          +
          minimum width of the view
          +
          +
        • +
        + + + +
          +
        • +

          createScenegraph

          +
          protected void createScenegraph()
          +
          +
          Specified by:
          +
          createScenegraph in class ViewBase<javafx.scene.layout.BorderPane>
          +
          +
        • +
        + + + + + + + + +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/views/CalculatorView.html b/doc/0.1.4/en_public/bitchanger/gui/views/CalculatorView.html new file mode 100644 index 0000000..ec10a54 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/views/CalculatorView.html @@ -0,0 +1,352 @@ + + + + + +CalculatorView + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class CalculatorView

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          CalculatorView

          +
          public CalculatorView()
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/views/Controllable.html b/doc/0.1.4/en_public/bitchanger/gui/views/Controllable.html new file mode 100644 index 0000000..332065b --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/views/Controllable.html @@ -0,0 +1,283 @@ + + + + + +Controllable + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface Controllable

    +
    +
    +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getTextFields

          +
          HashMap<String,​javafx.scene.control.TextField> getTextFields()
          +
        • +
        + + + +
          +
        • +

          getButtons

          +
          HashMap<String,​javafx.scene.control.Button> getButtons()
          +
        • +
        + + + +
          +
        • +

          getNodes

          +
          HashMap<String,​javafx.scene.Node> getNodes()
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +
    + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/views/ConverterView.html b/doc/0.1.4/en_public/bitchanger/gui/views/ConverterView.html new file mode 100644 index 0000000..1a316de --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/views/ConverterView.html @@ -0,0 +1,638 @@ + + + + + +ConverterView + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class ConverterView

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/views/IEEEView.html b/doc/0.1.4/en_public/bitchanger/gui/views/IEEEView.html new file mode 100644 index 0000000..bfcac56 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/views/IEEEView.html @@ -0,0 +1,406 @@ + + + + + +IEEEView + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class IEEEView

    +
    +
    + +
    + +
    +
    + +
    +
    + +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/views/ViewBase.html b/doc/0.1.4/en_public/bitchanger/gui/views/ViewBase.html new file mode 100644 index 0000000..89e08ad --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/views/ViewBase.html @@ -0,0 +1,599 @@ + + + + + +ViewBase + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class ViewBase<T extends javafx.scene.Parent>

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          scene

          +
          protected final javafx.scene.Scene scene
          +
        • +
        + + + +
          +
        • +

          root

          +
          protected final T extends javafx.scene.Parent root
          +
        • +
        + + + +
          +
        • +

          controller

          +
          protected Controller controller
          +
        • +
        + + + +
          +
        • +

          menubar

          +
          protected javafx.scene.control.MenuBar menubar
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + + + +
          +
        • +

          ViewBase

          +
          public ViewBase​(T root)
          +
        • +
        + + + + + +
          +
        • +

          ViewBase

          +
          public ViewBase​(T root,
          +                boolean buildScenegraph)
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getScene

          +
          public final javafx.scene.Scene getScene()
          +
          Returns the represented Scene
          +
          +
          Specified by:
          +
          getScene in interface Viewable
          +
          Returns:
          +
          from the view represented Scene
          +
          +
        • +
        + + + +
          +
        • +

          getTextFieldMap

          +
          public final Map<String,​javafx.scene.control.TextField> getTextFieldMap()
          +
          Returns a Map with all text fields of the controllable. Each text field is allocated to a unique keyword, + which is used to find the text field out of the map. +

          + Each keyword should have a useful connection to the use of the text field! +

          +
          +
          Specified by:
          +
          getTextFieldMap in interface Controllable
          +
          Returns:
          +
          Map, that contains all text fields of the controllable
          +
          +
        • +
        + + + +
          +
        • +

          getButtonMap

          +
          public final Map<String,​javafx.scene.control.Button> getButtonMap()
          +
          Returns a Map with all buttons of the controllable. Each button is allocated to a unique keyword, + which is used to find the button out of the map. +

          + Each Keyword should have a useful connection to the use of the button! +

          +
          +
          Specified by:
          +
          getButtonMap in interface Controllable
          +
          Returns:
          +
          Map, that contains all buttons of the controllable
          +
          +
        • +
        + + + +
          +
        • +

          getNodeMap

          +
          public final Map<String,​javafx.scene.Node> getNodeMap()
          +
          Returns a Map with all elements (Nodes) of the controllable, that are not buttons or text fields and are required in the controller. + Each element is allocated to a unique keyword, which is used to find the element out of the map. +

          + Each keyword should have a useful connection to the use of the elements! +

          +
          +
          Specified by:
          +
          getNodeMap in interface Controllable
          +
          Returns:
          +
          Map, which contains all elements of a controllable, that are not buttons or text fields and are required in the controller
          +
          +
        • +
        + + + + + +
          +
        • +

          setMenuBar

          +
          public <V extends javafx.scene.control.MenuBar> void setMenuBar​(V menubar)
          +
          Adds the given MenuBar to this View's scenegraph. Any existing MenuBar is removed from the + scenegraph and replaced. If the argument is null the only attempt is to remove the + already existing MenuBar from the scenegraph. + +

          + If root is an instance of BorderPane the MenuBar is placed in Top, + otherwise only the old MenuBar is removed. +

          +
          +
          Specified by:
          +
          setMenuBar in interface Viewable
          +
          Type Parameters:
          +
          V - runtime type of the given MenuBar
          +
          Parameters:
          +
          menubar - MenuBar to be used by this View, may be null to remove the current MenuBar
          +
          +
        • +
        + + + +
          +
        • +

          init

          +
          protected void init()
          +
        • +
        + + + +
          +
        • +

          buildScenegraph

          +
          protected void buildScenegraph()
          +
        • +
        + + + +
          +
        • +

          createScenegraph

          +
          protected abstract void createScenegraph()
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/views/Viewable.html b/doc/0.1.4/en_public/bitchanger/gui/views/Viewable.html new file mode 100644 index 0000000..d4e78d1 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/views/Viewable.html @@ -0,0 +1,452 @@ + + + + + +Viewable + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface Viewable

    +
    +
    +
    +
      +
    • +
      +
      All Superinterfaces:
      +
      Controllable
      +
      +
      +
      All Known Implementing Classes:
      +
      AlphaNumGridView, CalculatorView, ConverterView, IEEEView, ViewBase
      +
      +
      +
      public interface Viewable
      +extends Controllable
      +
      The interface Viewable defines the base for a view. +

      + A view is representable in a JavaFX window (javafx.stage.Stage). The view encapsulate a Scene, + which can be represented in a stage. +

      +

      + The scene graph is constructed by a view, the view only sets the layout not the functions. +

      +

      + A controller can be allocated to each view, to set functions to the operating elements in the scene graph. +

      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.0
      +
      Author:
      +
      Tim
      +
      See Also:
      +
      Controllable, +Controller
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          generateMenuBar

          +
          default BasicMenuBar generateMenuBar()
          +
        • +
        + + + + + + + +
          +
        • +

          getScene

          +
          javafx.scene.Scene getScene()
          +
          Returns the represented Scene
          +
          +
          Returns:
          +
          from the view represented Scene
          +
          +
        • +
        + + + +
          +
        • +

          getMaxHeigth

          +
          double getMaxHeigth()
          +
          Indicates the maximum height of the view
          +
          +
          Returns:
          +
          maximum height of the view
          +
          +
        • +
        + + + +
          +
        • +

          getMaxWidth

          +
          double getMaxWidth()
          +
          Indicates the maximum width of the view
          +
          +
          Returns:
          +
          maximum width of the view
          +
          +
        • +
        + + + +
          +
        • +

          getMinHeigth

          +
          double getMinHeigth()
          +
          Indicates the minimum height of the view
          +
          +
          Returns:
          +
          minimum height of the view
          +
          +
        • +
        + + + +
          +
        • +

          getMinWidth

          +
          double getMinWidth()
          +
          Indicates the minimum width of the view
          +
          +
          Returns:
          +
          minimum width of the view
          +
          +
        • +
        + + + + + +
          +
        • +

          setMenuBar

          +
          <T extends javafx.scene.control.MenuBar> void setMenuBar​(T menubar)
          +
          Adds the given MenuBar to this View's scenegraph. Any existing MenuBar is removed from the + scenegraph and replaced. If the argument is null the only attempt is to remove the + already existing MenuBar from the scenegraph.
          +
          +
          Type Parameters:
          +
          T - runtime type of the given MenuBar
          +
          Parameters:
          +
          menubar - MenuBar to be used by this View, may be null to remove the current MenuBar
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/views/class-use/AlphaNumGridView.ConstraintType.html b/doc/0.1.4/en_public/bitchanger/gui/views/class-use/AlphaNumGridView.ConstraintType.html new file mode 100644 index 0000000..363450c --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/views/class-use/AlphaNumGridView.ConstraintType.html @@ -0,0 +1,227 @@ + + + + + +Uses of Class bitchanger.gui.views.AlphaNumGridView.ConstraintType + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.views.AlphaNumGridView.ConstraintType

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/views/class-use/AlphaNumGridView.html b/doc/0.1.4/en_public/bitchanger/gui/views/class-use/AlphaNumGridView.html new file mode 100644 index 0000000..b500165 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/views/class-use/AlphaNumGridView.html @@ -0,0 +1,205 @@ + + + + + +Uses of Class bitchanger.gui.views.AlphaNumGridView + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.views.AlphaNumGridView

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/views/class-use/CalculatorView.html b/doc/0.1.4/en_public/bitchanger/gui/views/class-use/CalculatorView.html new file mode 100644 index 0000000..a2aeff0 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/views/class-use/CalculatorView.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.gui.views.CalculatorView + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.views.CalculatorView

    +
    +
    No usage of bitchanger.gui.views.CalculatorView
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/views/class-use/Controllable.html b/doc/0.1.4/en_public/bitchanger/gui/views/class-use/Controllable.html new file mode 100644 index 0000000..6c80c72 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/views/class-use/Controllable.html @@ -0,0 +1,256 @@ + + + + + +Uses of Interface bitchanger.gui.views.Controllable + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    bitchanger.gui.views.Controllable

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/views/class-use/ConverterView.html b/doc/0.1.4/en_public/bitchanger/gui/views/class-use/ConverterView.html new file mode 100644 index 0000000..7a13478 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/views/class-use/ConverterView.html @@ -0,0 +1,196 @@ + + + + + +Uses of Class bitchanger.gui.views.ConverterView + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.views.ConverterView

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/views/class-use/IEEEView.html b/doc/0.1.4/en_public/bitchanger/gui/views/class-use/IEEEView.html new file mode 100644 index 0000000..5c70926 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/views/class-use/IEEEView.html @@ -0,0 +1,199 @@ + + + + + +Uses of Class bitchanger.gui.views.IEEEView + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.views.IEEEView

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/views/class-use/ViewBase.html b/doc/0.1.4/en_public/bitchanger/gui/views/class-use/ViewBase.html new file mode 100644 index 0000000..8874d8e --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/views/class-use/ViewBase.html @@ -0,0 +1,210 @@ + + + + + +Uses of Class bitchanger.gui.views.ViewBase + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.gui.views.ViewBase

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/views/class-use/Viewable.html b/doc/0.1.4/en_public/bitchanger/gui/views/class-use/Viewable.html new file mode 100644 index 0000000..6ed56be --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/views/class-use/Viewable.html @@ -0,0 +1,343 @@ + + + + + +Uses of Interface bitchanger.gui.views.Viewable + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    bitchanger.gui.views.Viewable

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/views/package-summary.html b/doc/0.1.4/en_public/bitchanger/gui/views/package-summary.html new file mode 100644 index 0000000..5ec79d1 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/views/package-summary.html @@ -0,0 +1,220 @@ + + + + + +bitchanger.gui.views + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package bitchanger.gui.views

    +
    +
    +
    + + +
    Offers different views that can be represented on a graphical surface
    +
    + +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/views/package-tree.html b/doc/0.1.4/en_public/bitchanger/gui/views/package-tree.html new file mode 100644 index 0000000..e12f1ee --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/views/package-tree.html @@ -0,0 +1,198 @@ + + + + + +bitchanger.gui.views Class Hierarchy + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package bitchanger.gui.views

    +Package Hierarchies: + +
    +
    +
    +

    Class Hierarchy

    + +
    +
    +

    Interface Hierarchy

    + +
    +
    +

    Enum Hierarchy

    + +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/bitchanger/gui/views/package-use.html b/doc/0.1.4/en_public/bitchanger/gui/views/package-use.html new file mode 100644 index 0000000..a6170d5 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/gui/views/package-use.html @@ -0,0 +1,258 @@ + + + + + +Uses of Package bitchanger.gui.views + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    bitchanger.gui.views

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/main/BitchangerLauncher.html b/doc/0.1.4/en_public/bitchanger/main/BitchangerLauncher.html new file mode 100644 index 0000000..737c337 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/main/BitchangerLauncher.html @@ -0,0 +1,327 @@ + + + + + +BitchangerLauncher + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class BitchangerLauncher

    +
    +
    + +
    +
      +
    • +
      +
      public class BitchangerLauncher
      +extends Object
      +
      This class contains the main method that is the entry point for the application.
      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Muehle
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          BitchangerLauncher

          +
          public BitchangerLauncher()
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          main

          +
          public static void main​(String[] args)
          +
          The main method launches the application's main window and waits until this main window was closed. + All settings from Preferences are saved before the program is terminated.
          +
          +
          Parameters:
          +
          args - Arguments that are committed at the beginning of the program. The program ignores these arguments.
          +
          See Also:
          +
          Preferences, +PrimaryFXApp.launchFXApplication(String[])
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/main/PrimaryFXApp.html b/doc/0.1.4/en_public/bitchanger/main/PrimaryFXApp.html new file mode 100644 index 0000000..09e655c --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/main/PrimaryFXApp.html @@ -0,0 +1,608 @@ + + + + + +PrimaryFXApp + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class PrimaryFXApp

    +
    +
    +
      +
    • java.lang.Object
    • +
    • +
        +
      • javafx.application.Application
      • +
      • +
          +
        • bitchanger.main.PrimaryFXApp
        • +
        +
      • +
      +
    • +
    +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      ControllableApplication
      +
      +
      +
      public class PrimaryFXApp
      +extends javafx.application.Application
      +implements ControllableApplication
      +
      Main window of the application with javaFX +

      + The window contains several scenes for calculations and converting of several numeral systems. + These scenes can be changed and program settings can be opened via the menu bar. +

      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Muehle
      +
      See Also:
      +
      ConverterView, +ConverterController
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      + +
      + +
      +
        +
      • + + +

        Constructor Detail

        + + + +
          +
        • +

          PrimaryFXApp

          +
          public PrimaryFXApp()
          +
          Construct a new PrimaryFXApp for the Bitchanger
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          launchFXApplication

          +
          public static void launchFXApplication​(String[] args)
          +
          Starts the applications and opens the application window.
          +
          +
          Parameters:
          +
          args - Arguments that are committed at the beginning of the application. These arguments are committed to the method launch and otherwise they will be ignored.
          +
          See Also:
          +
          Application.launch(String...)
          +
          +
        • +
        + + + + + + + +
          +
        • +

          getViewable

          +
          public Viewable getViewable​(String key)
          +
          Returns the view that is associated to the string key
          +
          +
          Specified by:
          +
          getViewable in interface ControllableApplication
          +
          Parameters:
          +
          key - key whose associated View is to be returned
          +
          Returns:
          +
          View to which the specified key is mapped, or null if there is no associated View for the given key
          +
          +
        • +
        + + + + + + + +
          +
        • +

          start

          +
          public void start​(javafx.stage.Stage primaryStage)
          +           throws Exception
          +
          This method creates the content for the main window and opens it. +

          + - A menu bar is created, which allows to control the main window in every scene. +

          +

          + - Different views for the various surfaces are created. +

          +

          + - The latest scene is loaded. +

          +

          + - The in settings selected stylesheet is loaded. +

          +

          + - The window is formatted and opened. +

          + + This method will end after the main window is closed.
          +
          +
          Specified by:
          +
          start in class javafx.application.Application
          +
          Throws:
          +
          Exception
          +
          See Also:
          +
          ConverterView
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/main/class-use/BitchangerLauncher.html b/doc/0.1.4/en_public/bitchanger/main/class-use/BitchangerLauncher.html new file mode 100644 index 0000000..5a52530 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/main/class-use/BitchangerLauncher.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.main.BitchangerLauncher + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.main.BitchangerLauncher

    +
    +
    No usage of bitchanger.main.BitchangerLauncher
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/main/class-use/PrimaryFXApp.html b/doc/0.1.4/en_public/bitchanger/main/class-use/PrimaryFXApp.html new file mode 100644 index 0000000..158ac6a --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/main/class-use/PrimaryFXApp.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.main.PrimaryFXApp + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.main.PrimaryFXApp

    +
    +
    No usage of bitchanger.main.PrimaryFXApp
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/main/package-summary.html b/doc/0.1.4/en_public/bitchanger/main/package-summary.html new file mode 100644 index 0000000..e1f17e1 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/main/package-summary.html @@ -0,0 +1,180 @@ + + + + + +bitchanger.main + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package bitchanger.main

    +
    +
    +
    + + +
    Contains the launcher with the main method and the JavaFX applications for starting the graphical user interface.
    +
    +
      +
    • + + + + + + + + + + + + + + + + +
      Class Summary 
      ClassDescription
      BitchangerLauncher +
      This class contains the main method that is the entry point for the application.
      +
      PrimaryFXApp +
      Main window of the application with javaFX
      +
      +
    • +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/bitchanger/main/package-tree.html b/doc/0.1.4/en_public/bitchanger/main/package-tree.html new file mode 100644 index 0000000..f79fafa --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/main/package-tree.html @@ -0,0 +1,169 @@ + + + + + +bitchanger.main Class Hierarchy + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package bitchanger.main

    +Package Hierarchies: + +
    +
    +
    +

    Class Hierarchy

    + +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/bitchanger/main/package-use.html b/doc/0.1.4/en_public/bitchanger/main/package-use.html new file mode 100644 index 0000000..88d09d9 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/main/package-use.html @@ -0,0 +1,149 @@ + + + + + +Uses of Package bitchanger.main + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    bitchanger.main

    +
    +
    No usage of bitchanger.main
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/package-summary.html b/doc/0.1.4/en_public/bitchanger/package-summary.html new file mode 100644 index 0000000..7e715b9 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/package-summary.html @@ -0,0 +1,148 @@ + + + + + +bitchanger + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package bitchanger

    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/bitchanger/package-tree.html b/doc/0.1.4/en_public/bitchanger/package-tree.html new file mode 100644 index 0000000..4cbb84b --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/package-tree.html @@ -0,0 +1,152 @@ + + + + + +bitchanger Class Hierarchy + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package bitchanger

    +Package Hierarchies: + +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/bitchanger/package-use.html b/doc/0.1.4/en_public/bitchanger/package-use.html new file mode 100644 index 0000000..5e29433 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/package-use.html @@ -0,0 +1,149 @@ + + + + + +Uses of Package bitchanger + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    bitchanger

    +
    +
    No usage of bitchanger
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/preferences/Comma.html b/doc/0.1.4/en_public/bitchanger/preferences/Comma.html new file mode 100644 index 0000000..2fc0c4b --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/preferences/Comma.html @@ -0,0 +1,422 @@ + + + + + +Comma + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Enum Comma

    +
    +
    + +
    + +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Enum Constant Detail

        + + + +
          +
        • +

          COMMA_DE

          +
          public static final Comma COMMA_DE
          +
          Constant that represents the German comma (',')
          +
        • +
        + + + +
          +
        • +

          COMMA_EN

          +
          public static final Comma COMMA_EN
          +
          Constant that represents the English comma ('.')
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          values

          +
          public static Comma[] values()
          +
          Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
          +for (Comma c : Comma.values())
          +    System.out.println(c);
          +
          +
          +
          Returns:
          +
          an array containing the constants of this enum type, in the order they are declared
          +
          +
        • +
        + + + +
          +
        • +

          valueOf

          +
          public static Comma valueOf​(String name)
          +
          Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
          +
          +
          Parameters:
          +
          name - the name of the enum constant to be returned.
          +
          Returns:
          +
          the enum constant with the specified name
          +
          Throws:
          +
          IllegalArgumentException - if this enum type has no constant with the specified name
          +
          NullPointerException - if the argument is null
          +
          +
        • +
        + + + +
          +
        • +

          get

          +
          public char get()
          +
          Returns the represented comma sign
          +
          +
          Returns:
          +
          the represented comma sign
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/preferences/Preferences.html b/doc/0.1.4/en_public/bitchanger/preferences/Preferences.html new file mode 100644 index 0000000..6687d1c --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/preferences/Preferences.html @@ -0,0 +1,534 @@ + + + + + +Preferences + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class Preferences

    +
    +
    + +
    +
      +
    • +
      +
      public class Preferences
      +extends Object
      +
      Preferences is the global collection for all possible settings that can be selected for the bitchanger. + These settings can be requested and changed from all classes by using the method getPrefs(). + +

      + Furthermore there are methods to store all settings permanently and load these at a later moment. +

      +
      +
      Since:
      +
      Bitchanger 0.1.0
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          commaProperty

          +
          public final javafx.beans.property.ObjectProperty<Comma> commaProperty
          +
          Property for comma character
          +
        • +
        + + + +
          +
        • +

          indicateFractionalPrecisionProperty

          +
          public final javafx.beans.property.BooleanProperty indicateFractionalPrecisionProperty
          +
          Property for displaying aborted decimal places
          +
        • +
        + + + +
          +
        • +

          readOnlyStylesheetProperty

          +
          public final javafx.beans.property.ReadOnlyStringProperty readOnlyStylesheetProperty
          +
          ReadOnlyProperty for the selected Stylesheet
          +
        • +
        + + + +
          +
        • +

          readOnlyStyleProperty

          +
          public final javafx.beans.property.ReadOnlyObjectProperty<Style> readOnlyStyleProperty
          +
          ReadOnlyProperty for the selected Stylesheet
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getPrefs

          +
          public static Preferences getPrefs()
          +
          Returns the current settings
          +
          +
          Returns:
          +
          current settings
          +
          Since:
          +
          Bitchanger 0.1.4
          +
          +
        • +
        + + + + + + + + + + + + + + + +
          +
        • +

          getComma

          +
          public char getComma()
          +
          Returns the selected character for comma
          +
          +
          Returns:
          +
          selected character for comma
          +
          Since:
          +
          Bitchanger 0.1.4
          +
          +
        • +
        + + + +
          +
        • +

          indicateFractionalPrecision

          +
          public boolean indicateFractionalPrecision()
          +
          Returns the value of indicateFractionalPrecisionProperty
          +
          +
          Returns:
          +
          true, if the view of cancelled fractional parts is selected, if not false
          +
          Since:
          +
          Bitchanger 0.1.4
          +
          +
        • +
        + + + +
          +
        • +

          setIndicateFractionalPrecision

          +
          public void setIndicateFractionalPrecision​(boolean b)
          +
          Turns the view of cancelled fractional parts on and off
          +
          +
          Parameters:
          +
          b - true to turn on or false to turn off
          +
          Since:
          +
          Bitchanger 0.1.4
          +
          +
        • +
        + + + +
          +
        • +

          setStylesheet

          +
          public boolean setStylesheet​(String path)
          +
        • +
        + + + +
          +
        • +

          setStylesheet

          +
          public boolean setStylesheet​(Style style)
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/preferences/Style.html b/doc/0.1.4/en_public/bitchanger/preferences/Style.html new file mode 100644 index 0000000..567af08 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/preferences/Style.html @@ -0,0 +1,410 @@ + + + + + +Style + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Enum Style

    +
    +
    + +
    +
      +
    • +
      +
      All Implemented Interfaces:
      +
      Serializable, Comparable<Style>
      +
      +
      +
      public enum Style
      +extends Enum<Style>
      +
      Enum of different styles that are available as CSS files for javaFX
      +
      +
      Since:
      +
      Bitchanger 0.1.4
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Muehle
      +
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Enum Constant Detail

        + + + +
          +
        • +

          LIGHT

          +
          public static final Style LIGHT
          +
          Constant for a light layout
          +
        • +
        + + + +
          +
        • +

          DARK

          +
          public static final Style DARK
          +
          Constant for a dark layout
          +
        • +
        + + + +
          +
        • +

          UNKNOWN

          +
          public static final Style UNKNOWN
          +
          Constant for a unknown layout
          +
        • +
        +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          values

          +
          public static Style[] values()
          +
          Returns an array containing the constants of this enum type, in +the order they are declared. This method may be used to iterate +over the constants as follows: +
          +for (Style c : Style.values())
          +    System.out.println(c);
          +
          +
          +
          Returns:
          +
          an array containing the constants of this enum type, in the order they are declared
          +
          +
        • +
        + + + +
          +
        • +

          valueOf

          +
          public static Style valueOf​(String name)
          +
          Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
          +
          +
          Parameters:
          +
          name - the name of the enum constant to be returned.
          +
          Returns:
          +
          the enum constant with the specified name
          +
          Throws:
          +
          IllegalArgumentException - if this enum type has no constant with the specified name
          +
          NullPointerException - if the argument is null
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/preferences/class-use/Comma.html b/doc/0.1.4/en_public/bitchanger/preferences/class-use/Comma.html new file mode 100644 index 0000000..6a6ef5f --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/preferences/class-use/Comma.html @@ -0,0 +1,222 @@ + + + + + +Uses of Class bitchanger.preferences.Comma + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.preferences.Comma

    +
    +
    +
      +
    • + + + + + + + + + + + + +
      Packages that use Comma 
      PackageDescription
      bitchanger.preferences +
      With classes that are included in this package, components have access to global settings and can adjust these.
      +
      +
    • +
    • + +
    • +
    +
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/preferences/class-use/Preferences.html b/doc/0.1.4/en_public/bitchanger/preferences/class-use/Preferences.html new file mode 100644 index 0000000..ff11649 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/preferences/class-use/Preferences.html @@ -0,0 +1,197 @@ + + + + + +Uses of Class bitchanger.preferences.Preferences + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.preferences.Preferences

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/preferences/class-use/Style.html b/doc/0.1.4/en_public/bitchanger/preferences/class-use/Style.html new file mode 100644 index 0000000..a5a2ec0 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/preferences/class-use/Style.html @@ -0,0 +1,237 @@ + + + + + +Uses of Class bitchanger.preferences.Style + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.preferences.Style

    +
    +
    +
      +
    • + + + + + + + + + + + + +
      Packages that use Style 
      PackageDescription
      bitchanger.preferences +
      With classes that are included in this package, components have access to global settings and can adjust these.
      +
      +
    • +
    • + +
    • +
    +
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/preferences/package-summary.html b/doc/0.1.4/en_public/bitchanger/preferences/package-summary.html new file mode 100644 index 0000000..90b2c2c --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/preferences/package-summary.html @@ -0,0 +1,199 @@ + + + + + +bitchanger.preferences + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package bitchanger.preferences

    +
    +
    +
    + + +
    With classes that are included in this package, components have access to global settings and can adjust these. + These settings affect the optics but also the behavior of the program. All these parameters can be save for the optimal user experience. + Furthermore the default settings are recoverable at any time.
    +
    +
      +
    • + + + + + + + + + + + + +
      Class Summary 
      ClassDescription
      Preferences +
      Preferences is the global collection for all possible settings that can be selected for the bitchanger.
      +
      +
    • +
    • + + + + + + + + + + + + + + + + +
      Enum Summary 
      EnumDescription
      Comma +
      Enumeration of the wrapper class, that represents the character for a comma.
      +
      Style +
      Enum of different styles that are available as CSS files for javaFX
      +
      +
    • +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/bitchanger/preferences/package-tree.html b/doc/0.1.4/en_public/bitchanger/preferences/package-tree.html new file mode 100644 index 0000000..b715a76 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/preferences/package-tree.html @@ -0,0 +1,179 @@ + + + + + +bitchanger.preferences Class Hierarchy + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package bitchanger.preferences

    +Package Hierarchies: + +
    +
    +
    +

    Class Hierarchy

    + +
    +
    +

    Enum Hierarchy

    + +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/bitchanger/preferences/package-use.html b/doc/0.1.4/en_public/bitchanger/preferences/package-use.html new file mode 100644 index 0000000..faaf20b --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/preferences/package-use.html @@ -0,0 +1,200 @@ + + + + + +Uses of Package bitchanger.preferences + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    bitchanger.preferences

    +
    +
    +
      +
    • + + + + + + + + + + + + +
      Packages that use bitchanger.preferences 
      PackageDescription
      bitchanger.preferences +
      With classes that are included in this package, components have access to global settings and can adjust these.
      +
      +
    • +
    • + + + + + + + + + + + + + + + + + + + + + + +
      Classes in bitchanger.preferences used by bitchanger.preferences 
      ClassDescription
      Comma +
      Enumeration of the wrapper class, that represents the character for a comma.
      +
      Preferences +
      Preferences is the global collection for all possible settings that can be selected for the bitchanger.
      +
      Style +
      Enum of different styles that are available as CSS files for javaFX
      +
      +
    • +
    +
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/util/ArrayUtils.html b/doc/0.1.4/en_public/bitchanger/util/ArrayUtils.html new file mode 100644 index 0000000..522e744 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/util/ArrayUtils.html @@ -0,0 +1,281 @@ + + + + + +ArrayUtils + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class ArrayUtils

    +
    +
    + +
    +
      +
    • +
      +
      public class ArrayUtils
      +extends Object
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + + + +
          +
        • +

          arrayOf

          +
          @SafeVarargs
          +public static <T> T[] arrayOf​(T... values)
          +
          Converts the given Objects to an Array
          +
          +
          Type Parameters:
          +
          T - Type of Objects and the returned Array
          +
          Parameters:
          +
          values - Objects to for building an Array
          +
          Returns:
          +
          Array from the given Objects
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +
    + + diff --git a/doc/0.1.4/en_public/bitchanger/util/FXUtils.html b/doc/0.1.4/en_public/bitchanger/util/FXUtils.html new file mode 100644 index 0000000..1955781 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/util/FXUtils.html @@ -0,0 +1,502 @@ + + + + + +FXUtils + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class FXUtils

    +
    +
    + +
    +
      +
    • +
      +
      public class FXUtils
      +extends Object
      +
      Utility class to handle objects whose belong to the user interface.
      +
      +
      Since:
      +
      Bitchanger 0.1.4
      +
      Version:
      +
      0.1.4
      +
      Author:
      +
      Tim Mühle
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Summary

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        All Methods Static Methods Concrete Methods 
        Modifier and TypeMethodDescription
        static javafx.scene.shape.SVGPathloadSVG​(File svgFile) +
        Loads an icon in svg format from the given file and creates an SVGPath object from the file that can be added to + the Scenegraph in javaFX.
        +
        static <T extends javafx.scene.Node>
        void
        setGridConstraints​(int firstColumn, + int firstRow, + int columnCount, + int columnOffset, + Queue<T> controls) +
        Sets the constrains of the nodes in a queue to position these in a GridPane.
        +
        static <T extends javafx.scene.Node>
        void
        setGridConstraints​(int firstColumn, + int firstRow, + int columnCount, + int columnOffset, + Queue<T> controls, + TriConsumer<javafx.scene.Node,​Integer,​Integer> consumer) +
        Proceed nodes as a table in a queue.
        +
        static voidsetIconOrText​(javafx.scene.control.Labeled labeled, + SVGIcon icon) 
        static voidsetIconOrText​(javafx.scene.control.Labeled labeled, + SVGIcon icon, + String alternativeText) 
        static voidsetIconOrText​(javafx.scene.control.MenuItem menuItem, + SVGIcon icon) 
        static voidsetIconOrText​(javafx.scene.control.MenuItem menuItem, + SVGIcon icon, + String alternativeText) 
        static voidsetMaxSizes​(Iterable<? extends javafx.scene.Node> nodes, + double maxSize) +
        Sets the maximum size of all controls inside an Iterable to the value of maxSize.
        +
        static voidsetMaxSizes​(Iterable<? extends javafx.scene.Node> nodes, + double maxWidth, + double maxHeight) +
        Sets the maximum width of all controls inside an Iterable to the value of maxWidth and + the maximum heights to the value of maxHeight.
        +
        + +
      • +
      +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          setGridConstraints

          +
          public static <T extends javafx.scene.Node> void setGridConstraints​(int firstColumn,
          +                                                                    int firstRow,
          +                                                                    int columnCount,
          +                                                                    int columnOffset,
          +                                                                    Queue<T> controls)
          +
          Sets the constrains of the nodes in a queue to position these in a GridPane. +

          + The first nodes position is defined by the parameters and firstColumn, + firstRow and columnOffset. The matrix gets spread of the amount of rows. + These rows are set by columnCount and get an automatic line break. + The constrains are set as long as there are elemts in the queue. +

          +

          + It is possible that the nodes take more place than just one column in the GridPane. + The column of the following node gets incremented accordingly to not overlay elements. +

          +
          +
          Type Parameters:
          +
          T - The type of the queue elements while runtime
          +
          Parameters:
          +
          firstColumn - First column of the resulting table
          +
          firstRow - First row of the resulting table
          +
          columnCount - Number of the columns in the table
          +
          columnOffset - Shift of the first column (only deployed in the first row)
          +
          controls - Elements in the table with the order from upper left to lower right (columns gets incremented before rows gets incremented)
          +
          See Also:
          +
          setGridConstraints(int, int, int, int, Queue, TriConsumer)
          +
          +
        • +
        + + + +
          +
        • +

          setGridConstraints

          +
          public static <T extends javafx.scene.Node> void setGridConstraints​(int firstColumn,
          +                                                                    int firstRow,
          +                                                                    int columnCount,
          +                                                                    int columnOffset,
          +                                                                    Queue<T> controls,
          +                                                                    TriConsumer<javafx.scene.Node,​Integer,​Integer> consumer)
          +
          Proceed nodes as a table in a queue. +

          + For each node inside the queue the column gets incremented. If the maximum count of columns reached, + the row gets incremented and the column get set on the start value. + The node is committed with the values of rows and columns to the TriConsumer to proceed these data. +

          +

          + It is possible that the nodes takes more than just one column in the GridPane. + The column of the following node gets incremented accordingly to not overlay elements. +

          +
          +
          Type Parameters:
          +
          T - The type of the queue elements while runtime
          +
          Parameters:
          +
          firstColumn - First column of the resulting table
          +
          firstRow - First row of the resulting table
          +
          columnCount - Number of the columns in the table
          +
          columnOffset - Shift of the first column (only deployed in the first row)
          +
          controls - Elements in the table with the order from upper left to lower right (columns gets incremented before rows gets incremented)
          +
          consumer - TriConsumer, that proceed the data
          +
          +
        • +
        + + + +
          +
        • +

          setMaxSizes

          +
          public static void setMaxSizes​(Iterable<? extends javafx.scene.Node> nodes,
          +                               double maxSize)
          +
          Sets the maximum size of all controls inside an Iterable to the value of maxSize.
          +
          +
          Parameters:
          +
          nodes - Collection of all controls that can be adjusted, and also are able to lie inside a layout container
          +
          maxSize - Maximum size of the controls
          +
          +
        • +
        + + + +
          +
        • +

          setMaxSizes

          +
          public static void setMaxSizes​(Iterable<? extends javafx.scene.Node> nodes,
          +                               double maxWidth,
          +                               double maxHeight)
          +
          Sets the maximum width of all controls inside an Iterable to the value of maxWidth and + the maximum heights to the value of maxHeight.
          +
          +
          Parameters:
          +
          nodes - Collection of all controls that can be adjusted, and also are able to lie inside a layout container
          +
          maxWidth - maximum width of all controls
          +
          maxHeight - maximum height of all controls
          +
          +
        • +
        + + + +
          +
        • +

          loadSVG

          +
          public static javafx.scene.shape.SVGPath loadSVG​(File svgFile)
          +
          Loads an icon in svg format from the given file and creates an SVGPath object from the file that can be added to + the Scenegraph in javaFX.
          +
          +
          Parameters:
          +
          svgFile - Icon as an svg file
          +
          Returns:
          +
          Loaded icon as SVGPath or null if the file could not be read correctly
          +
          +
        • +
        + + + +
          +
        • +

          setIconOrText

          +
          public static void setIconOrText​(javafx.scene.control.MenuItem menuItem,
          +                                 SVGIcon icon,
          +                                 String alternativeText)
          +
        • +
        + + + +
          +
        • +

          setIconOrText

          +
          public static void setIconOrText​(javafx.scene.control.MenuItem menuItem,
          +                                 SVGIcon icon)
          +
        • +
        + + + +
          +
        • +

          setIconOrText

          +
          public static void setIconOrText​(javafx.scene.control.Labeled labeled,
          +                                 SVGIcon icon,
          +                                 String alternativeText)
          +
        • +
        + + + +
          +
        • +

          setIconOrText

          +
          public static void setIconOrText​(javafx.scene.control.Labeled labeled,
          +                                 SVGIcon icon)
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +
    + + diff --git a/doc/0.1.4/en_public/bitchanger/util/IconFactory.html b/doc/0.1.4/en_public/bitchanger/util/IconFactory.html new file mode 100644 index 0000000..46c2ba6 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/util/IconFactory.html @@ -0,0 +1,283 @@ + + + + + +IconFactory + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class IconFactory

    +
    +
    + +
    +
      +
    • +
      +
      public class IconFactory
      +extends Object
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          styleBindIcon

          +
          public static SVGIcon styleBindIcon​(File lightIconFile,
          +                                    File darkIconFile)
          +
        • +
        + + + +
          +
        • +

          ofSVGFile

          +
          public static SVGIcon ofSVGFile​(File file)
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +
    + + diff --git a/doc/0.1.4/en_public/bitchanger/util/Resources.html b/doc/0.1.4/en_public/bitchanger/util/Resources.html new file mode 100644 index 0000000..b53f07b --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/util/Resources.html @@ -0,0 +1,1919 @@ + + + + + +Resources + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Class Resources

    +
    +
    + +
    +
      +
    • +
      +
      public class Resources
      +extends Object
      +
    • +
    +
    +
    + +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Field Detail

        + + + +
          +
        • +

          LAYOUT_CSS

          +
          public static final String LAYOUT_CSS
          +
        • +
        + + + +
          +
        • +

          LIGHT_CSS

          +
          public static final String LIGHT_CSS
          +
        • +
        + + + +
          +
        • +

          DARK_CSS

          +
          public static final String DARK_CSS
          +
        • +
        + + + +
          +
        • +

          CUSTOM_PREFERENCES

          +
          public static final File CUSTOM_PREFERENCES
          +
        • +
        + + + +
          +
        • +

          DEFAULT_PREFERENCES

          +
          public static final File DEFAULT_PREFERENCES
          +
        • +
        + + + +
          +
        • +

          ABC_BRICKS_FILLED_ICON

          +
          public static final File ABC_BRICKS_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          ABC_BRICKS_ICON

          +
          public static final File ABC_BRICKS_ICON
          +
        • +
        + + + +
          +
        • +

          ANGEL_DOWN_CIRCLE_THIN_ICON

          +
          public static final File ANGEL_DOWN_CIRCLE_THIN_ICON
          +
        • +
        + + + +
          +
        • +

          ANGEL_LEFT_CIRCLE_THIN_ICON

          +
          public static final File ANGEL_LEFT_CIRCLE_THIN_ICON
          +
        • +
        + + + +
          +
        • +

          ANGEL_RIGHT_CIRCLE_THIN_ICON

          +
          public static final File ANGEL_RIGHT_CIRCLE_THIN_ICON
          +
        • +
        + + + +
          +
        • +

          ANGEL_UP_CIRCLE_THIN_ICON

          +
          public static final File ANGEL_UP_CIRCLE_THIN_ICON
          +
        • +
        + + + +
          +
        • +

          ANGEL_DOWN_THIN_ICON

          +
          public static final File ANGEL_DOWN_THIN_ICON
          +
        • +
        + + + +
          +
        • +

          ANGEL_LEFT_THIN_ICON

          +
          public static final File ANGEL_LEFT_THIN_ICON
          +
        • +
        + + + +
          +
        • +

          ANGEL_RIGHT_THIN_ICON

          +
          public static final File ANGEL_RIGHT_THIN_ICON
          +
        • +
        + + + +
          +
        • +

          ANGEL_UP_THIN_ICON

          +
          public static final File ANGEL_UP_THIN_ICON
          +
        • +
        + + + +
          +
        • +

          ARROW_DOWN_CIRCLE_FILLED_ICON

          +
          public static final File ARROW_DOWN_CIRCLE_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          ARROW_LEFT_CIRCLE_FILLED_ICON

          +
          public static final File ARROW_LEFT_CIRCLE_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          ARROW_RIGHT_CIRCLE_FILLED_ICON

          +
          public static final File ARROW_RIGHT_CIRCLE_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          ARROW_UP_CIRCLE_FILLED_ICON

          +
          public static final File ARROW_UP_CIRCLE_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          ARROW_DOWN_ICON

          +
          public static final File ARROW_DOWN_ICON
          +
        • +
        + + + +
          +
        • +

          ARROW_LEFT_ICON

          +
          public static final File ARROW_LEFT_ICON
          +
        • +
        + + + +
          +
        • +

          ARROW_RIGHT_ICON

          +
          public static final File ARROW_RIGHT_ICON
          +
        • +
        + + + +
          +
        • +

          ARROW_UP_ICON

          +
          public static final File ARROW_UP_ICON
          +
        • +
        + + + +
          +
        • +

          CALCULATOR_SYMBOLS_FILLED_ICON

          +
          public static final File CALCULATOR_SYMBOLS_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          CALCULATOR_SYMBOLS_ICON

          +
          public static final File CALCULATOR_SYMBOLS_ICON
          +
        • +
        + + + +
          +
        • +

          CALCULATOR_FILLED_ICON

          +
          public static final File CALCULATOR_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          CALCULATOR_ICON

          +
          public static final File CALCULATOR_ICON
          +
        • +
        + + + +
          +
        • +

          COPYRIGHT_FILLED_ICON

          +
          public static final File COPYRIGHT_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          COPYRIGHT_ICON

          +
          public static final File COPYRIGHT_ICON
          +
        • +
        + + + +
          +
        • +

          ERASER_FILLED_ICON

          +
          public static final File ERASER_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          ERASER_ICON

          +
          public static final File ERASER_ICON
          +
        • +
        + + + +
          +
        • +

          ENTER_FULLSCREEN_ICON

          +
          public static final File ENTER_FULLSCREEN_ICON
          +
        • +
        + + + +
          +
        • +

          EXIT_FULLSCREEN_ICON

          +
          public static final File EXIT_FULLSCREEN_ICON
          +
        • +
        + + + +
          +
        • +

          FULLSCREEN_THIN_ICON

          +
          public static final File FULLSCREEN_THIN_ICON
          +
        • +
        + + + +
          +
        • +

          IDEA_FILLED_ICON

          +
          public static final File IDEA_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          IDEA_ICON

          +
          public static final File IDEA_ICON
          +
        • +
        + + + +
          +
        • +

          IDEA_SPEECH_BUBBLE_FILLED_ICON

          +
          public static final File IDEA_SPEECH_BUBBLE_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          IDEA_SPEECH_BUBBLE_ICON

          +
          public static final File IDEA_SPEECH_BUBBLE_ICON
          +
        • +
        + + + +
          +
        • +

          INFO_CIRCLE_SIMPLE_FILLED_ICON

          +
          public static final File INFO_CIRCLE_SIMPLE_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          INFO_CIRCLE_SIMPLE_ICON

          +
          public static final File INFO_CIRCLE_SIMPLE_ICON
          +
        • +
        + + + +
          +
        • +

          INFO_CIRCLE_FILLED_ICON

          +
          public static final File INFO_CIRCLE_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          INFO_CIRCLE_ICON

          +
          public static final File INFO_CIRCLE_ICON
          +
        • +
        + + + +
          +
        • +

          INFO_SPEECH_BOX_FILLED_ICON

          +
          public static final File INFO_SPEECH_BOX_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          INFO_SPEECH_BOX_ICON

          +
          public static final File INFO_SPEECH_BOX_ICON
          +
        • +
        + + + +
          +
        • +

          INFO_CIRCLE_THIN_ICON

          +
          public static final File INFO_CIRCLE_THIN_ICON
          +
        • +
        + + + +
          +
        • +

          KEYBORD_FILLED_ICON

          +
          public static final File KEYBORD_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          KEYBORD_ICON

          +
          public static final File KEYBORD_ICON
          +
        • +
        + + + +
          +
        • +

          KEYBORD_COMPACT_FILLED_ICON

          +
          public static final File KEYBORD_COMPACT_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          KEYBORD_COMPACT_ICON

          +
          public static final File KEYBORD_COMPACT_ICON
          +
        • +
        + + + +
          +
        • +

          KEYBORD_OPEN_FILLED_ICON

          +
          public static final File KEYBORD_OPEN_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          KEYBORD_OPEN_ICON

          +
          public static final File KEYBORD_OPEN_ICON
          +
        • +
        + + + +
          +
        • +

          KEYBORD_CLOSE_FILLED_ICON

          +
          public static final File KEYBORD_CLOSE_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          KEYBORD_CLOSE_ICON

          +
          public static final File KEYBORD_CLOSE_ICON
          +
        • +
        + + + +
          +
        • +

          LIGHT_BULB_1_ICON

          +
          public static final File LIGHT_BULB_1_ICON
          +
        • +
        + + + +
          +
        • +

          LIGHT_BULB_2_FILLED_ICON

          +
          public static final File LIGHT_BULB_2_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          LIGHT_BULB_2_ICON

          +
          public static final File LIGHT_BULB_2_ICON
          +
        • +
        + + + +
          +
        • +

          LIGHT_BULB_3_FILLED_ICON

          +
          public static final File LIGHT_BULB_3_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          LIGHT_BULB_3_ICON

          +
          public static final File LIGHT_BULB_3_ICON
          +
        • +
        + + + +
          +
        • +

          MAGIC_1_ICON

          +
          public static final File MAGIC_1_ICON
          +
        • +
        + + + +
          +
        • +

          MAGIC_2_ICON

          +
          public static final File MAGIC_2_ICON
          +
        • +
        + + + +
          +
        • +

          MENU_ICON

          +
          public static final File MENU_ICON
          +
        • +
        + + + +
          +
        • +

          MENU_DOTS_HORIZONTAL_FILLED_ICON

          +
          public static final File MENU_DOTS_HORIZONTAL_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          MENU_DOTS_VERTICAL_FILLED_ICON

          +
          public static final File MENU_DOTS_VERTICAL_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          MENU_DOTS_HORIZONTAL_ICON

          +
          public static final File MENU_DOTS_HORIZONTAL_ICON
          +
        • +
        + + + +
          +
        • +

          MENU_DOTS_VERTICAL_ICON

          +
          public static final File MENU_DOTS_VERTICAL_ICON
          +
        • +
        + + + +
          +
        • +

          MENU_THIN_ICON

          +
          public static final File MENU_THIN_ICON
          +
        • +
        + + + +
          +
        • +

          MONITOR_FILLED_ICON

          +
          public static final File MONITOR_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          MONITOR_ICON

          +
          public static final File MONITOR_ICON
          +
        • +
        + + + +
          +
        • +

          PAINT_BRUSH_FILLED_ICON

          +
          public static final File PAINT_BRUSH_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          PAINT_BRUSH_ICON

          +
          public static final File PAINT_BRUSH_ICON
          +
        • +
        + + + +
          +
        • +

          PAINT_BRUSH_WINDOW_ICON

          +
          public static final File PAINT_BRUSH_WINDOW_ICON
          +
        • +
        + + + +
          +
        • +

          PAINT_BRUSH_BUCKET_FILLED_ICON

          +
          public static final File PAINT_BRUSH_BUCKET_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          PAINT_BRUSH_BUCKET_ICON

          +
          public static final File PAINT_BRUSH_BUCKET_ICON
          +
        • +
        + + + +
          +
        • +

          PREFERENCES_GEAR_1_ICON

          +
          public static final File PREFERENCES_GEAR_1_ICON
          +
        • +
        + + + +
          +
        • +

          PREFERENCES_GEAR_2_ICON

          +
          public static final File PREFERENCES_GEAR_2_ICON
          +
        • +
        + + + +
          +
        • +

          PREFERENCES_GEAR_3_ICON

          +
          public static final File PREFERENCES_GEAR_3_ICON
          +
        • +
        + + + +
          +
        • +

          PREFERENCES_GEAR_THIN_ICON

          +
          public static final File PREFERENCES_GEAR_THIN_ICON
          +
        • +
        + + + +
          +
        • +

          PREFERENCES_WRENCH_RESET_ICON

          +
          public static final File PREFERENCES_WRENCH_RESET_ICON
          +
        • +
        + + + +
          +
        • +

          PREFERENCES_WRENCH_ICON

          +
          public static final File PREFERENCES_WRENCH_ICON
          +
        • +
        + + + +
          +
        • +

          QUESTION_CIRCLE_FILLED_ICON

          +
          public static final File QUESTION_CIRCLE_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          QUESTION_CIRCLE_ICON

          +
          public static final File QUESTION_CIRCLE_ICON
          +
        • +
        + + + +
          +
        • +

          QUESTION_SPEECH_BUBBLE_FILLED_ICON

          +
          public static final File QUESTION_SPEECH_BUBBLE_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          QUESTION_SPEECH_BUBBLE_ICON

          +
          public static final File QUESTION_SPEECH_BUBBLE_ICON
          +
        • +
        + + + +
          +
        • +

          QUESTION_THIN_ICON

          +
          public static final File QUESTION_THIN_ICON
          +
        • +
        + + + +
          +
        • +

          SUN_FILLED_ICON

          +
          public static final File SUN_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          SUN_ICON

          +
          public static final File SUN_ICON
          +
        • +
        + + + +
          +
        • +

          SYNC_1_ICON

          +
          public static final File SYNC_1_ICON
          +
        • +
        + + + +
          +
        • +

          SYNC_2_ICON

          +
          public static final File SYNC_2_ICON
          +
        • +
        + + + +
          +
        • +

          TEXTFIELD_ICON

          +
          public static final File TEXTFIELD_ICON
          +
        • +
        + + + +
          +
        • +

          TEXTFIELD_1_ICON

          +
          public static final File TEXTFIELD_1_ICON
          +
        • +
        + + + +
          +
        • +

          TRASH_FILLED_ICON

          +
          public static final File TRASH_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          TRASH_ICON

          +
          public static final File TRASH_ICON
          +
        • +
        + + + +
          +
        • +

          TRASH_X_FILLED_ICON

          +
          public static final File TRASH_X_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          TRASH_X_ICON

          +
          public static final File TRASH_X_ICON
          +
        • +
        + + + +
          +
        • +

          TRASH_THIN_ICON

          +
          public static final File TRASH_THIN_ICON
          +
        • +
        + + + +
          +
        • +

          WINDOW_ICON

          +
          public static final File WINDOW_ICON
          +
        • +
        + + + +
          +
        • +

          WINDOW_THIN_ICON

          +
          public static final File WINDOW_THIN_ICON
          +
        • +
        + + + +
          +
        • +

          WINDOW_THIN_2_ICON

          +
          public static final File WINDOW_THIN_2_ICON
          +
        • +
        + + + +
          +
        • +

          X_MARK_SQUARE_FILLED_ICON

          +
          public static final File X_MARK_SQUARE_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          X_MARK_SQUARE_ICON

          +
          public static final File X_MARK_SQUARE_ICON
          +
        • +
        + + + +
          +
        • +

          X_MARK_1_ICON

          +
          public static final File X_MARK_1_ICON
          +
        • +
        + + + +
          +
        • +

          X_MARK_2_ICON

          +
          public static final File X_MARK_2_ICON
          +
        • +
        + + + +
          +
        • +

          X_MARK_CIRCLE_1_FILLED_ICON

          +
          public static final File X_MARK_CIRCLE_1_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          X_MARK_CIRCLE_1_ICON

          +
          public static final File X_MARK_CIRCLE_1_ICON
          +
        • +
        + + + +
          +
        • +

          X_MARK_CIRCLE_2_FILLED_ICON

          +
          public static final File X_MARK_CIRCLE_2_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          X_MARK_CIRCLE_2_ICON

          +
          public static final File X_MARK_CIRCLE_2_ICON
          +
        • +
        + + + +
          +
        • +

          X_MARK_CIRCLE_THIN_ICON

          +
          public static final File X_MARK_CIRCLE_THIN_ICON
          +
        • +
        + + + +
          +
        • +

          X_MARK_THIN_ICON

          +
          public static final File X_MARK_THIN_ICON
          +
        • +
        + + + +
          +
        • +

          X_MARK_ARROW_LEFT_FILLED_ICON

          +
          public static final File X_MARK_ARROW_LEFT_FILLED_ICON
          +
        • +
        + + + +
          +
        • +

          X_MARK_ARROW_LEFT_ICON

          +
          public static final File X_MARK_ARROW_LEFT_ICON
          +
        • +
        + + + +
          +
        • +

          ZOOM_IN_ICON

          +
          public static final File ZOOM_IN_ICON
          +
        • +
        + + + +
          +
        • +

          ZOOM_OUT_ICON

          +
          public static final File ZOOM_OUT_ICON
          +
        • +
        + + + +
          +
        • +

          ZOOM_IN_THIN_ICON

          +
          public static final File ZOOM_IN_THIN_ICON
          +
        • +
        + + + +
          +
        • +

          ZOOM_OUT_THIN_ICON

          +
          public static final File ZOOM_OUT_THIN_ICON
          +
        • +
        + + + + +
      • +
      +
      + +
      +
        +
      • + + +

        Method Detail

        + + + +
          +
        • +

          getResourceAsExternalForm

          +
          public static String getResourceAsExternalForm​(String name)
          +
        • +
        + + + +
          +
        • +

          getResourceAsFile

          +
          public static File getResourceAsFile​(String name)
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + + + + diff --git a/doc/0.1.4/en_public/bitchanger/util/TriConsumer.html b/doc/0.1.4/en_public/bitchanger/util/TriConsumer.html new file mode 100644 index 0000000..41d4cc6 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/util/TriConsumer.html @@ -0,0 +1,282 @@ + + + + + +TriConsumer + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + +

    Interface TriConsumer<T,​U,​V>

    +
    +
    +
    +
      +
    • +
      +
      Type Parameters:
      +
      T - the type of the first argument to the operation
      +
      U - the type of the second argument to the operation
      +
      V - the type of the third argument to the operation
      +
      +
      +
      Functional Interface:
      +
      This is a functional interface and can therefore be used as the assignment target for a lambda expression or method reference.
      +
      +
      +
      @FunctionalInterface
      +public interface TriConsumer<T,​U,​V>
      +
      Represents an operation that accepts three input arguments and returns no result.
      +
      +
      Author:
      +
      Tim Muehle
      +
      +
    • +
    +
    +
    +
      +
    • + +
      + +
      +
    • +
    +
    +
    +
      +
    • + +
      +
        +
      • + + +

        Method Detail

        + + + + + +
          +
        • +

          accept

          +
          void accept​(T t,
          +            U u,
          +            V v)
          +
          Performs this operation on the given arguments.
          +
          +
          Parameters:
          +
          t - the first input argument
          +
          u - the second input argument
          +
          v - the third input argument
          +
          +
        • +
        +
      • +
      +
      +
    • +
    +
    +
    +
    + +
    + +
    + + diff --git a/doc/0.1.4/en_public/bitchanger/util/class-use/ArrayUtils.html b/doc/0.1.4/en_public/bitchanger/util/class-use/ArrayUtils.html new file mode 100644 index 0000000..2a18a41 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/util/class-use/ArrayUtils.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.util.ArrayUtils + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.util.ArrayUtils

    +
    +
    No usage of bitchanger.util.ArrayUtils
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/util/class-use/FXUtils.html b/doc/0.1.4/en_public/bitchanger/util/class-use/FXUtils.html new file mode 100644 index 0000000..a30d50f --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/util/class-use/FXUtils.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.util.FXUtils + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.util.FXUtils

    +
    +
    No usage of bitchanger.util.FXUtils
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/util/class-use/IconFactory.html b/doc/0.1.4/en_public/bitchanger/util/class-use/IconFactory.html new file mode 100644 index 0000000..3eabfeb --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/util/class-use/IconFactory.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.util.IconFactory + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.util.IconFactory

    +
    +
    No usage of bitchanger.util.IconFactory
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/util/class-use/Resources.html b/doc/0.1.4/en_public/bitchanger/util/class-use/Resources.html new file mode 100644 index 0000000..38a0c18 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/util/class-use/Resources.html @@ -0,0 +1,149 @@ + + + + + +Uses of Class bitchanger.util.Resources + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    bitchanger.util.Resources

    +
    +
    No usage of bitchanger.util.Resources
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/util/class-use/TriConsumer.html b/doc/0.1.4/en_public/bitchanger/util/class-use/TriConsumer.html new file mode 100644 index 0000000..67393e0 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/util/class-use/TriConsumer.html @@ -0,0 +1,202 @@ + + + + + +Uses of Interface bitchanger.util.TriConsumer + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    bitchanger.util.TriConsumer

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_public/bitchanger/util/package-summary.html b/doc/0.1.4/en_public/bitchanger/util/package-summary.html new file mode 100644 index 0000000..2c084fe --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/util/package-summary.html @@ -0,0 +1,203 @@ + + + + + +bitchanger.util + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Package bitchanger.util

    +
    +
    +
    + + +
    Contains Classes with general and cross-class methods.
    +
    +
      +
    • + + + + + + + + + + + + +
      Interface Summary 
      InterfaceDescription
      TriConsumer<T,​U,​V> +
      Represents an operation that accepts three input arguments and returns no result.
      +
      +
    • +
    • + + + + + + + + + + + + + + + + + + + + + + + + +
      Class Summary 
      ClassDescription
      ArrayUtils 
      FXUtils +
      Utility class to handle objects whose belong to the user interface.
      +
      IconFactory 
      Resources 
      +
    • +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/bitchanger/util/package-tree.html b/doc/0.1.4/en_public/bitchanger/util/package-tree.html new file mode 100644 index 0000000..65bc841 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/util/package-tree.html @@ -0,0 +1,173 @@ + + + + + +bitchanger.util Class Hierarchy + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package bitchanger.util

    +Package Hierarchies: + +
    +
    +
    +

    Class Hierarchy

    + +
    +
    +

    Interface Hierarchy

    + +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/bitchanger/util/package-use.html b/doc/0.1.4/en_public/bitchanger/util/package-use.html new file mode 100644 index 0000000..088ee63 --- /dev/null +++ b/doc/0.1.4/en_public/bitchanger/util/package-use.html @@ -0,0 +1,188 @@ + + + + + +Uses of Package bitchanger.util + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    bitchanger.util

    +
    +
    + +
    +
    + + + diff --git a/doc/0.1.4/en_public/constant-values.html b/doc/0.1.4/en_public/constant-values.html new file mode 100644 index 0000000..2b571b8 --- /dev/null +++ b/doc/0.1.4/en_public/constant-values.html @@ -0,0 +1,641 @@ + + + + + +Constant Field Values + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Constant Field Values

    +
    +

    Contents

    + +
    +
    +
    + + +
    +

    bitchanger.calculations.*

    + +
    + + + +
    +

    bitchanger.gui.*

    + + +
    + + + +
    +

    bitchanger.main.*

    + +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/deprecated-list.html b/doc/0.1.4/en_public/deprecated-list.html new file mode 100644 index 0000000..70308da --- /dev/null +++ b/doc/0.1.4/en_public/deprecated-list.html @@ -0,0 +1,149 @@ + + + + + +Deprecated List + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Deprecated API

    +

    Contents

    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/element-list b/doc/0.1.4/en_public/element-list new file mode 100644 index 0000000..685c0f3 --- /dev/null +++ b/doc/0.1.4/en_public/element-list @@ -0,0 +1,7 @@ +bitchanger.calculations +bitchanger.gui.controller +bitchanger.gui.controls +bitchanger.gui.views +bitchanger.main +bitchanger.preferences +bitchanger.util diff --git a/doc/0.1.4/en_public/help-doc.html b/doc/0.1.4/en_public/help-doc.html new file mode 100644 index 0000000..7b3dc9b --- /dev/null +++ b/doc/0.1.4/en_public/help-doc.html @@ -0,0 +1,281 @@ + + + + + +API Help + + + + + + + + + + + + + + + +
    + +
    +
    +
    +

    How This API Document Is Organized

    +
    This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.
    +
    +
    +
      +
    • +
      +

      Overview

      +

      The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

      +
      +
    • +
    • +
      +

      Package

      +

      Each package has a page that contains a list of its classes and interfaces, with a summary for each. These pages may contain six categories:

      +
        +
      • Interfaces
      • +
      • Classes
      • +
      • Enums
      • +
      • Exceptions
      • +
      • Errors
      • +
      • Annotation Types
      • +
      +
      +
    • +
    • +
      +

      Class or Interface

      +

      Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

      +
        +
      • Class Inheritance Diagram
      • +
      • Direct Subclasses
      • +
      • All Known Subinterfaces
      • +
      • All Known Implementing Classes
      • +
      • Class or Interface Declaration
      • +
      • Class or Interface Description
      • +
      +
      +
        +
      • Nested Class Summary
      • +
      • Field Summary
      • +
      • Property Summary
      • +
      • Constructor Summary
      • +
      • Method Summary
      • +
      +
      +
        +
      • Field Detail
      • +
      • Property Detail
      • +
      • Constructor Detail
      • +
      • Method Detail
      • +
      +

      Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

      +
      +
    • +
    • +
      +

      Annotation Type

      +

      Each annotation type has its own separate page with the following sections:

      +
        +
      • Annotation Type Declaration
      • +
      • Annotation Type Description
      • +
      • Required Element Summary
      • +
      • Optional Element Summary
      • +
      • Element Detail
      • +
      +
      +
    • +
    • +
      +

      Enum

      +

      Each enum has its own separate page with the following sections:

      +
        +
      • Enum Declaration
      • +
      • Enum Description
      • +
      • Enum Constant Summary
      • +
      • Enum Constant Detail
      • +
      +
      +
    • +
    • +
      +

      Use

      +

      Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its "Use" page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.

      +
      +
    • +
    • +
      +

      Tree (Class Hierarchy)

      +

      There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. Classes are organized by inheritance structure starting with java.lang.Object. Interfaces do not inherit from java.lang.Object.

      +
        +
      • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
      • +
      • When viewing a particular package, class or interface page, clicking on "Tree" displays the hierarchy for only that package.
      • +
      +
      +
    • +
    • +
      +

      Deprecated API

      +

      The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.

      +
      +
    • +
    • +
      +

      Index

      +

      The Index contains an alphabetic index of all classes, interfaces, constructors, methods, and fields, as well as lists of all packages and all classes.

      +
      +
    • +
    • +
      +

      All Classes

      +

      The All Classes link shows all classes and interfaces except non-static nested types.

      +
      +
    • +
    • +
      +

      Serialized Form

      +

      Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.

      +
      +
    • +
    • +
      +

      Constant Field Values

      +

      The Constant Field Values page lists the static final fields and their values.

      +
      +
    • +
    • +
      +

      Search

      +

      You can search for definitions of modules, packages, types, fields, methods and other terms defined in the API, using some or all of the name. "Camel-case" abbreviations are supported: for example, "InpStr" will find "InputStream" and "InputStreamReader".

      +
      +
    • +
    +
    +This help file applies to API documentation generated by the standard doclet.
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/index-files/index-1.html b/doc/0.1.4/en_public/index-files/index-1.html new file mode 100644 index 0000000..df0aa8d --- /dev/null +++ b/doc/0.1.4/en_public/index-files/index-1.html @@ -0,0 +1,243 @@ + + + + + +A-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    A

    +
    +
    ABC_BRICKS_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ABC_BRICKS_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    about - Variable in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    ABOUT - bitchanger.gui.controls.InformationDialog.InformationType
    +
     
    +
    accept(T, U, V) - Method in interface bitchanger.util.TriConsumer
    +
    +
    Performs this operation on the given arguments.
    +
    +
    addColumnConstraint(int, AlphaNumGridView.ConstraintType) - Method in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    addRowConstraint(int, AlphaNumGridView.ConstraintType) - Method in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    ALPHA_KEYS - Static variable in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    alphaKeys - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    alphaNum - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    AlphaNumGridView - Class in bitchanger.gui.views
    +
     
    +
    AlphaNumGridView(int, int) - Constructor for class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    AlphaNumGridView(int, int, int, int, int, int, String[], String...) - Constructor for class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    AlphaNumGridView(int, int, int, int, int, int, String[], String[], double, double, double, double, double, double, double) - Constructor for class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    AlphaNumGridView(int, int, int, int, int, int, String[], String[], double, double, double, double, double, double, double, double, double, double, double, double, double, double, double) - Constructor for class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    AlphaNumGridView(String[], String...) - Constructor for class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    AlphaNumGridView.ConstraintType - Enum in bitchanger.gui.views
    +
     
    +
    AlphaNumKeys - Class in bitchanger.gui.controls
    +
     
    +
    AlphaNumKeys(int, int, double, Scene) - Constructor for class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    AlphaNumKeys(int, int, DoubleProperty, Scene) - Constructor for class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    AlphaNumKeysController - Class in bitchanger.gui.controller
    +
    +
    This controller gives the operating elements of an instance of AlphaNumKeys a function and links the simulation + of the keyboard to the encapsulated scene.
    +
    +
    AlphaNumKeysController(AlphaNumKeys, Scene) - Constructor for class bitchanger.gui.controller.AlphaNumKeysController
    +
    +
    Produces a new controller that gives function to an AlphaNumKeys.
    +
    +
    ANGEL_DOWN_CIRCLE_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ANGEL_DOWN_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ANGEL_LEFT_CIRCLE_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ANGEL_LEFT_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ANGEL_RIGHT_CIRCLE_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ANGEL_RIGHT_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ANGEL_UP_CIRCLE_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ANGEL_UP_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    arrayOf(T...) - Static method in class bitchanger.util.ArrayUtils
    +
    +
    Converts the given Objects to an Array
    +
    +
    ArrayUtils - Class in bitchanger.util
    +
     
    +
    ARROW_DOWN_CIRCLE_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ARROW_DOWN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ARROW_LEFT_CIRCLE_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ARROW_LEFT_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ARROW_RIGHT_CIRCLE_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ARROW_RIGHT_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ARROW_UP_CIRCLE_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ARROW_UP_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    asDouble() - Method in interface bitchanger.calculations.ChangeableNumber
    +
     
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/index-files/index-10.html b/doc/0.1.4/en_public/index-files/index-10.html new file mode 100644 index 0000000..4028e05 --- /dev/null +++ b/doc/0.1.4/en_public/index-files/index-10.html @@ -0,0 +1,172 @@ + + + + + +K-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    K

    +
    +
    KEYBOARD_BTN_KEY - Static variable in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    keyboardBtnKey - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    KEYBORD_CLOSE_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    KEYBORD_CLOSE_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    KEYBORD_COMPACT_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    KEYBORD_COMPACT_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    KEYBORD_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    KEYBORD_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    KEYBORD_OPEN_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    KEYBORD_OPEN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/index-files/index-11.html b/doc/0.1.4/en_public/index-files/index-11.html new file mode 100644 index 0000000..3daddd2 --- /dev/null +++ b/doc/0.1.4/en_public/index-files/index-11.html @@ -0,0 +1,191 @@ + + + + + +L-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    L

    +
    +
    labelColumn - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    labelTexts - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    launchFXApplication(String[]) - Static method in class bitchanger.main.PrimaryFXApp
    +
    +
    Starts the applications and opens the application window.
    +
    +
    LAYOUT_CSS - Static variable in class bitchanger.util.Resources
    +
     
    +
    LIGHT - bitchanger.preferences.Style
    +
    +
    Constant for a light layout
    +
    +
    LIGHT_BULB_1_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    LIGHT_BULB_2_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    LIGHT_BULB_2_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    LIGHT_BULB_3_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    LIGHT_BULB_3_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    LIGHT_CSS - Static variable in class bitchanger.util.Resources
    +
     
    +
    loadCustom() - Static method in class bitchanger.preferences.Preferences
    +
    +
    Loads the last settings from the file Resources.CUSTOM_PREFERENCES
    +
    +
    loadDefault() - Static method in class bitchanger.preferences.Preferences
    +
    +
    Loads the default settings from the file Resources.DEFAULT_PREFERENCES
    +
    +
    loadSVG(File) - Static method in class bitchanger.util.FXUtils
    +
    +
    Loads an icon in svg format from the given file and creates an SVGPath object from the file that can be added to + the Scenegraph in javaFX.
    +
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/index-files/index-12.html b/doc/0.1.4/en_public/index-files/index-12.html new file mode 100644 index 0000000..43fe6dd --- /dev/null +++ b/doc/0.1.4/en_public/index-files/index-12.html @@ -0,0 +1,214 @@ + + + + + +M-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    M

    +
    +
    MAGIC_1_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    MAGIC_2_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    main(String[]) - Static method in class bitchanger.main.BitchangerLauncher
    +
    +
    The main method launches the application's main window and waits until this main window was closed.
    +
    +
    MAX_BASE - Static variable in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Constant for the highest possible base of 36 characters given through 0-9 and A-Z
    +
    +
    MENU_DOTS_HORIZONTAL_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    MENU_DOTS_HORIZONTAL_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    MENU_DOTS_VERTICAL_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    MENU_DOTS_VERTICAL_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    MENU_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    MENU_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    menubar - Variable in class bitchanger.gui.views.ViewBase
    +
     
    +
    menuItemMap - Variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Map in which all MenuItems required by the controller are stored with a unique key
    +
    +
    MIN_BASE - Static variable in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Constant for the lowest possible base
    +
    +
    MODUS_CALCULATOR_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Key with which the MenuItem "Berechnungen" is associated in the Map BasicMenuBar.menuItemMap
    +
    +
    MODUS_CONVERTER_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Key with which the MenuItem "Umrechner" is associated in the Map BasicMenuBar.menuItemMap
    +
    +
    MODUS_IEEE_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Key with which the MenuItem "IEEE" is associated in the Map BasicMenuBar.menuItemMap
    +
    +
    MODUS_MENU_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Key with which the Menu "Modus" is associated in the Map BasicMenuBar.menuItemMap
    +
    +
    modusCalculator - Variable in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    modusConverter - Variable in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    modusIEEE - Variable in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    MONITOR_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    MONITOR_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    moveToScreen - Variable in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/index-files/index-13.html b/doc/0.1.4/en_public/index-files/index-13.html new file mode 100644 index 0000000..30349ca --- /dev/null +++ b/doc/0.1.4/en_public/index-files/index-13.html @@ -0,0 +1,164 @@ + + + + + +N-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    N

    +
    +
    NEXT_BTN_KEY - Static variable in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    nextBtnKey - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    nodeMap - Variable in class bitchanger.gui.controller.ControllerBase
    +
     
    +
    NONE - bitchanger.gui.controls.InformationDialog.InformationType
    +
     
    +
    NUM_KEYS - Static variable in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    numKeys - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/index-files/index-14.html b/doc/0.1.4/en_public/index-files/index-14.html new file mode 100644 index 0000000..4cbdcc2 --- /dev/null +++ b/doc/0.1.4/en_public/index-files/index-14.html @@ -0,0 +1,172 @@ + + + + + +O-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    O

    +
    +
    of(Controllable) - Static method in interface bitchanger.gui.controller.Controller
    +
    +
    Factory method that creates and returns a new Controller for the given Controllable.
    +
    +
    ofArg(Controllable, Object...) - Static method in interface bitchanger.gui.controller.Controller
    +
    +
    Factory method that creates and returns a new Controller for the given Controllable.
    +
    +
    ofSVGFile(File) - Static method in class bitchanger.util.IconFactory
    +
     
    +
    options - Variable in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    OPTIONS_INDICATE_FRACTIONAL_INACCURACY_CHECK_ITEM_KEY - Static variable in class bitchanger.gui.controls.ConverterMenuBar
    +
    +
    Key with which the CheckMenuItem "abgeschnittene Nachkommastellen kennzeichnen" is associated in the Map BasicMenuBar.menuItemMap
    +
    +
    OPTIONS_MENU_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Key with which the Menu "Optionen" is associated in the Map BasicMenuBar.menuItemMap
    +
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/index-files/index-15.html b/doc/0.1.4/en_public/index-files/index-15.html new file mode 100644 index 0000000..01158dd --- /dev/null +++ b/doc/0.1.4/en_public/index-files/index-15.html @@ -0,0 +1,198 @@ + + + + + +P-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    P

    +
    +
    paddingBottomProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    paddingLeftProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    paddingRigthProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    paddingTopProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    PAINT_BRUSH_BUCKET_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    PAINT_BRUSH_BUCKET_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    PAINT_BRUSH_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    PAINT_BRUSH_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    PAINT_BRUSH_WINDOW_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    Preferences - Class in bitchanger.preferences
    +
    +
    Preferences is the global collection for all possible settings that can be selected for the bitchanger.
    +
    +
    PREFERENCES_GEAR_1_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    PREFERENCES_GEAR_2_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    PREFERENCES_GEAR_3_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    PREFERENCES_GEAR_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    PREFERENCES_WRENCH_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    PREFERENCES_WRENCH_RESET_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    PREVIOUS_BTN_KEY - Static variable in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    previousBtnKey - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    PrimaryFXApp - Class in bitchanger.main
    +
    +
    Main window of the application with javaFX
    +
    +
    PrimaryFXApp() - Constructor for class bitchanger.main.PrimaryFXApp
    +
    +
    Construct a new PrimaryFXApp for the Bitchanger
    +
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/index-files/index-16.html b/doc/0.1.4/en_public/index-files/index-16.html new file mode 100644 index 0000000..5cedd5b --- /dev/null +++ b/doc/0.1.4/en_public/index-files/index-16.html @@ -0,0 +1,162 @@ + + + + + +Q-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    Q

    +
    +
    QUESTION_CIRCLE_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    QUESTION_CIRCLE_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    QUESTION_SPEECH_BUBBLE_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    QUESTION_SPEECH_BUBBLE_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    QUESTION_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/index-files/index-17.html b/doc/0.1.4/en_public/index-files/index-17.html new file mode 100644 index 0000000..af651ff --- /dev/null +++ b/doc/0.1.4/en_public/index-files/index-17.html @@ -0,0 +1,185 @@ + + + + + +R-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    R

    +
    +
    readOnlyStyleProperty - Variable in class bitchanger.preferences.Preferences
    +
    +
    ReadOnlyProperty for the selected Stylesheet
    +
    +
    readOnlyStylesheetProperty - Variable in class bitchanger.preferences.Preferences
    +
    +
    ReadOnlyProperty for the selected Stylesheet
    +
    +
    register(Class<? extends Controllable>, Class<? extends Controller>) - Static method in interface bitchanger.gui.controller.Controller
    +
    +
    Registers a Controller class for the factory method Controller.of(Controllable) + and assigns it to a Controllable class.
    +
    +
    REGISTERED_CONTROLLERS - Static variable in interface bitchanger.gui.controller.Controller
    +
    +
    Map that saves the Controllers registered for a Controllable and associates them
    +
    +
    reset() - Method in interface bitchanger.calculations.ChangeableNumber
    +
    +
    Resets the wrapped value.
    +
    +
    reset() - Method in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Resets the wrapped value.
    +
    +
    resetPreferences - Variable in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    Resources - Class in bitchanger.util
    +
     
    +
    root - Variable in class bitchanger.gui.views.ViewBase
    +
     
    +
    ROW_COUNT - Static variable in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/index-files/index-18.html b/doc/0.1.4/en_public/index-files/index-18.html new file mode 100644 index 0000000..228cade --- /dev/null +++ b/doc/0.1.4/en_public/index-files/index-18.html @@ -0,0 +1,344 @@ + + + + + +S-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    S

    +
    +
    scene - Variable in class bitchanger.gui.views.ViewBase
    +
     
    +
    set(double) - Method in interface bitchanger.calculations.ChangeableNumber
    +
     
    +
    setActions() - Method in class bitchanger.gui.controller.AlphaNumKeysController
    +
    +
    Sets actions to switch the keyboard mode, to scroll between the different keyboard layouts, to update the comma button + and simulates the keyboard inputs for the alphanumeric buttons
    +
    +
    setActions() - Method in class bitchanger.gui.controller.BasicMenuController
    +
    +
    Sets all functions that are needed for the view.
    +
    +
    setActions() - Method in interface bitchanger.gui.controller.Controller
    +
    +
    Sets all functions that are needed for the view.
    +
    +
    setActions() - Method in class bitchanger.gui.controller.ConverterController
    +
    +
    Sets all functions that are needed for the view.
    +
    +
    setActions() - Method in class bitchanger.gui.controller.ConverterMenuController
    +
    +
    Sets all functions that are needed for the view.
    +
    +
    setActions() - Method in class bitchanger.gui.controller.IEEEController
    +
    +
    Sets all functions that are needed for the view.
    +
    +
    setBase(int) - Method in class bitchanger.gui.controls.ValueButton
    +
    +
    Sets the value of the base
    +
    +
    setBase(int) - Method in class bitchanger.gui.controls.ValueField
    +
    +
    Sets the value of ValueField.baseProperty
    +
    +
    setBin(String) - Method in interface bitchanger.calculations.ChangeableNumber
    +
    +
    Sets the value of this ChangeableNumber to the value of a binary string
    +
    +
    setBin(String) - Method in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Sets the value of this ChangeableNumber to the value of a binary string
    +
    +
    setDec(String) - Method in interface bitchanger.calculations.ChangeableNumber
    +
    +
    Sets the value of this ChangeableNumber to the value of a decimal string
    +
    +
    setDec(String) - Method in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Sets the value of this ChangeableNumber to the value of a decimal string
    +
    +
    setGraphicScaleFactor(Double) - Method in class bitchanger.gui.controls.UnfocusedButton
    +
     
    +
    setGridConstraints(int, int, int, int, Queue<T>) - Static method in class bitchanger.util.FXUtils
    +
    +
    Sets the constrains of the nodes in a queue to position these in a GridPane.
    +
    +
    setGridConstraints(int, int, int, int, Queue<T>, TriConsumer<Node, Integer, Integer>) - Static method in class bitchanger.util.FXUtils
    +
    +
    Proceed nodes as a table in a queue.
    +
    +
    setHex(String) - Method in interface bitchanger.calculations.ChangeableNumber
    +
    +
    Sets the value of this ChangeableNumber to the value of a hexadecimal string
    +
    +
    setHex(String) - Method in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Sets the value of this ChangeableNumber to the value of a hexadecimal string
    +
    +
    setIconOrText(Labeled, SVGIcon) - Static method in class bitchanger.util.FXUtils
    +
     
    +
    setIconOrText(Labeled, SVGIcon, String) - Static method in class bitchanger.util.FXUtils
    +
     
    +
    setIconOrText(MenuItem, SVGIcon) - Static method in class bitchanger.util.FXUtils
    +
     
    +
    setIconOrText(MenuItem, SVGIcon, String) - Static method in class bitchanger.util.FXUtils
    +
     
    +
    setIndicateFractionalPrecision(boolean) - Method in class bitchanger.preferences.Preferences
    +
    +
    Turns the view of cancelled fractional parts on and off
    +
    +
    setMaxSizes(Iterable<? extends Node>, double) - Static method in class bitchanger.util.FXUtils
    +
    +
    Sets the maximum size of all controls inside an Iterable to the value of maxSize.
    +
    +
    setMaxSizes(Iterable<? extends Node>, double, double) - Static method in class bitchanger.util.FXUtils
    +
    +
    Sets the maximum width of all controls inside an Iterable to the value of maxWidth and + the maximum heights to the value of maxHeight.
    +
    +
    setMenuBar(T) - Method in interface bitchanger.gui.views.Viewable
    +
    +
    Adds the given MenuBar to this View's scenegraph.
    +
    +
    setMenuBar(V) - Method in class bitchanger.gui.views.ViewBase
    +
    +
    Adds the given MenuBar to this View's scenegraph.
    +
    +
    setOct(String) - Method in interface bitchanger.calculations.ChangeableNumber
    +
    +
    Sets the value of this ChangeableNumber to the value of an octal string
    +
    +
    setOct(String) - Method in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Sets the value of this ChangeableNumber to the value of an octal string
    +
    +
    setStylesheet(Style) - Method in class bitchanger.preferences.Preferences
    +
     
    +
    setStylesheet(String) - Method in class bitchanger.preferences.Preferences
    +
     
    +
    setSVG(SVGPath) - Method in class bitchanger.gui.controls.SVGIcon
    +
     
    +
    setTFColumnSpan - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    setValue(String, int) - Method in interface bitchanger.calculations.ChangeableNumber
    +
    +
    Sets the value of this ChangeableNumber to a value of any numeral system
    +
    +
    setValue(String, int) - Method in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Sets the value of this ChangeableNumber to a value of any numeral system
    +
    +
    showFullscreen - Variable in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    SIGN_BTN_KEY - Static variable in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    signBtnKey - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    SimpleChangeableNumber - Class in bitchanger.calculations
    +
    +
    The class SimpleChangeableNumber offers a complete implementation of ChangeableNumber.
    +
    +
    SimpleChangeableNumber() - Constructor for class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Generates a new instance with 0 as wrapped value
    +
    +
    SimpleChangeableNumber(String) - Constructor for class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Generates a new instance that represents the committed decimal value
    +
    +
    simulateKeyEvents(Button, Node, Scene, String, String, KeyCode) - Method in class bitchanger.gui.controller.ControllerBase
    +
     
    +
    simulateKeyEvents(Button, Node, Scene, String, String, KeyCode, boolean, boolean, boolean, boolean) - Method in class bitchanger.gui.controller.ControllerBase
    +
     
    +
    spacingProperty - Variable in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    splitInBlocks(String, int) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Splits the String value into blocks of the given length.
    +
    +
    start(Stage) - Method in class bitchanger.main.PrimaryFXApp
    +
    +
    This method creates the content for the main window and opens it.
    +
    +
    storeCaretPosition(ObservableValue<? extends Number>, Number, Number) - Method in class bitchanger.gui.controls.ValueField
    +
    +
    Stores the last known CaretPosition to reset it.
    +
    +
    storeCustom() - Static method in class bitchanger.preferences.Preferences
    +
    +
    Stores the current settings in the File Resources.CUSTOM_PREFERENCES
    +
    +
    Style - Enum in bitchanger.preferences
    +
    +
    Enum of different styles that are available as CSS files for javaFX
    +
    +
    styleBindIcon(File, File) - Static method in class bitchanger.util.IconFactory
    +
     
    +
    styleDark - Variable in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    styleLight - Variable in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    styleMenu - Variable in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    SUN_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    SUN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    SVGIcon - Class in bitchanger.gui.controls
    +
     
    +
    SVGIcon() - Constructor for class bitchanger.gui.controls.SVGIcon
    +
     
    +
    SVGIcon(File) - Constructor for class bitchanger.gui.controls.SVGIcon
    +
     
    +
    SVGIcon(SVGPath) - Constructor for class bitchanger.gui.controls.SVGIcon
    +
     
    +
    SYNC_1_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    SYNC_2_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/index-files/index-19.html b/doc/0.1.4/en_public/index-files/index-19.html new file mode 100644 index 0000000..4dd28c4 --- /dev/null +++ b/doc/0.1.4/en_public/index-files/index-19.html @@ -0,0 +1,253 @@ + + + + + +T-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    T

    +
    +
    TEXT_FIELD_ROW - bitchanger.gui.views.AlphaNumGridView.ConstraintType
    +
     
    +
    TEXTFIELD_1_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    TEXTFIELD_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    textFieldMap - Variable in class bitchanger.gui.controller.ControllerBase
    +
     
    +
    TF_ANY_KEY - Static variable in class bitchanger.gui.views.ConverterView
    +
     
    +
    TF_BIN_KEY - Static variable in class bitchanger.gui.views.ConverterView
    +
     
    +
    TF_DEC_KEY - Static variable in class bitchanger.gui.views.ConverterView
    +
     
    +
    TF_HEX_KEY - Static variable in class bitchanger.gui.views.ConverterView
    +
     
    +
    TF_KEYS - Static variable in class bitchanger.gui.views.ConverterView
    +
     
    +
    TF_OCT_KEY - Static variable in class bitchanger.gui.views.ConverterView
    +
     
    +
    tfAnyKey - Variable in class bitchanger.gui.views.ConverterView
    +
     
    +
    tfBinKey - Variable in class bitchanger.gui.views.ConverterView
    +
     
    +
    tfColumn - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    tfDecKey - Variable in class bitchanger.gui.views.ConverterView
    +
     
    +
    tfDecKey - Variable in class bitchanger.gui.views.IEEEView
    +
     
    +
    tfHexKey - Variable in class bitchanger.gui.views.ConverterView
    +
     
    +
    tfIEEEKey - Variable in class bitchanger.gui.views.IEEEView
    +
     
    +
    tfKeys - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    tfMaxHeightProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    tfMinHeightProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    tfOctKey - Variable in class bitchanger.gui.views.ConverterView
    +
     
    +
    toBaseString(int) - Method in interface bitchanger.calculations.ChangeableNumber
    +
    +
    Returns the string representation of this ChangeableNumber to any base.
    +
    +
    toBaseString(int) - Method in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Returns the string representation of this ChangeableNumber to any base.
    +
    +
    toBinString() - Method in interface bitchanger.calculations.ChangeableNumber
    +
    +
    Returns the string representation of this ChangeableNumber as a binary string.
    +
    +
    toBinString() - Method in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Returns the string representation of this ChangeableNumber as a binary string.
    +
    +
    toDecString() - Method in interface bitchanger.calculations.ChangeableNumber
    +
    +
    Returns the string representation of this ChangeableNumber as a decimal string.
    +
    +
    toDecString() - Method in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Returns the string representation of this ChangeableNumber as a decimal string.
    +
    +
    toHexString() - Method in interface bitchanger.calculations.ChangeableNumber
    +
    +
    Returns the string representation of this ChangeableNumber as a hexadecimal string.
    +
    +
    toHexString() - Method in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Returns the string representation of this ChangeableNumber as a hexadecimal string.
    +
    +
    toOctString() - Method in interface bitchanger.calculations.ChangeableNumber
    +
    +
    Returns the string representation of this ChangeableNumber as an octal string.
    +
    +
    toOctString() - Method in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Returns the string representation of this ChangeableNumber as an octal string.
    +
    +
    toString() - Method in class bitchanger.calculations.SimpleChangeableNumber
    +
    +
    Returns a String that includes the hexadecimal, decimal, octal and binary + presentation of the wrapped value.
    +
    +
    TRASH_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    TRASH_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    TRASH_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    TRASH_X_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    TRASH_X_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    TriConsumer<T,​U,​V> - Interface in bitchanger.util
    +
    +
    Represents an operation that accepts three input arguments and returns no result.
    +
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/index-files/index-2.html b/doc/0.1.4/en_public/index-files/index-2.html new file mode 100644 index 0000000..3c6e271 --- /dev/null +++ b/doc/0.1.4/en_public/index-files/index-2.html @@ -0,0 +1,245 @@ + + + + + +B-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    B

    +
    +
    backspaceBtnKey - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    BaseSpinner - Class in bitchanger.gui.controls
    +
    +
    Spinner for choosing the base of a numeral system.
    +
    +
    BaseSpinner() - Constructor for class bitchanger.gui.controls.BaseSpinner
    +
    +
    Produces a BaseSpinner whose maximum and minimum adjustable base is given through the constant + ConvertingNumbers.MIN_BASE and ConvertingNumbers.MAX_BASE.
    +
    +
    baseSpinnerKey - Variable in class bitchanger.gui.views.ConverterView
    +
     
    +
    baseToDec(int, String) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Converts the submitted number value of any base base into a number of the base 10 in double.
    +
    +
    baseToDecString(int, String) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Converts the submitted number value of any base base into a number of the decimal system as string representation.
    +
    +
    baseToDecString(int, String, char) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Converts the submitted number value of any base base into a number of the decimal system as string representation.
    +
    +
    BasicMenuBar - Class in bitchanger.gui.controls
    +
    +
    Basic MenuBar containing the MenuItems that are generally required.
    +
    +
    BasicMenuBar() - Constructor for class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Constructs a new BasicMenuBar with all MenuItems.
    +
    +
    BasicMenuBar(ControllableApplication) - Constructor for class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Constructs a new BasicMenuBar with all MenuItems that are already assigned the basic functions.
    +
    +
    BasicMenuController - Class in bitchanger.gui.controller
    +
     
    +
    BasicMenuController(BasicMenuBar, ControllableApplication) - Constructor for class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    bitchanger.calculations - package bitchanger.calculations
    +
    +
    Contains all classes that are needed for calculating the data.
    +
    +
    bitchanger.gui.controller - package bitchanger.gui.controller
    +
    +
    Provides controller, that gives functions to the views.
    +
    +
    bitchanger.gui.controls - package bitchanger.gui.controls
    +
    +
    Allocates adjusted operating elements and functions for the user interface
    +
    +
    bitchanger.gui.views - package bitchanger.gui.views
    +
    +
    Offers different views that can be represented on a graphical surface
    +
    +
    bitchanger.main - package bitchanger.main
    +
    +
    Contains the launcher with the main method and the JavaFX applications for starting the graphical user interface.
    +
    +
    bitchanger.preferences - package bitchanger.preferences
    +
    +
    With classes that are included in this package, components have access to global settings and can adjust these.
    +
    +
    bitchanger.util - package bitchanger.util
    +
    +
    Contains Classes with general and cross-class methods.
    +
    +
    BitchangerLauncher - Class in bitchanger.main
    +
    +
    This class contains the main method that is the entry point for the application.
    +
    +
    BitchangerLauncher() - Constructor for class bitchanger.main.BitchangerLauncher
    +
     
    +
    btnMaxHeigthProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    btnMaxWidthProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    btnMinHeigthProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    btnMinWidthProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    btnSpacingProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    buildScenegraph() - Method in class bitchanger.gui.views.ViewBase
    +
     
    +
    BUTTON_COLUMN - bitchanger.gui.views.AlphaNumGridView.ConstraintType
    +
     
    +
    BUTTON_ROW - bitchanger.gui.views.AlphaNumGridView.ConstraintType
    +
     
    +
    buttonMap - Variable in class bitchanger.gui.controller.ControllerBase
    +
     
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/index-files/index-20.html b/doc/0.1.4/en_public/index-files/index-20.html new file mode 100644 index 0000000..75efe43 --- /dev/null +++ b/doc/0.1.4/en_public/index-files/index-20.html @@ -0,0 +1,176 @@ + + + + + +U-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    U

    +
    +
    UnfocusedButton - Class in bitchanger.gui.controls
    +
    +
    Button that does not get focus by clicking and has a rectangle without rounded corners as basic form.
    +
    +
    UnfocusedButton() - Constructor for class bitchanger.gui.controls.UnfocusedButton
    +
    +
    Creates an UnfocusedButton with an empty string as label
    +
    +
    UnfocusedButton(String) - Constructor for class bitchanger.gui.controls.UnfocusedButton
    +
    +
    Creates an UnfocusedButton with a specific string as label
    +
    +
    UnfocusedButton(String, Node) - Constructor for class bitchanger.gui.controls.UnfocusedButton
    +
    +
    Creates an UnfocusedButton with a specific string and an icon as label
    +
    +
    UnfocusedButton(Node) - Constructor for class bitchanger.gui.controls.UnfocusedButton
    +
     
    +
    UNKNOWN - bitchanger.preferences.Style
    +
    +
    Constant for a unknown layout
    +
    +
    useClearAndBackBtn - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/index-files/index-21.html b/doc/0.1.4/en_public/index-files/index-21.html new file mode 100644 index 0000000..7bf80ae --- /dev/null +++ b/doc/0.1.4/en_public/index-files/index-21.html @@ -0,0 +1,266 @@ + + + + + +V-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    V

    +
    +
    ValueButton - Class in bitchanger.gui.controls
    +
    +
    UnfocusedButton with an extra Property to adjust the base.
    +
    +
    ValueButton() - Constructor for class bitchanger.gui.controls.ValueButton
    +
    +
    Creates a ValueButton with an empty string as caption
    +
    +
    ValueButton(String) - Constructor for class bitchanger.gui.controls.ValueButton
    +
    +
    Creates a ValueButton with a specific string as caption
    +
    +
    ValueButton(String, Node) - Constructor for class bitchanger.gui.controls.ValueButton
    +
    +
    Creates a ValueButton with a specific string and an icon as caption
    +
    +
    ValueField - Class in bitchanger.gui.controls
    +
    +
    Text field in which a number of a certain numeral system can be entered.
    +
    +
    ValueField() - Constructor for class bitchanger.gui.controls.ValueField
    +
    +
    Creates a new ValueField with empty text and the base 10
    +
    +
    ValueField(int) - Constructor for class bitchanger.gui.controls.ValueField
    +
    +
    Creates a new ValueFiled with an empty text and the committed base
    +
    +
    ValueField(String) - Constructor for class bitchanger.gui.controls.ValueField
    +
    +
    Creates a new ValueField that contains the committed text and the base 10
    +
    +
    ValueField(String, int) - Constructor for class bitchanger.gui.controls.ValueField
    +
    +
    Creates a new ValueField that contains the committed text and the committed base
    +
    +
    valueOf(String) - Static method in enum bitchanger.gui.controls.InformationDialog.InformationType
    +
    +
    Returns the enum constant of this type with the specified name.
    +
    +
    valueOf(String) - Static method in enum bitchanger.gui.views.AlphaNumGridView.ConstraintType
    +
    +
    Returns the enum constant of this type with the specified name.
    +
    +
    valueOf(String) - Static method in enum bitchanger.preferences.Comma
    +
    +
    Returns the enum constant of this type with the specified name.
    +
    +
    valueOf(String) - Static method in enum bitchanger.preferences.Style
    +
    +
    Returns the enum constant of this type with the specified name.
    +
    +
    values() - Static method in enum bitchanger.gui.controls.InformationDialog.InformationType
    +
    +
    Returns an array containing the constants of this enum type, in +the order they are declared.
    +
    +
    values() - Static method in enum bitchanger.gui.views.AlphaNumGridView.ConstraintType
    +
    +
    Returns an array containing the constants of this enum type, in +the order they are declared.
    +
    +
    values() - Static method in enum bitchanger.preferences.Comma
    +
    +
    Returns an array containing the constants of this enum type, in +the order they are declared.
    +
    +
    values() - Static method in enum bitchanger.preferences.Style
    +
    +
    Returns an array containing the constants of this enum type, in +the order they are declared.
    +
    +
    version - Variable in class bitchanger.gui.controller.BasicMenuController
    +
     
    +
    VERSION - bitchanger.gui.controls.InformationDialog.InformationType
    +
     
    +
    VERSION - Static variable in class bitchanger.main.PrimaryFXApp
    +
     
    +
    vgapProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    VIEW_MENU_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Key with which the Menu "Fenster" is associated in the Map BasicMenuBar.menuItemMap
    +
    +
    VIEW_MOVE_TO_SCREEN_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Key with which the MenuItem "Auf Monitor bewegen" is associated in the Map BasicMenuBar.menuItemMap
    +
    +
    VIEW_SHOW_FULLSCREEN_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Key with which the CheckMenuItem "Vollbild" is associated in the Map BasicMenuBar.menuItemMap
    +
    +
    VIEW_STYLE_DARK_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Key with which the MenuItem "Dunkel" is associated in the Map BasicMenuBar.menuItemMap
    +
    +
    VIEW_STYLE_LIGHT_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Key with which the MenuItem "Hell" is associated in the Map BasicMenuBar.menuItemMap
    +
    +
    VIEW_STYLE_MENU_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Key with which the Menu "Stil" is associated in the Map BasicMenuBar.menuItemMap
    +
    +
    Viewable - Interface in bitchanger.gui.views
    +
    +
    The interface Viewable defines the base for a view.
    +
    +
    ViewBase<T extends javafx.scene.Parent> - Class in bitchanger.gui.views
    +
     
    +
    ViewBase(T) - Constructor for class bitchanger.gui.views.ViewBase
    +
     
    +
    ViewBase(T, boolean) - Constructor for class bitchanger.gui.views.ViewBase
    +
     
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/index-files/index-22.html b/doc/0.1.4/en_public/index-files/index-22.html new file mode 100644 index 0000000..c420555 --- /dev/null +++ b/doc/0.1.4/en_public/index-files/index-22.html @@ -0,0 +1,162 @@ + + + + + +W-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    W

    +
    +
    WHITESPACE_ROW - bitchanger.gui.views.AlphaNumGridView.ConstraintType
    +
     
    +
    whiteSpaceHeigthProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    WINDOW_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    WINDOW_THIN_2_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    WINDOW_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/index-files/index-23.html b/doc/0.1.4/en_public/index-files/index-23.html new file mode 100644 index 0000000..1b10949 --- /dev/null +++ b/doc/0.1.4/en_public/index-files/index-23.html @@ -0,0 +1,176 @@ + + + + + +X-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    X

    +
    +
    X_MARK_1_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    X_MARK_2_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    X_MARK_ARROW_LEFT_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    X_MARK_ARROW_LEFT_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    X_MARK_CIRCLE_1_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    X_MARK_CIRCLE_1_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    X_MARK_CIRCLE_2_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    X_MARK_CIRCLE_2_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    X_MARK_CIRCLE_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    X_MARK_SQUARE_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    X_MARK_SQUARE_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    X_MARK_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/index-files/index-24.html b/doc/0.1.4/en_public/index-files/index-24.html new file mode 100644 index 0000000..d098825 --- /dev/null +++ b/doc/0.1.4/en_public/index-files/index-24.html @@ -0,0 +1,164 @@ + + + + + +Z-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    Z

    +
    +
    ZERO_BTN_KEY - Static variable in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    zeroBtnKey - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    ZOOM_IN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ZOOM_IN_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ZOOM_OUT_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ZOOM_OUT_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/index-files/index-3.html b/doc/0.1.4/en_public/index-files/index-3.html new file mode 100644 index 0000000..e33a300 --- /dev/null +++ b/doc/0.1.4/en_public/index-files/index-3.html @@ -0,0 +1,266 @@ + + + + + +C-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    C

    +
    +
    Calculable - Interface in bitchanger.calculations
    +
     
    +
    CALCULATOR_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    CALCULATOR_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    CALCULATOR_SYMBOLS_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    CALCULATOR_SYMBOLS_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    CALCULATOR_VIEW_KEY - Static variable in class bitchanger.main.PrimaryFXApp
    +
     
    +
    CalculatorView - Class in bitchanger.gui.views
    +
     
    +
    CalculatorView() - Constructor for class bitchanger.gui.views.CalculatorView
    +
     
    +
    center - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    ChangeableNumber - Interface in bitchanger.calculations
    +
    +
    Interface that defines methods to convert numbers from any numeral system into another numeral system
    +
    +
    changeView(Viewable) - Method in interface bitchanger.gui.controller.ControllableApplication
    +
    +
    Changes the primaryStage's Scene to the Scene of the given Viewable
    +
    +
    clearBtnKey - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    COLUMN_COUNT - Static variable in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    Comma - Enum in bitchanger.preferences
    +
    +
    Enumeration of the wrapper class, that represents the character for a comma.
    +
    +
    COMMA_BTN_KEY - Static variable in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    COMMA_DE - bitchanger.preferences.Comma
    +
    +
    Constant that represents the German comma (',')
    +
    +
    COMMA_EN - bitchanger.preferences.Comma
    +
    +
    Constant that represents the English comma ('.')
    +
    +
    commaBtnKey - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    commaProperty - Variable in class bitchanger.preferences.Preferences
    +
    +
    Property for comma character
    +
    +
    controllable - Variable in class bitchanger.gui.controller.ControllerBase
    +
     
    +
    Controllable - Interface in bitchanger.gui.controller
    +
    +
    Interface that defines methods to connect a controllable with a controller.
    +
    +
    ControllableApplication - Interface in bitchanger.gui.controller
    +
    +
    Interface that defines methods to connect a Application with a controller.
    +
    +
    controller - Variable in class bitchanger.gui.views.ViewBase
    +
     
    +
    Controller - Interface in bitchanger.gui.controller
    +
    +
    Interface for defining a controller.
    +
    +
    ControllerBase<T extends Controllable> - Class in bitchanger.gui.controller
    +
     
    +
    ControllerBase(T) - Constructor for class bitchanger.gui.controller.ControllerBase
    +
     
    +
    CONVERTER_VIEW_KEY - Static variable in class bitchanger.main.PrimaryFXApp
    +
     
    +
    ConverterController - Class in bitchanger.gui.controller
    +
    +
    Controller that provides the function for a ConverterView.
    +
    +
    ConverterController(ConverterView) - Constructor for class bitchanger.gui.controller.ConverterController
    +
    +
    Construct a new controller for a ConverterView and links the necessary attributes with + references to the operating elements of the ConverterView.
    +
    +
    ConverterMenuBar - Class in bitchanger.gui.controls
    +
     
    +
    ConverterMenuBar() - Constructor for class bitchanger.gui.controls.ConverterMenuBar
    +
     
    +
    ConverterMenuBar(ControllableApplication) - Constructor for class bitchanger.gui.controls.ConverterMenuBar
    +
     
    +
    ConverterMenuController - Class in bitchanger.gui.controller
    +
     
    +
    ConverterMenuController(BasicMenuBar, ControllableApplication) - Constructor for class bitchanger.gui.controller.ConverterMenuController
    +
     
    +
    ConverterView - Class in bitchanger.gui.views
    +
     
    +
    ConverterView() - Constructor for class bitchanger.gui.views.ConverterView
    +
     
    +
    ConvertingNumbers - Class in bitchanger.calculations
    +
    +
    The ConvertingNumbers class contains methods for performing conversions of numbers with different numeral systems.
    +
    +
    COPYRIGHT_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    COPYRIGHT_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    createScenegraph() - Method in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    createScenegraph() - Method in class bitchanger.gui.views.ConverterView
    +
    createScenegraph() - Method in class bitchanger.gui.views.ViewBase
    +
     
    +
    currentViewProperty - Variable in class bitchanger.main.PrimaryFXApp
    +
    +
    Property of the currently displayed View
    +
    +
    CUSTOM_PREFERENCES - Static variable in class bitchanger.util.Resources
    +
     
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/index-files/index-4.html b/doc/0.1.4/en_public/index-files/index-4.html new file mode 100644 index 0000000..9c3d02d --- /dev/null +++ b/doc/0.1.4/en_public/index-files/index-4.html @@ -0,0 +1,179 @@ + + + + + +D-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    D

    +
    +
    DARK - bitchanger.preferences.Style
    +
    +
    Constant for a dark layout
    +
    +
    DARK_CSS - Static variable in class bitchanger.util.Resources
    +
     
    +
    decToBase(int, String) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Converts the submitted number decValue of base 10 into a number of any base newBase as string representation.
    +
    +
    decToBase(int, String, char) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Converts the submitted number decValue of base 10 into a number of any base newBase as string representation.
    +
    +
    decToBase(int, String, char, int) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Converts the submitted number decValue of base 10 into a number of any base newBase as string representation.
    +
    +
    decToBaseBlocks(int, String, char, int) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Converts the submitted number decValue of base 10 into a number of any base newBase as string representation + and splits the number into blockt with given length.
    +
    +
    DEFAULT_GRAPHIC_SCALE_FACTOR - Static variable in class bitchanger.gui.controls.UnfocusedButton
    +
     
    +
    DEFAULT_PREFERENCES - Static variable in class bitchanger.util.Resources
    +
     
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/index-files/index-5.html b/doc/0.1.4/en_public/index-files/index-5.html new file mode 100644 index 0000000..0b3c04d --- /dev/null +++ b/doc/0.1.4/en_public/index-files/index-5.html @@ -0,0 +1,172 @@ + + + + + +E-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    E

    +
    +
    EMPTY_BUTTON_MAP - Static variable in interface bitchanger.gui.controller.Controllable
    +
    +
    empty and immutable map that can be used as placeholder if any Controllable does not have to pass buttons to its Controller
    +
    +
    EMPTY_NODE_MAP - Static variable in interface bitchanger.gui.controller.Controllable
    +
    +
    empty and immutable map that can be used as placeholder if any Controllable does not have to pass nodes to its Controller
    +
    +
    EMPTY_TEXTFIELD_MAP - Static variable in interface bitchanger.gui.controller.Controllable
    +
    +
    empty and immutable map that can be used as placeholder if any Controllable does not have to pass textfields to its Controller
    +
    +
    ENTER_FULLSCREEN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ERASER_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    ERASER_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    EXIT_FULLSCREEN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/index-files/index-6.html b/doc/0.1.4/en_public/index-files/index-6.html new file mode 100644 index 0000000..db02486 --- /dev/null +++ b/doc/0.1.4/en_public/index-files/index-6.html @@ -0,0 +1,174 @@ + + + + + +F-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    F

    +
    +
    FIRST_COLUMN - bitchanger.gui.views.AlphaNumGridView.ConstraintType
    +
     
    +
    firstColumnWidthProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    firstKeyBtnColumn - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    firstKeyBtnRow - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    firstLabelRow - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    firstTFRow - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    FRACTIONAL_PRECISION_INDICATOR - Static variable in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Indicator for the cut fractional part in case of converting from decimal system into a system of any base
    +
    +
    FULLSCREEN_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    FXUtils - Class in bitchanger.util
    +
    +
    Utility class to handle objects whose belong to the user interface.
    +
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/index-files/index-7.html b/doc/0.1.4/en_public/index-files/index-7.html new file mode 100644 index 0000000..01e85dc --- /dev/null +++ b/doc/0.1.4/en_public/index-files/index-7.html @@ -0,0 +1,297 @@ + + + + + +G-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    G

    +
    +
    generateMenuBar() - Method in class bitchanger.gui.views.ConverterView
    +
    generateMenuBar() - Method in interface bitchanger.gui.views.Viewable
    +
     
    +
    generateMenuBar(ControllableApplication) - Method in class bitchanger.gui.views.ConverterView
    +
    generateMenuBar(ControllableApplication) - Method in interface bitchanger.gui.views.Viewable
    +
     
    +
    get() - Method in enum bitchanger.preferences.Comma
    +
    +
    Returns the represented comma sign
    +
    +
    getArrowButtons() - Method in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    getBase() - Method in class bitchanger.gui.controls.ValueField
    +
    +
    Returns the value of ValueField.baseProperty
    +
    +
    getBaseProperty() - Method in class bitchanger.gui.controls.ValueButton
    +
    +
    Returns the value of the ValueButton.baseProperty
    +
    +
    getBaseProperty() - Method in class bitchanger.gui.controls.ValueField
    +
    +
    Returns the ValueField.baseProperty of this ValueField
    +
    +
    getButtonMap() - Method in interface bitchanger.gui.controller.Controllable
    +
    +
    Returns a Map with all buttons of the controllable.
    +
    +
    getButtonMap() - Method in class bitchanger.gui.controls.AlphaNumKeys
    +
    +
    Returns a Map with all buttons of the controllable.
    +
    +
    getButtonMap() - Method in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Returns a Map with all buttons of the controllable.
    +
    +
    getButtonMap() - Method in class bitchanger.gui.views.ViewBase
    +
    +
    Returns a Map with all buttons of the controllable.
    +
    +
    getButtonMatrix() - Method in class bitchanger.gui.controls.AlphaNumKeys
    +
     
    +
    getComma() - Method in class bitchanger.preferences.Preferences
    +
    +
    Returns the selected character for comma
    +
    +
    getCurrentViewProperty() - Method in interface bitchanger.gui.controller.ControllableApplication
    +
    +
    Returns the CurrentViewProperty
    +
    +
    getCurrentViewProperty() - Method in class bitchanger.main.PrimaryFXApp
    +
    +
    Returns the CurrentViewProperty
    +
    +
    getMaxHeigth() - Method in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Indicates the maximum height of the view
    +
    +
    getMaxHeigth() - Method in interface bitchanger.gui.views.Viewable
    +
    +
    Indicates the maximum height of the view
    +
    +
    getMaxWidth() - Method in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Indicates the maximum width of the view
    +
    +
    getMaxWidth() - Method in interface bitchanger.gui.views.Viewable
    +
    +
    Indicates the maximum width of the view
    +
    +
    getMinHeigth() - Method in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Indicates the minimum height of the view
    +
    +
    getMinHeigth() - Method in interface bitchanger.gui.views.Viewable
    +
    +
    Indicates the minimum height of the view
    +
    +
    getMinWidth() - Method in class bitchanger.gui.views.AlphaNumGridView
    +
    +
    Indicates the minimum width of the view
    +
    +
    getMinWidth() - Method in interface bitchanger.gui.views.Viewable
    +
    +
    Indicates the minimum width of the view
    +
    +
    getNodeMap() - Method in interface bitchanger.gui.controller.Controllable
    +
    +
    Returns a Map with all elements (Nodes) of the controllable, that are not buttons or text fields and are required in the controller.
    +
    +
    getNodeMap() - Method in class bitchanger.gui.controls.AlphaNumKeys
    +
    +
    Returns a Map with all elements (Nodes) of the controllable, that are not buttons or text fields and are required in the controller.
    +
    +
    getNodeMap() - Method in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Returns a Map with all elements (Nodes) of the controllable, that are not buttons or text fields and are required in the controller.
    +
    +
    getNodeMap() - Method in class bitchanger.gui.views.ViewBase
    +
    +
    Returns a Map with all elements (Nodes) of the controllable, that are not buttons or text fields and are required in the controller.
    +
    +
    getPrefs() - Static method in class bitchanger.preferences.Preferences
    +
    +
    Returns the current settings
    +
    +
    getPrimaryStage() - Method in interface bitchanger.gui.controller.ControllableApplication
    +
     
    +
    getPrimaryStage() - Method in class bitchanger.main.PrimaryFXApp
    +
    getResourceAsExternalForm(String) - Static method in class bitchanger.util.Resources
    +
     
    +
    getResourceAsFile(String) - Static method in class bitchanger.util.Resources
    +
     
    +
    getScene() - Method in interface bitchanger.gui.views.Viewable
    +
    +
    Returns the represented Scene
    +
    +
    getScene() - Method in class bitchanger.gui.views.ViewBase
    +
    +
    Returns the represented Scene
    +
    +
    getTextFieldMap() - Method in interface bitchanger.gui.controller.Controllable
    +
    +
    Returns a Map with all text fields of the controllable.
    +
    +
    getTextFieldMap() - Method in class bitchanger.gui.controls.AlphaNumKeys
    +
    +
    Returns a Map with all text fields of the controllable.
    +
    +
    getTextFieldMap() - Method in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Returns a Map with all text fields of the controllable.
    +
    +
    getTextFieldMap() - Method in class bitchanger.gui.views.ViewBase
    +
    +
    Returns a Map with all text fields of the controllable.
    +
    +
    getViewable(String) - Method in interface bitchanger.gui.controller.ControllableApplication
    +
    +
    Returns the view that is associated to the string key
    +
    +
    getViewable(String) - Method in class bitchanger.main.PrimaryFXApp
    +
    +
    Returns the view that is associated to the string key
    +
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/index-files/index-8.html b/doc/0.1.4/en_public/index-files/index-8.html new file mode 100644 index 0000000..006c04a --- /dev/null +++ b/doc/0.1.4/en_public/index-files/index-8.html @@ -0,0 +1,172 @@ + + + + + +H-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    H

    +
    +
    hasPath() - Method in class bitchanger.gui.controls.SVGIcon
    +
     
    +
    HELP_ABOUT_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Key with which the MenuItem "Ãœber" is associated in the Map BasicMenuBar.menuItemMap
    +
    +
    HELP_MENU_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Key with which the Menu "Hilfe" is associated in the Map BasicMenuBar.menuItemMap
    +
    +
    HELP_RESET_PREFS_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Key with which the MenuItem "Einstellungen zurücksetzen" is associated in the Map BasicMenuBar.menuItemMap
    +
    +
    HELP_VERSION_ITEM_KEY - Static variable in class bitchanger.gui.controls.BasicMenuBar
    +
    +
    Key with which the MenuItem "Version" is associated in the Map BasicMenuBar.menuItemMap
    +
    +
    hgapProperty - Variable in class bitchanger.gui.views.AlphaNumGridView
    +
     
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/index-files/index-9.html b/doc/0.1.4/en_public/index-files/index-9.html new file mode 100644 index 0000000..2c7947c --- /dev/null +++ b/doc/0.1.4/en_public/index-files/index-9.html @@ -0,0 +1,223 @@ + + + + + +I-Index + + + + + + + + + + + + + + + +
    + +
    +
    +
    A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages + + +

    I

    +
    +
    ICON_LIST - Static variable in class bitchanger.util.Resources
    +
     
    +
    IconFactory - Class in bitchanger.util
    +
     
    +
    IDEA_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    IDEA_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    IDEA_SPEECH_BUBBLE_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    IDEA_SPEECH_BUBBLE_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    IEEE_VIEW_KEY - Static variable in class bitchanger.main.PrimaryFXApp
    +
     
    +
    IEEEController - Class in bitchanger.gui.controller
    +
     
    +
    IEEEController(IEEEView) - Constructor for class bitchanger.gui.controller.IEEEController
    +
     
    +
    IEEEMenuController - Class in bitchanger.gui.controller
    +
     
    +
    IEEEMenuController(BasicMenuBar, ControllableApplication, IEEEView) - Constructor for class bitchanger.gui.controller.IEEEMenuController
    +
     
    +
    IEEEView - Class in bitchanger.gui.views
    +
     
    +
    IEEEView() - Constructor for class bitchanger.gui.views.IEEEView
    +
     
    +
    indicateFractionalInaccuracy - Variable in class bitchanger.gui.controller.ConverterMenuController
    +
     
    +
    indicateFractionalPrecision() - Method in class bitchanger.preferences.Preferences
    +
    +
    Returns the value of indicateFractionalPrecisionProperty
    +
    +
    indicateFractionalPrecisionProperty - Variable in class bitchanger.preferences.Preferences
    +
    +
    Property for displaying aborted decimal places
    +
    +
    INFO_CIRCLE_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    INFO_CIRCLE_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    INFO_CIRCLE_SIMPLE_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    INFO_CIRCLE_SIMPLE_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    INFO_CIRCLE_THIN_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    INFO_SPEECH_BOX_FILLED_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    INFO_SPEECH_BOX_ICON - Static variable in class bitchanger.util.Resources
    +
     
    +
    InformationDialog - Class in bitchanger.gui.controls
    +
     
    +
    InformationDialog() - Constructor for class bitchanger.gui.controls.InformationDialog
    +
     
    +
    InformationDialog(InformationDialog.InformationType) - Constructor for class bitchanger.gui.controls.InformationDialog
    +
     
    +
    InformationDialog.InformationType - Enum in bitchanger.gui.controls
    +
     
    +
    init() - Method in class bitchanger.gui.views.ViewBase
    +
     
    +
    initControls() - Method in class bitchanger.gui.controller.AlphaNumKeysController
    +
    initControls() - Method in class bitchanger.gui.controller.BasicMenuController
    +
    initControls() - Method in class bitchanger.gui.controller.ControllerBase
    +
     
    +
    initControls() - Method in class bitchanger.gui.controller.ConverterController
    +
    initControls() - Method in class bitchanger.gui.controller.ConverterMenuController
    +
    initControls() - Method in class bitchanger.gui.controller.IEEEController
    +
    isValueToBase(int, String) - Static method in class bitchanger.calculations.ConvertingNumbers
    +
    +
    Checks if value represents a number to the required base base.
    +
    +
    +A B C D E F G H I K L M N O P Q R S T U V W X Z 
    All Classes All Packages
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/index.html b/doc/0.1.4/en_public/index.html new file mode 100644 index 0000000..598f033 --- /dev/null +++ b/doc/0.1.4/en_public/index.html @@ -0,0 +1,198 @@ + + + + + +Overview + + + + + + + + + + + + + + + +
    + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Packages 
    PackageDescription
    bitchanger.calculations +
    Contains all classes that are needed for calculating the data.
    +
    bitchanger.gui.controller +
    Provides controller, that gives functions to the views.
    +
    bitchanger.gui.controls +
    Allocates adjusted operating elements and functions for the user interface
    +
    bitchanger.gui.views +
    Offers different views that can be represented on a graphical surface
    +
    bitchanger.main +
    Contains the launcher with the main method and the JavaFX applications for starting the graphical user interface.
    +
    bitchanger.preferences +
    With classes that are included in this package, components have access to global settings and can adjust these.
    +
    bitchanger.util +
    Contains Classes with general and cross-class methods.
    +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/jquery/external/jquery/jquery.js b/doc/0.1.4/en_public/jquery/external/jquery/jquery.js new file mode 100644 index 0000000..9b5206b --- /dev/null +++ b/doc/0.1.4/en_public/jquery/external/jquery/jquery.js @@ -0,0 +1,10364 @@ +/*! + * jQuery JavaScript Library v3.3.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2018-01-20T17:24Z + */ +( function( global, factory ) { + + "use strict"; + + 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 ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var document = window.document; + +var getProto = Object.getPrototypeOf; + +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 fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + return typeof obj === "function" && typeof obj.nodeType !== "number"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + + + + var preservedScriptAttributes = { + type: true, + src: true, + noModule: true + }; + + function DOMEval( code, doc, node ) { + doc = doc || document; + + var i, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + if ( node[ i ] ) { + script[ i ] = node[ i ]; + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.3.1", + + // 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.0 only + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // 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 all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : 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; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + 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(); + }, + + // 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" && !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 = Array.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && Array.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() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + + /* eslint-disable no-unused-vars */ + // See https://github.com/eslint/eslint/issues/6125 + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + DOMEval( code ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android <=4.0 only + 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 ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + 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 length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + 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, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.3 + * https://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-08-08 + */ +(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; + }, + + // 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 + // https://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 + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // 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( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "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 = /[+~]/, + + // 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 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + disabledAncestor = addCombinator( + function( elem ) { + return elem.disabled === true && ("form" in elem || "label" in elem); + }, + { dir: "parentNode", next: "legend" } + ); + +// 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 m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[i] = "#" + nid + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + 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 element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement("fieldset"); + + try { + return !!fn( el ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + // release memory in IE + el = 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 = arr.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 && + a.sourceIndex - b.sourceIndex; + + // 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 :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + disabledAncestor( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * 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, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9-11, Edge + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + if ( preferredDoc !== document && + (subWindow = document.defaultView) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( el ) { + el.className = "i"; + return !el.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( el ) { + el.appendChild( document.createComment("") ); + return !el.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + }); + + // ID filter and find + if ( support.getById ) { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + 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; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( (elem = elems[i++]) ) { + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // 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 ( typeof context.getElementsByClassName !== "undefined" && 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 https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( el ) { + // 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 + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // 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 + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.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 ( !el.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement("input"); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.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 ( el.querySelectorAll(":enabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll(":disabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( el ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[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 self-exclusive + // 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 === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === document || 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 === document ? -1 : + b === document ? 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 document; +}; + +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 && + !compilerCache[ expr + " " ] && + ( !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.escape = function( sel ) { + return (sel + "").replace( rcssescape, fcssescape ); +}; + +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, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + 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 + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && 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 ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + // Use previously-cached element index if available + if ( useCache ) { + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + // 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 ) { + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + uniqueCache[ 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": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( 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, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "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 ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator 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 ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( (oldCache = uniqueCache[ key ]) && + 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 + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + return false; + }; +} + +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 || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + if ( !context && elem.ownerDocument !== document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context || document, 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 ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + 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 only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + 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, + !context || 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( el ) { + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( el ) { + el.innerHTML = ""; + return el.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( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.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( el ) { + return el.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; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var 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; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + 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; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : 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 to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // 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 ( 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 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).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[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + 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.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 = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.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.uniqueSort( 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.uniqueSort( + 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 dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( nodeName( elem, "iframe" ) ) { + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return 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.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], 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" ? + 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, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + 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.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + 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; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).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 = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + 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( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + 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, + + // 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 ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !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 ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // 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 ) ) { + + return this.get( owner, 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, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = 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 getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +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, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.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 = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // 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 + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.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 dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.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 = dataPriv.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 rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + jQuery.contains( elem.ownerDocument, elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + +var 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; +}; + + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + 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 ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // Support: IE <=9 only + option: [ 1, "" ], + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
    " ], + col: [ 2, "", "
    " ], + tr: [ 2, "", "
    " ], + td: [ 3, "", "
    " ], + + _default: [ 0, "", "" ] +}; + +// Support: IE <=9 only +wrapMap.optgroup = wrapMap.option; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + 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 ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // 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 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // 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++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + 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; +} + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // 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: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; +} )(); +var documentElement = document.documentElement; + + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 only +// See #13393 for more info +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, 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 ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + 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 elem; + } + + 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 elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * 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 = dataPriv.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; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, 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 !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + 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 ); + } + } + } + + 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 = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + 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 data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + // Make a writable jQuery.Event from the native event object + var event = jQuery.event.fix( nativeEvent ); + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + handlers = ( dataPriv.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; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + 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.rnamespace || event.rnamespace.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, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + 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 && nodeName( this, "input" ) ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return 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; + } + } + } + } +}; + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, 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: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // 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 || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +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 mouseenter/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; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, 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 ); + } ); + } +} ); + + +var + + /* eslint-disable max-len */ + + // See https://github.com/eslint/eslint/issues/3229 + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, + + /* eslint-enable */ + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return 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 ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +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 ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.access( src ); + pdataCur = dataPriv.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 ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// 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; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + 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: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ 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 || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), doc, node ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1>" ); + }, + + 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: https://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; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + 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 ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + 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 domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, 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 domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + 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 = jQuery.htmlPrefilter( value ); + + 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 ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +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: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + div.style.position = "absolute"; + scrollboxSizeVal = div.offsetWidth === 36 || "absolute"; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // 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"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.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 <=9 - 11 only + // 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 ); + } + }; +} + + +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]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }, + + cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style; + +// Return a css property mapped to a potentially vendor prefixed property +function vendorPropName( name ) { + + // Shortcut for names that are not vendor prefixed + if ( name in emptyStyle ) { + return name; + } + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a property mapped along what jQuery.cssProps suggests or to +// a vendor prefixed property. +function finalPropName( name ) { + var ret = jQuery.cssProps[ name ]; + if ( !ret ) { + ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name; + } + return ret; +} + +function setPositiveNumber( elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + ) ); + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + val = curCSS( elem, dimension, styles ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox; + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + // Check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = valueIsBorderBox && + ( support.boxSizingReliable() || val === elem.style[ dimension ] ); + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + if ( val === "auto" || + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) { + + val = elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ]; + + // offsetWidth/offsetHeight provide border-box values + valueIsBorderBox = true; + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "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: { + "animationIterationCount": true, + "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: {}, + + // 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 = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( 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 = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // 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 was passed in, add the unit (except for certain CSS properties) + if ( type === "number" ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // 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 ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + 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 = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( 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 || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( i, dimension ) { + jQuery.cssHooks[ dimension ] = { + 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" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra && boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ); + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && support.scrollboxSize() === styles.position ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// 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 ( prefix !== "margin" ) { + 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 ( Array.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 ); + } +} ); + + +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 || jQuery.easing._default; + 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; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && 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.nodeType === 1 && + ( 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 only +// 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; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.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 = ( Animation.tweeners[ prop ] || [] ).concat( Animation.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 ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + 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(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + 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 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.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 = Animation.prefilters.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 only + // 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 there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, 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.notifyWith( elem, [ animation, 1, 0 ] ); + 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 = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + 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 ( 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( isHiddenWithinTree ).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 || dataPriv.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 = dataPriv.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 = dataPriv.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 = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + 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 ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/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 = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // 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 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 ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// 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, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/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 ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/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" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + 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 ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", 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. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + 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; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + 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 ( Array.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: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-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 + !option.disabled && + ( !option.parentNode.disabled || + !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 ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // 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 ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = 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( "." ) > -1 ) { + + // 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.rnamespace = 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 && !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() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && 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 ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !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; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + 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 ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + 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 ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = Date.now(); + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + 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 ( Array.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" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( 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, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.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( "&" ); +}; + +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(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* 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( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// 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( rnothtmlwhite ) || []; + + if ( 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: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + 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: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + 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": JSON.parse, + + // 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, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // 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 = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + 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 completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + 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 ); + + // 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 || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // 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 ( completed ) { + 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 + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // 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 || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // 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 ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.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 ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + + +jQuery._evalUrl = function( url ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + "throws": true + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( 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 ( 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 htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + 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 ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = 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(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + 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( "\r\n"; + +// inject VBScript +document.write(IEBinaryToArray_ByteStr_Script); + +global.JSZipUtils._getBinaryFromXHR = function (xhr) { + var binary = xhr.responseBody; + var byteMapping = {}; + for ( var i = 0; i < 256; i++ ) { + for ( var j = 0; j < 256; j++ ) { + byteMapping[ String.fromCharCode( i + (j << 8) ) ] = + String.fromCharCode(i) + String.fromCharCode(j); + } + } + var rawBytes = IEBinaryToArray_ByteStr(binary); + var lastChr = IEBinaryToArray_ByteStr_Last(binary); + return rawBytes.replace(/[\s\S]/g, function( match ) { + return byteMapping[match]; + }) + lastChr; +}; + +// enforcing Stuk's coding style +// vim: set shiftwidth=4 softtabstop=4: + +},{}]},{},[1]) +; diff --git a/doc/0.1.4/en_public/jquery/jszip-utils/dist/jszip-utils-ie.min.js b/doc/0.1.4/en_public/jquery/jszip-utils/dist/jszip-utils-ie.min.js new file mode 100644 index 0000000..93d8bc8 --- /dev/null +++ b/doc/0.1.4/en_public/jquery/jszip-utils/dist/jszip-utils-ie.min.js @@ -0,0 +1,10 @@ +/*! + +JSZipUtils - A collection of cross-browser utilities to go along with JSZip. + + +(c) 2014 Stuart Knightley, David Duponchel +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip-utils/master/LICENSE.markdown. + +*/ +!function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g\r\n";document.write(b),a.JSZipUtils._getBinaryFromXHR=function(a){for(var b=a.responseBody,c={},d=0;256>d;d++)for(var e=0;256>e;e++)c[String.fromCharCode(d+(e<<8))]=String.fromCharCode(d)+String.fromCharCode(e);var f=IEBinaryToArray_ByteStr(b),g=IEBinaryToArray_ByteStr_Last(b);return f.replace(/[\s\S]/g,function(a){return c[a]})+g}},{}]},{},[1]); diff --git a/doc/0.1.4/en_public/jquery/jszip-utils/dist/jszip-utils.js b/doc/0.1.4/en_public/jquery/jszip-utils/dist/jszip-utils.js new file mode 100644 index 0000000..775895e --- /dev/null +++ b/doc/0.1.4/en_public/jquery/jszip-utils/dist/jszip-utils.js @@ -0,0 +1,118 @@ +/*! + +JSZipUtils - A collection of cross-browser utilities to go along with JSZip. + + +(c) 2014 Stuart Knightley, David Duponchel +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip-utils/master/LICENSE.markdown. + +*/ +!function(e){"object"==typeof exports?module.exports=e():"function"==typeof define&&define.amd?define(e):"undefined"!=typeof window?window.JSZipUtils=e():"undefined"!=typeof global?global.JSZipUtils=e():"undefined"!=typeof self&&(self.JSZipUtils=e())}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o + +(c) 2014 Stuart Knightley, David Duponchel +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip-utils/master/LICENSE.markdown. + +*/ +!function(a){"object"==typeof exports?module.exports=a():"function"==typeof define&&define.amd?define(a):"undefined"!=typeof window?window.JSZipUtils=a():"undefined"!=typeof global?global.JSZipUtils=a():"undefined"!=typeof self&&(self.JSZipUtils=a())}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g + +(c) 2009-2016 Stuart Knightley +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/master/LICENSE.markdown. + +JSZip uses the library pako released under the MIT license : +https://github.com/nodeca/pako/blob/master/LICENSE +*/ + +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.JSZip = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o> 2; + enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); + enc3 = remainingBytes > 1 ? (((chr2 & 15) << 2) | (chr3 >> 6)) : 64; + enc4 = remainingBytes > 2 ? (chr3 & 63) : 64; + + output.push(_keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4)); + + } + + return output.join(""); +}; + +// public method for decoding +exports.decode = function(input) { + var chr1, chr2, chr3; + var enc1, enc2, enc3, enc4; + var i = 0, resultIndex = 0; + + var dataUrlPrefix = "data:"; + + if (input.substr(0, dataUrlPrefix.length) === dataUrlPrefix) { + // This is a common error: people give a data url + // (data:image/png;base64,iVBOR...) with a {base64: true} and + // wonders why things don't work. + // We can detect that the string input looks like a data url but we + // *can't* be sure it is one: removing everything up to the comma would + // be too dangerous. + throw new Error("Invalid base64 input, it looks like a data url."); + } + + input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + + var totalLength = input.length * 3 / 4; + if(input.charAt(input.length - 1) === _keyStr.charAt(64)) { + totalLength--; + } + if(input.charAt(input.length - 2) === _keyStr.charAt(64)) { + totalLength--; + } + if (totalLength % 1 !== 0) { + // totalLength is not an integer, the length does not match a valid + // base64 content. That can happen if: + // - the input is not a base64 content + // - the input is *almost* a base64 content, with a extra chars at the + // beginning or at the end + // - the input uses a base64 variant (base64url for example) + throw new Error("Invalid base64 input, bad content length."); + } + var output; + if (support.uint8array) { + output = new Uint8Array(totalLength|0); + } else { + output = new Array(totalLength|0); + } + + while (i < input.length) { + + enc1 = _keyStr.indexOf(input.charAt(i++)); + enc2 = _keyStr.indexOf(input.charAt(i++)); + enc3 = _keyStr.indexOf(input.charAt(i++)); + enc4 = _keyStr.indexOf(input.charAt(i++)); + + chr1 = (enc1 << 2) | (enc2 >> 4); + chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); + chr3 = ((enc3 & 3) << 6) | enc4; + + output[resultIndex++] = chr1; + + if (enc3 !== 64) { + output[resultIndex++] = chr2; + } + if (enc4 !== 64) { + output[resultIndex++] = chr3; + } + + } + + return output; +}; + +},{"./support":30,"./utils":32}],2:[function(require,module,exports){ +'use strict'; + +var external = require("./external"); +var DataWorker = require('./stream/DataWorker'); +var DataLengthProbe = require('./stream/DataLengthProbe'); +var Crc32Probe = require('./stream/Crc32Probe'); +var DataLengthProbe = require('./stream/DataLengthProbe'); + +/** + * Represent a compressed object, with everything needed to decompress it. + * @constructor + * @param {number} compressedSize the size of the data compressed. + * @param {number} uncompressedSize the size of the data after decompression. + * @param {number} crc32 the crc32 of the decompressed file. + * @param {object} compression the type of compression, see lib/compressions.js. + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the compressed data. + */ +function CompressedObject(compressedSize, uncompressedSize, crc32, compression, data) { + this.compressedSize = compressedSize; + this.uncompressedSize = uncompressedSize; + this.crc32 = crc32; + this.compression = compression; + this.compressedContent = data; +} + +CompressedObject.prototype = { + /** + * Create a worker to get the uncompressed content. + * @return {GenericWorker} the worker. + */ + getContentWorker : function () { + var worker = new DataWorker(external.Promise.resolve(this.compressedContent)) + .pipe(this.compression.uncompressWorker()) + .pipe(new DataLengthProbe("data_length")); + + var that = this; + worker.on("end", function () { + if(this.streamInfo['data_length'] !== that.uncompressedSize) { + throw new Error("Bug : uncompressed data size mismatch"); + } + }); + return worker; + }, + /** + * Create a worker to get the compressed content. + * @return {GenericWorker} the worker. + */ + getCompressedWorker : function () { + return new DataWorker(external.Promise.resolve(this.compressedContent)) + .withStreamInfo("compressedSize", this.compressedSize) + .withStreamInfo("uncompressedSize", this.uncompressedSize) + .withStreamInfo("crc32", this.crc32) + .withStreamInfo("compression", this.compression) + ; + } +}; + +/** + * Chain the given worker with other workers to compress the content with the + * given compresion. + * @param {GenericWorker} uncompressedWorker the worker to pipe. + * @param {Object} compression the compression object. + * @param {Object} compressionOptions the options to use when compressing. + * @return {GenericWorker} the new worker compressing the content. + */ +CompressedObject.createWorkerFrom = function (uncompressedWorker, compression, compressionOptions) { + return uncompressedWorker + .pipe(new Crc32Probe()) + .pipe(new DataLengthProbe("uncompressedSize")) + .pipe(compression.compressWorker(compressionOptions)) + .pipe(new DataLengthProbe("compressedSize")) + .withStreamInfo("compression", compression); +}; + +module.exports = CompressedObject; + +},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(require,module,exports){ +'use strict'; + +var GenericWorker = require("./stream/GenericWorker"); + +exports.STORE = { + magic: "\x00\x00", + compressWorker : function (compressionOptions) { + return new GenericWorker("STORE compression"); + }, + uncompressWorker : function () { + return new GenericWorker("STORE decompression"); + } +}; +exports.DEFLATE = require('./flate'); + +},{"./flate":7,"./stream/GenericWorker":28}],4:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); + +/** + * The following functions come from pako, from pako/lib/zlib/crc32.js + * released under the MIT license, see pako https://github.com/nodeca/pako/ + */ + +// Use ordinary array, since untyped makes no boost here +function makeTable() { + var c, table = []; + + for(var n =0; n < 256; n++){ + c = n; + for(var k =0; k < 8; k++){ + c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); + } + table[n] = c; + } + + return table; +} + +// Create table on load. Just 255 signed longs. Not a problem. +var crcTable = makeTable(); + + +function crc32(crc, buf, len, pos) { + var t = crcTable, end = pos + len; + + crc = crc ^ (-1); + + for (var i = pos; i < end; i++ ) { + crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF]; + } + + return (crc ^ (-1)); // >>> 0; +} + +// That's all for the pako functions. + +/** + * Compute the crc32 of a string. + * This is almost the same as the function crc32, but for strings. Using the + * same function for the two use cases leads to horrible performances. + * @param {Number} crc the starting value of the crc. + * @param {String} str the string to use. + * @param {Number} len the length of the string. + * @param {Number} pos the starting position for the crc32 computation. + * @return {Number} the computed crc32. + */ +function crc32str(crc, str, len, pos) { + var t = crcTable, end = pos + len; + + crc = crc ^ (-1); + + for (var i = pos; i < end; i++ ) { + crc = (crc >>> 8) ^ t[(crc ^ str.charCodeAt(i)) & 0xFF]; + } + + return (crc ^ (-1)); // >>> 0; +} + +module.exports = function crc32wrapper(input, crc) { + if (typeof input === "undefined" || !input.length) { + return 0; + } + + var isArray = utils.getTypeOf(input) !== "string"; + + if(isArray) { + return crc32(crc|0, input, input.length, 0); + } else { + return crc32str(crc|0, input, input.length, 0); + } +}; + +},{"./utils":32}],5:[function(require,module,exports){ +'use strict'; +exports.base64 = false; +exports.binary = false; +exports.dir = false; +exports.createFolders = true; +exports.date = null; +exports.compression = null; +exports.compressionOptions = null; +exports.comment = null; +exports.unixPermissions = null; +exports.dosPermissions = null; + +},{}],6:[function(require,module,exports){ +/* global Promise */ +'use strict'; + +// load the global object first: +// - it should be better integrated in the system (unhandledRejection in node) +// - the environment may have a custom Promise implementation (see zone.js) +var ES6Promise = null; +if (typeof Promise !== "undefined") { + ES6Promise = Promise; +} else { + ES6Promise = require("lie"); +} + +/** + * Let the user use/change some implementations. + */ +module.exports = { + Promise: ES6Promise +}; + +},{"lie":58}],7:[function(require,module,exports){ +'use strict'; +var USE_TYPEDARRAY = (typeof Uint8Array !== 'undefined') && (typeof Uint16Array !== 'undefined') && (typeof Uint32Array !== 'undefined'); + +var pako = require("pako"); +var utils = require("./utils"); +var GenericWorker = require("./stream/GenericWorker"); + +var ARRAY_TYPE = USE_TYPEDARRAY ? "uint8array" : "array"; + +exports.magic = "\x08\x00"; + +/** + * Create a worker that uses pako to inflate/deflate. + * @constructor + * @param {String} action the name of the pako function to call : either "Deflate" or "Inflate". + * @param {Object} options the options to use when (de)compressing. + */ +function FlateWorker(action, options) { + GenericWorker.call(this, "FlateWorker/" + action); + + this._pako = null; + this._pakoAction = action; + this._pakoOptions = options; + // the `meta` object from the last chunk received + // this allow this worker to pass around metadata + this.meta = {}; +} + +utils.inherits(FlateWorker, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +FlateWorker.prototype.processChunk = function (chunk) { + this.meta = chunk.meta; + if (this._pako === null) { + this._createPako(); + } + this._pako.push(utils.transformTo(ARRAY_TYPE, chunk.data), false); +}; + +/** + * @see GenericWorker.flush + */ +FlateWorker.prototype.flush = function () { + GenericWorker.prototype.flush.call(this); + if (this._pako === null) { + this._createPako(); + } + this._pako.push([], true); +}; +/** + * @see GenericWorker.cleanUp + */ +FlateWorker.prototype.cleanUp = function () { + GenericWorker.prototype.cleanUp.call(this); + this._pako = null; +}; + +/** + * Create the _pako object. + * TODO: lazy-loading this object isn't the best solution but it's the + * quickest. The best solution is to lazy-load the worker list. See also the + * issue #446. + */ +FlateWorker.prototype._createPako = function () { + this._pako = new pako[this._pakoAction]({ + raw: true, + level: this._pakoOptions.level || -1 // default compression + }); + var self = this; + this._pako.onData = function(data) { + self.push({ + data : data, + meta : self.meta + }); + }; +}; + +exports.compressWorker = function (compressionOptions) { + return new FlateWorker("Deflate", compressionOptions); +}; +exports.uncompressWorker = function () { + return new FlateWorker("Inflate", {}); +}; + +},{"./stream/GenericWorker":28,"./utils":32,"pako":59}],8:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var GenericWorker = require('../stream/GenericWorker'); +var utf8 = require('../utf8'); +var crc32 = require('../crc32'); +var signature = require('../signature'); + +/** + * Transform an integer into a string in hexadecimal. + * @private + * @param {number} dec the number to convert. + * @param {number} bytes the number of bytes to generate. + * @returns {string} the result. + */ +var decToHex = function(dec, bytes) { + var hex = "", i; + for (i = 0; i < bytes; i++) { + hex += String.fromCharCode(dec & 0xff); + dec = dec >>> 8; + } + return hex; +}; + +/** + * Generate the UNIX part of the external file attributes. + * @param {Object} unixPermissions the unix permissions or null. + * @param {Boolean} isDir true if the entry is a directory, false otherwise. + * @return {Number} a 32 bit integer. + * + * adapted from http://unix.stackexchange.com/questions/14705/the-zip-formats-external-file-attribute : + * + * TTTTsstrwxrwxrwx0000000000ADVSHR + * ^^^^____________________________ file type, see zipinfo.c (UNX_*) + * ^^^_________________________ setuid, setgid, sticky + * ^^^^^^^^^________________ permissions + * ^^^^^^^^^^______ not used ? + * ^^^^^^ DOS attribute bits : Archive, Directory, Volume label, System file, Hidden, Read only + */ +var generateUnixExternalFileAttr = function (unixPermissions, isDir) { + + var result = unixPermissions; + if (!unixPermissions) { + // I can't use octal values in strict mode, hence the hexa. + // 040775 => 0x41fd + // 0100664 => 0x81b4 + result = isDir ? 0x41fd : 0x81b4; + } + return (result & 0xFFFF) << 16; +}; + +/** + * Generate the DOS part of the external file attributes. + * @param {Object} dosPermissions the dos permissions or null. + * @param {Boolean} isDir true if the entry is a directory, false otherwise. + * @return {Number} a 32 bit integer. + * + * Bit 0 Read-Only + * Bit 1 Hidden + * Bit 2 System + * Bit 3 Volume Label + * Bit 4 Directory + * Bit 5 Archive + */ +var generateDosExternalFileAttr = function (dosPermissions, isDir) { + + // the dir flag is already set for compatibility + return (dosPermissions || 0) & 0x3F; +}; + +/** + * Generate the various parts used in the construction of the final zip file. + * @param {Object} streamInfo the hash with informations about the compressed file. + * @param {Boolean} streamedContent is the content streamed ? + * @param {Boolean} streamingEnded is the stream finished ? + * @param {number} offset the current offset from the start of the zip file. + * @param {String} platform let's pretend we are this platform (change platform dependents fields) + * @param {Function} encodeFileName the function to encode the file name / comment. + * @return {Object} the zip parts. + */ +var generateZipParts = function(streamInfo, streamedContent, streamingEnded, offset, platform, encodeFileName) { + var file = streamInfo['file'], + compression = streamInfo['compression'], + useCustomEncoding = encodeFileName !== utf8.utf8encode, + encodedFileName = utils.transformTo("string", encodeFileName(file.name)), + utfEncodedFileName = utils.transformTo("string", utf8.utf8encode(file.name)), + comment = file.comment, + encodedComment = utils.transformTo("string", encodeFileName(comment)), + utfEncodedComment = utils.transformTo("string", utf8.utf8encode(comment)), + useUTF8ForFileName = utfEncodedFileName.length !== file.name.length, + useUTF8ForComment = utfEncodedComment.length !== comment.length, + dosTime, + dosDate, + extraFields = "", + unicodePathExtraField = "", + unicodeCommentExtraField = "", + dir = file.dir, + date = file.date; + + + var dataInfo = { + crc32 : 0, + compressedSize : 0, + uncompressedSize : 0 + }; + + // if the content is streamed, the sizes/crc32 are only available AFTER + // the end of the stream. + if (!streamedContent || streamingEnded) { + dataInfo.crc32 = streamInfo['crc32']; + dataInfo.compressedSize = streamInfo['compressedSize']; + dataInfo.uncompressedSize = streamInfo['uncompressedSize']; + } + + var bitflag = 0; + if (streamedContent) { + // Bit 3: the sizes/crc32 are set to zero in the local header. + // The correct values are put in the data descriptor immediately + // following the compressed data. + bitflag |= 0x0008; + } + if (!useCustomEncoding && (useUTF8ForFileName || useUTF8ForComment)) { + // Bit 11: Language encoding flag (EFS). + bitflag |= 0x0800; + } + + + var extFileAttr = 0; + var versionMadeBy = 0; + if (dir) { + // dos or unix, we set the dos dir flag + extFileAttr |= 0x00010; + } + if(platform === "UNIX") { + versionMadeBy = 0x031E; // UNIX, version 3.0 + extFileAttr |= generateUnixExternalFileAttr(file.unixPermissions, dir); + } else { // DOS or other, fallback to DOS + versionMadeBy = 0x0014; // DOS, version 2.0 + extFileAttr |= generateDosExternalFileAttr(file.dosPermissions, dir); + } + + // date + // @see http://www.delorie.com/djgpp/doc/rbinter/it/52/13.html + // @see http://www.delorie.com/djgpp/doc/rbinter/it/65/16.html + // @see http://www.delorie.com/djgpp/doc/rbinter/it/66/16.html + + dosTime = date.getUTCHours(); + dosTime = dosTime << 6; + dosTime = dosTime | date.getUTCMinutes(); + dosTime = dosTime << 5; + dosTime = dosTime | date.getUTCSeconds() / 2; + + dosDate = date.getUTCFullYear() - 1980; + dosDate = dosDate << 4; + dosDate = dosDate | (date.getUTCMonth() + 1); + dosDate = dosDate << 5; + dosDate = dosDate | date.getUTCDate(); + + if (useUTF8ForFileName) { + // set the unicode path extra field. unzip needs at least one extra + // field to correctly handle unicode path, so using the path is as good + // as any other information. This could improve the situation with + // other archive managers too. + // This field is usually used without the utf8 flag, with a non + // unicode path in the header (winrar, winzip). This helps (a bit) + // with the messy Windows' default compressed folders feature but + // breaks on p7zip which doesn't seek the unicode path extra field. + // So for now, UTF-8 everywhere ! + unicodePathExtraField = + // Version + decToHex(1, 1) + + // NameCRC32 + decToHex(crc32(encodedFileName), 4) + + // UnicodeName + utfEncodedFileName; + + extraFields += + // Info-ZIP Unicode Path Extra Field + "\x75\x70" + + // size + decToHex(unicodePathExtraField.length, 2) + + // content + unicodePathExtraField; + } + + if(useUTF8ForComment) { + + unicodeCommentExtraField = + // Version + decToHex(1, 1) + + // CommentCRC32 + decToHex(crc32(encodedComment), 4) + + // UnicodeName + utfEncodedComment; + + extraFields += + // Info-ZIP Unicode Path Extra Field + "\x75\x63" + + // size + decToHex(unicodeCommentExtraField.length, 2) + + // content + unicodeCommentExtraField; + } + + var header = ""; + + // version needed to extract + header += "\x0A\x00"; + // general purpose bit flag + header += decToHex(bitflag, 2); + // compression method + header += compression.magic; + // last mod file time + header += decToHex(dosTime, 2); + // last mod file date + header += decToHex(dosDate, 2); + // crc-32 + header += decToHex(dataInfo.crc32, 4); + // compressed size + header += decToHex(dataInfo.compressedSize, 4); + // uncompressed size + header += decToHex(dataInfo.uncompressedSize, 4); + // file name length + header += decToHex(encodedFileName.length, 2); + // extra field length + header += decToHex(extraFields.length, 2); + + + var fileRecord = signature.LOCAL_FILE_HEADER + header + encodedFileName + extraFields; + + var dirRecord = signature.CENTRAL_FILE_HEADER + + // version made by (00: DOS) + decToHex(versionMadeBy, 2) + + // file header (common to file and central directory) + header + + // file comment length + decToHex(encodedComment.length, 2) + + // disk number start + "\x00\x00" + + // internal file attributes TODO + "\x00\x00" + + // external file attributes + decToHex(extFileAttr, 4) + + // relative offset of local header + decToHex(offset, 4) + + // file name + encodedFileName + + // extra field + extraFields + + // file comment + encodedComment; + + return { + fileRecord: fileRecord, + dirRecord: dirRecord + }; +}; + +/** + * Generate the EOCD record. + * @param {Number} entriesCount the number of entries in the zip file. + * @param {Number} centralDirLength the length (in bytes) of the central dir. + * @param {Number} localDirLength the length (in bytes) of the local dir. + * @param {String} comment the zip file comment as a binary string. + * @param {Function} encodeFileName the function to encode the comment. + * @return {String} the EOCD record. + */ +var generateCentralDirectoryEnd = function (entriesCount, centralDirLength, localDirLength, comment, encodeFileName) { + var dirEnd = ""; + var encodedComment = utils.transformTo("string", encodeFileName(comment)); + + // end of central dir signature + dirEnd = signature.CENTRAL_DIRECTORY_END + + // number of this disk + "\x00\x00" + + // number of the disk with the start of the central directory + "\x00\x00" + + // total number of entries in the central directory on this disk + decToHex(entriesCount, 2) + + // total number of entries in the central directory + decToHex(entriesCount, 2) + + // size of the central directory 4 bytes + decToHex(centralDirLength, 4) + + // offset of start of central directory with respect to the starting disk number + decToHex(localDirLength, 4) + + // .ZIP file comment length + decToHex(encodedComment.length, 2) + + // .ZIP file comment + encodedComment; + + return dirEnd; +}; + +/** + * Generate data descriptors for a file entry. + * @param {Object} streamInfo the hash generated by a worker, containing informations + * on the file entry. + * @return {String} the data descriptors. + */ +var generateDataDescriptors = function (streamInfo) { + var descriptor = ""; + descriptor = signature.DATA_DESCRIPTOR + + // crc-32 4 bytes + decToHex(streamInfo['crc32'], 4) + + // compressed size 4 bytes + decToHex(streamInfo['compressedSize'], 4) + + // uncompressed size 4 bytes + decToHex(streamInfo['uncompressedSize'], 4); + + return descriptor; +}; + + +/** + * A worker to concatenate other workers to create a zip file. + * @param {Boolean} streamFiles `true` to stream the content of the files, + * `false` to accumulate it. + * @param {String} comment the comment to use. + * @param {String} platform the platform to use, "UNIX" or "DOS". + * @param {Function} encodeFileName the function to encode file names and comments. + */ +function ZipFileWorker(streamFiles, comment, platform, encodeFileName) { + GenericWorker.call(this, "ZipFileWorker"); + // The number of bytes written so far. This doesn't count accumulated chunks. + this.bytesWritten = 0; + // The comment of the zip file + this.zipComment = comment; + // The platform "generating" the zip file. + this.zipPlatform = platform; + // the function to encode file names and comments. + this.encodeFileName = encodeFileName; + // Should we stream the content of the files ? + this.streamFiles = streamFiles; + // If `streamFiles` is false, we will need to accumulate the content of the + // files to calculate sizes / crc32 (and write them *before* the content). + // This boolean indicates if we are accumulating chunks (it will change a lot + // during the lifetime of this worker). + this.accumulate = false; + // The buffer receiving chunks when accumulating content. + this.contentBuffer = []; + // The list of generated directory records. + this.dirRecords = []; + // The offset (in bytes) from the beginning of the zip file for the current source. + this.currentSourceOffset = 0; + // The total number of entries in this zip file. + this.entriesCount = 0; + // the name of the file currently being added, null when handling the end of the zip file. + // Used for the emited metadata. + this.currentFile = null; + + + + this._sources = []; +} +utils.inherits(ZipFileWorker, GenericWorker); + +/** + * @see GenericWorker.push + */ +ZipFileWorker.prototype.push = function (chunk) { + + var currentFilePercent = chunk.meta.percent || 0; + var entriesCount = this.entriesCount; + var remainingFiles = this._sources.length; + + if(this.accumulate) { + this.contentBuffer.push(chunk); + } else { + this.bytesWritten += chunk.data.length; + + GenericWorker.prototype.push.call(this, { + data : chunk.data, + meta : { + currentFile : this.currentFile, + percent : entriesCount ? (currentFilePercent + 100 * (entriesCount - remainingFiles - 1)) / entriesCount : 100 + } + }); + } +}; + +/** + * The worker started a new source (an other worker). + * @param {Object} streamInfo the streamInfo object from the new source. + */ +ZipFileWorker.prototype.openedSource = function (streamInfo) { + this.currentSourceOffset = this.bytesWritten; + this.currentFile = streamInfo['file'].name; + + var streamedContent = this.streamFiles && !streamInfo['file'].dir; + + // don't stream folders (because they don't have any content) + if(streamedContent) { + var record = generateZipParts(streamInfo, streamedContent, false, this.currentSourceOffset, this.zipPlatform, this.encodeFileName); + this.push({ + data : record.fileRecord, + meta : {percent:0} + }); + } else { + // we need to wait for the whole file before pushing anything + this.accumulate = true; + } +}; + +/** + * The worker finished a source (an other worker). + * @param {Object} streamInfo the streamInfo object from the finished source. + */ +ZipFileWorker.prototype.closedSource = function (streamInfo) { + this.accumulate = false; + var streamedContent = this.streamFiles && !streamInfo['file'].dir; + var record = generateZipParts(streamInfo, streamedContent, true, this.currentSourceOffset, this.zipPlatform, this.encodeFileName); + + this.dirRecords.push(record.dirRecord); + if(streamedContent) { + // after the streamed file, we put data descriptors + this.push({ + data : generateDataDescriptors(streamInfo), + meta : {percent:100} + }); + } else { + // the content wasn't streamed, we need to push everything now + // first the file record, then the content + this.push({ + data : record.fileRecord, + meta : {percent:0} + }); + while(this.contentBuffer.length) { + this.push(this.contentBuffer.shift()); + } + } + this.currentFile = null; +}; + +/** + * @see GenericWorker.flush + */ +ZipFileWorker.prototype.flush = function () { + + var localDirLength = this.bytesWritten; + for(var i = 0; i < this.dirRecords.length; i++) { + this.push({ + data : this.dirRecords[i], + meta : {percent:100} + }); + } + var centralDirLength = this.bytesWritten - localDirLength; + + var dirEnd = generateCentralDirectoryEnd(this.dirRecords.length, centralDirLength, localDirLength, this.zipComment, this.encodeFileName); + + this.push({ + data : dirEnd, + meta : {percent:100} + }); +}; + +/** + * Prepare the next source to be read. + */ +ZipFileWorker.prototype.prepareNextSource = function () { + this.previous = this._sources.shift(); + this.openedSource(this.previous.streamInfo); + if (this.isPaused) { + this.previous.pause(); + } else { + this.previous.resume(); + } +}; + +/** + * @see GenericWorker.registerPrevious + */ +ZipFileWorker.prototype.registerPrevious = function (previous) { + this._sources.push(previous); + var self = this; + + previous.on('data', function (chunk) { + self.processChunk(chunk); + }); + previous.on('end', function () { + self.closedSource(self.previous.streamInfo); + if(self._sources.length) { + self.prepareNextSource(); + } else { + self.end(); + } + }); + previous.on('error', function (e) { + self.error(e); + }); + return this; +}; + +/** + * @see GenericWorker.resume + */ +ZipFileWorker.prototype.resume = function () { + if(!GenericWorker.prototype.resume.call(this)) { + return false; + } + + if (!this.previous && this._sources.length) { + this.prepareNextSource(); + return true; + } + if (!this.previous && !this._sources.length && !this.generatedError) { + this.end(); + return true; + } +}; + +/** + * @see GenericWorker.error + */ +ZipFileWorker.prototype.error = function (e) { + var sources = this._sources; + if(!GenericWorker.prototype.error.call(this, e)) { + return false; + } + for(var i = 0; i < sources.length; i++) { + try { + sources[i].error(e); + } catch(e) { + // the `error` exploded, nothing to do + } + } + return true; +}; + +/** + * @see GenericWorker.lock + */ +ZipFileWorker.prototype.lock = function () { + GenericWorker.prototype.lock.call(this); + var sources = this._sources; + for(var i = 0; i < sources.length; i++) { + sources[i].lock(); + } +}; + +module.exports = ZipFileWorker; + +},{"../crc32":4,"../signature":23,"../stream/GenericWorker":28,"../utf8":31,"../utils":32}],9:[function(require,module,exports){ +'use strict'; + +var compressions = require('../compressions'); +var ZipFileWorker = require('./ZipFileWorker'); + +/** + * Find the compression to use. + * @param {String} fileCompression the compression defined at the file level, if any. + * @param {String} zipCompression the compression defined at the load() level. + * @return {Object} the compression object to use. + */ +var getCompression = function (fileCompression, zipCompression) { + + var compressionName = fileCompression || zipCompression; + var compression = compressions[compressionName]; + if (!compression) { + throw new Error(compressionName + " is not a valid compression method !"); + } + return compression; +}; + +/** + * Create a worker to generate a zip file. + * @param {JSZip} zip the JSZip instance at the right root level. + * @param {Object} options to generate the zip file. + * @param {String} comment the comment to use. + */ +exports.generateWorker = function (zip, options, comment) { + + var zipFileWorker = new ZipFileWorker(options.streamFiles, comment, options.platform, options.encodeFileName); + var entriesCount = 0; + try { + + zip.forEach(function (relativePath, file) { + entriesCount++; + var compression = getCompression(file.options.compression, options.compression); + var compressionOptions = file.options.compressionOptions || options.compressionOptions || {}; + var dir = file.dir, date = file.date; + + file._compressWorker(compression, compressionOptions) + .withStreamInfo("file", { + name : relativePath, + dir : dir, + date : date, + comment : file.comment || "", + unixPermissions : file.unixPermissions, + dosPermissions : file.dosPermissions + }) + .pipe(zipFileWorker); + }); + zipFileWorker.entriesCount = entriesCount; + } catch (e) { + zipFileWorker.error(e); + } + + return zipFileWorker; +}; + +},{"../compressions":3,"./ZipFileWorker":8}],10:[function(require,module,exports){ +'use strict'; + +/** + * Representation a of zip file in js + * @constructor + */ +function JSZip() { + // if this constructor is used without `new`, it adds `new` before itself: + if(!(this instanceof JSZip)) { + return new JSZip(); + } + + if(arguments.length) { + throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide."); + } + + // object containing the files : + // { + // "folder/" : {...}, + // "folder/data.txt" : {...} + // } + this.files = {}; + + this.comment = null; + + // Where we are in the hierarchy + this.root = ""; + this.clone = function() { + var newObj = new JSZip(); + for (var i in this) { + if (typeof this[i] !== "function") { + newObj[i] = this[i]; + } + } + return newObj; + }; +} +JSZip.prototype = require('./object'); +JSZip.prototype.loadAsync = require('./load'); +JSZip.support = require('./support'); +JSZip.defaults = require('./defaults'); + +// TODO find a better way to handle this version, +// a require('package.json').version doesn't work with webpack, see #327 +JSZip.version = "3.1.5"; + +JSZip.loadAsync = function (content, options) { + return new JSZip().loadAsync(content, options); +}; + +JSZip.external = require("./external"); +module.exports = JSZip; + +},{"./defaults":5,"./external":6,"./load":11,"./object":15,"./support":30}],11:[function(require,module,exports){ +'use strict'; +var utils = require('./utils'); +var external = require("./external"); +var utf8 = require('./utf8'); +var utils = require('./utils'); +var ZipEntries = require('./zipEntries'); +var Crc32Probe = require('./stream/Crc32Probe'); +var nodejsUtils = require("./nodejsUtils"); + +/** + * Check the CRC32 of an entry. + * @param {ZipEntry} zipEntry the zip entry to check. + * @return {Promise} the result. + */ +function checkEntryCRC32(zipEntry) { + return new external.Promise(function (resolve, reject) { + var worker = zipEntry.decompressed.getContentWorker().pipe(new Crc32Probe()); + worker.on("error", function (e) { + reject(e); + }) + .on("end", function () { + if (worker.streamInfo.crc32 !== zipEntry.decompressed.crc32) { + reject(new Error("Corrupted zip : CRC32 mismatch")); + } else { + resolve(); + } + }) + .resume(); + }); +} + +module.exports = function(data, options) { + var zip = this; + options = utils.extend(options || {}, { + base64: false, + checkCRC32: false, + optimizedBinaryString: false, + createFolders: false, + decodeFileName: utf8.utf8decode + }); + + if (nodejsUtils.isNode && nodejsUtils.isStream(data)) { + return external.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")); + } + + return utils.prepareContent("the loaded zip file", data, true, options.optimizedBinaryString, options.base64) + .then(function(data) { + var zipEntries = new ZipEntries(options); + zipEntries.load(data); + return zipEntries; + }).then(function checkCRC32(zipEntries) { + var promises = [external.Promise.resolve(zipEntries)]; + var files = zipEntries.files; + if (options.checkCRC32) { + for (var i = 0; i < files.length; i++) { + promises.push(checkEntryCRC32(files[i])); + } + } + return external.Promise.all(promises); + }).then(function addFiles(results) { + var zipEntries = results.shift(); + var files = zipEntries.files; + for (var i = 0; i < files.length; i++) { + var input = files[i]; + zip.file(input.fileNameStr, input.decompressed, { + binary: true, + optimizedBinaryString: true, + date: input.date, + dir: input.dir, + comment : input.fileCommentStr.length ? input.fileCommentStr : null, + unixPermissions : input.unixPermissions, + dosPermissions : input.dosPermissions, + createFolders: options.createFolders + }); + } + if (zipEntries.zipComment.length) { + zip.comment = zipEntries.zipComment; + } + + return zip; + }); +}; + +},{"./external":6,"./nodejsUtils":14,"./stream/Crc32Probe":25,"./utf8":31,"./utils":32,"./zipEntries":33}],12:[function(require,module,exports){ +"use strict"; + +var utils = require('../utils'); +var GenericWorker = require('../stream/GenericWorker'); + +/** + * A worker that use a nodejs stream as source. + * @constructor + * @param {String} filename the name of the file entry for this stream. + * @param {Readable} stream the nodejs stream. + */ +function NodejsStreamInputAdapter(filename, stream) { + GenericWorker.call(this, "Nodejs stream input adapter for " + filename); + this._upstreamEnded = false; + this._bindStream(stream); +} + +utils.inherits(NodejsStreamInputAdapter, GenericWorker); + +/** + * Prepare the stream and bind the callbacks on it. + * Do this ASAP on node 0.10 ! A lazy binding doesn't always work. + * @param {Stream} stream the nodejs stream to use. + */ +NodejsStreamInputAdapter.prototype._bindStream = function (stream) { + var self = this; + this._stream = stream; + stream.pause(); + stream + .on("data", function (chunk) { + self.push({ + data: chunk, + meta : { + percent : 0 + } + }); + }) + .on("error", function (e) { + if(self.isPaused) { + this.generatedError = e; + } else { + self.error(e); + } + }) + .on("end", function () { + if(self.isPaused) { + self._upstreamEnded = true; + } else { + self.end(); + } + }); +}; +NodejsStreamInputAdapter.prototype.pause = function () { + if(!GenericWorker.prototype.pause.call(this)) { + return false; + } + this._stream.pause(); + return true; +}; +NodejsStreamInputAdapter.prototype.resume = function () { + if(!GenericWorker.prototype.resume.call(this)) { + return false; + } + + if(this._upstreamEnded) { + this.end(); + } else { + this._stream.resume(); + } + + return true; +}; + +module.exports = NodejsStreamInputAdapter; + +},{"../stream/GenericWorker":28,"../utils":32}],13:[function(require,module,exports){ +'use strict'; + +var Readable = require('readable-stream').Readable; + +var utils = require('../utils'); +utils.inherits(NodejsStreamOutputAdapter, Readable); + +/** +* A nodejs stream using a worker as source. +* @see the SourceWrapper in http://nodejs.org/api/stream.html +* @constructor +* @param {StreamHelper} helper the helper wrapping the worker +* @param {Object} options the nodejs stream options +* @param {Function} updateCb the update callback. +*/ +function NodejsStreamOutputAdapter(helper, options, updateCb) { + Readable.call(this, options); + this._helper = helper; + + var self = this; + helper.on("data", function (data, meta) { + if (!self.push(data)) { + self._helper.pause(); + } + if(updateCb) { + updateCb(meta); + } + }) + .on("error", function(e) { + self.emit('error', e); + }) + .on("end", function () { + self.push(null); + }); +} + + +NodejsStreamOutputAdapter.prototype._read = function() { + this._helper.resume(); +}; + +module.exports = NodejsStreamOutputAdapter; + +},{"../utils":32,"readable-stream":16}],14:[function(require,module,exports){ +'use strict'; + +module.exports = { + /** + * True if this is running in Nodejs, will be undefined in a browser. + * In a browser, browserify won't include this file and the whole module + * will be resolved an empty object. + */ + isNode : typeof Buffer !== "undefined", + /** + * Create a new nodejs Buffer from an existing content. + * @param {Object} data the data to pass to the constructor. + * @param {String} encoding the encoding to use. + * @return {Buffer} a new Buffer. + */ + newBufferFrom: function(data, encoding) { + // XXX We can't use `Buffer.from` which comes from `Uint8Array.from` + // in nodejs v4 (< v.4.5). It's not the expected implementation (and + // has a different signature). + // see https://github.com/nodejs/node/issues/8053 + // A condition on nodejs' version won't solve the issue as we don't + // control the Buffer polyfills that may or may not be used. + return new Buffer(data, encoding); + }, + /** + * Create a new nodejs Buffer with the specified size. + * @param {Integer} size the size of the buffer. + * @return {Buffer} a new Buffer. + */ + allocBuffer: function (size) { + if (Buffer.alloc) { + return Buffer.alloc(size); + } else { + return new Buffer(size); + } + }, + /** + * Find out if an object is a Buffer. + * @param {Object} b the object to test. + * @return {Boolean} true if the object is a Buffer, false otherwise. + */ + isBuffer : function(b){ + return Buffer.isBuffer(b); + }, + + isStream : function (obj) { + return obj && + typeof obj.on === "function" && + typeof obj.pause === "function" && + typeof obj.resume === "function"; + } +}; + +},{}],15:[function(require,module,exports){ +'use strict'; +var utf8 = require('./utf8'); +var utils = require('./utils'); +var GenericWorker = require('./stream/GenericWorker'); +var StreamHelper = require('./stream/StreamHelper'); +var defaults = require('./defaults'); +var CompressedObject = require('./compressedObject'); +var ZipObject = require('./zipObject'); +var generate = require("./generate"); +var nodejsUtils = require("./nodejsUtils"); +var NodejsStreamInputAdapter = require("./nodejs/NodejsStreamInputAdapter"); + + +/** + * Add a file in the current folder. + * @private + * @param {string} name the name of the file + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data of the file + * @param {Object} originalOptions the options of the file + * @return {Object} the new file. + */ +var fileAdd = function(name, data, originalOptions) { + // be sure sub folders exist + var dataType = utils.getTypeOf(data), + parent; + + + /* + * Correct options. + */ + + var o = utils.extend(originalOptions || {}, defaults); + o.date = o.date || new Date(); + if (o.compression !== null) { + o.compression = o.compression.toUpperCase(); + } + + if (typeof o.unixPermissions === "string") { + o.unixPermissions = parseInt(o.unixPermissions, 8); + } + + // UNX_IFDIR 0040000 see zipinfo.c + if (o.unixPermissions && (o.unixPermissions & 0x4000)) { + o.dir = true; + } + // Bit 4 Directory + if (o.dosPermissions && (o.dosPermissions & 0x0010)) { + o.dir = true; + } + + if (o.dir) { + name = forceTrailingSlash(name); + } + if (o.createFolders && (parent = parentFolder(name))) { + folderAdd.call(this, parent, true); + } + + var isUnicodeString = dataType === "string" && o.binary === false && o.base64 === false; + if (!originalOptions || typeof originalOptions.binary === "undefined") { + o.binary = !isUnicodeString; + } + + + var isCompressedEmpty = (data instanceof CompressedObject) && data.uncompressedSize === 0; + + if (isCompressedEmpty || o.dir || !data || data.length === 0) { + o.base64 = false; + o.binary = true; + data = ""; + o.compression = "STORE"; + dataType = "string"; + } + + /* + * Convert content to fit. + */ + + var zipObjectContent = null; + if (data instanceof CompressedObject || data instanceof GenericWorker) { + zipObjectContent = data; + } else if (nodejsUtils.isNode && nodejsUtils.isStream(data)) { + zipObjectContent = new NodejsStreamInputAdapter(name, data); + } else { + zipObjectContent = utils.prepareContent(name, data, o.binary, o.optimizedBinaryString, o.base64); + } + + var object = new ZipObject(name, zipObjectContent, o); + this.files[name] = object; + /* + TODO: we can't throw an exception because we have async promises + (we can have a promise of a Date() for example) but returning a + promise is useless because file(name, data) returns the JSZip + object for chaining. Should we break that to allow the user + to catch the error ? + + return external.Promise.resolve(zipObjectContent) + .then(function () { + return object; + }); + */ +}; + +/** + * Find the parent folder of the path. + * @private + * @param {string} path the path to use + * @return {string} the parent folder, or "" + */ +var parentFolder = function (path) { + if (path.slice(-1) === '/') { + path = path.substring(0, path.length - 1); + } + var lastSlash = path.lastIndexOf('/'); + return (lastSlash > 0) ? path.substring(0, lastSlash) : ""; +}; + +/** + * Returns the path with a slash at the end. + * @private + * @param {String} path the path to check. + * @return {String} the path with a trailing slash. + */ +var forceTrailingSlash = function(path) { + // Check the name ends with a / + if (path.slice(-1) !== "/") { + path += "/"; // IE doesn't like substr(-1) + } + return path; +}; + +/** + * Add a (sub) folder in the current folder. + * @private + * @param {string} name the folder's name + * @param {boolean=} [createFolders] If true, automatically create sub + * folders. Defaults to false. + * @return {Object} the new folder. + */ +var folderAdd = function(name, createFolders) { + createFolders = (typeof createFolders !== 'undefined') ? createFolders : defaults.createFolders; + + name = forceTrailingSlash(name); + + // Does this folder already exist? + if (!this.files[name]) { + fileAdd.call(this, name, null, { + dir: true, + createFolders: createFolders + }); + } + return this.files[name]; +}; + +/** +* Cross-window, cross-Node-context regular expression detection +* @param {Object} object Anything +* @return {Boolean} true if the object is a regular expression, +* false otherwise +*/ +function isRegExp(object) { + return Object.prototype.toString.call(object) === "[object RegExp]"; +} + +// return the actual prototype of JSZip +var out = { + /** + * @see loadAsync + */ + load: function() { + throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide."); + }, + + + /** + * Call a callback function for each entry at this folder level. + * @param {Function} cb the callback function: + * function (relativePath, file) {...} + * It takes 2 arguments : the relative path and the file. + */ + forEach: function(cb) { + var filename, relativePath, file; + for (filename in this.files) { + if (!this.files.hasOwnProperty(filename)) { + continue; + } + file = this.files[filename]; + relativePath = filename.slice(this.root.length, filename.length); + if (relativePath && filename.slice(0, this.root.length) === this.root) { // the file is in the current root + cb(relativePath, file); // TODO reverse the parameters ? need to be clean AND consistent with the filter search fn... + } + } + }, + + /** + * Filter nested files/folders with the specified function. + * @param {Function} search the predicate to use : + * function (relativePath, file) {...} + * It takes 2 arguments : the relative path and the file. + * @return {Array} An array of matching elements. + */ + filter: function(search) { + var result = []; + this.forEach(function (relativePath, entry) { + if (search(relativePath, entry)) { // the file matches the function + result.push(entry); + } + + }); + return result; + }, + + /** + * Add a file to the zip file, or search a file. + * @param {string|RegExp} name The name of the file to add (if data is defined), + * the name of the file to find (if no data) or a regex to match files. + * @param {String|ArrayBuffer|Uint8Array|Buffer} data The file data, either raw or base64 encoded + * @param {Object} o File options + * @return {JSZip|Object|Array} this JSZip object (when adding a file), + * a file (when searching by string) or an array of files (when searching by regex). + */ + file: function(name, data, o) { + if (arguments.length === 1) { + if (isRegExp(name)) { + var regexp = name; + return this.filter(function(relativePath, file) { + return !file.dir && regexp.test(relativePath); + }); + } + else { // text + var obj = this.files[this.root + name]; + if (obj && !obj.dir) { + return obj; + } else { + return null; + } + } + } + else { // more than one argument : we have data ! + name = this.root + name; + fileAdd.call(this, name, data, o); + } + return this; + }, + + /** + * Add a directory to the zip file, or search. + * @param {String|RegExp} arg The name of the directory to add, or a regex to search folders. + * @return {JSZip} an object with the new directory as the root, or an array containing matching folders. + */ + folder: function(arg) { + if (!arg) { + return this; + } + + if (isRegExp(arg)) { + return this.filter(function(relativePath, file) { + return file.dir && arg.test(relativePath); + }); + } + + // else, name is a new folder + var name = this.root + arg; + var newFolder = folderAdd.call(this, name); + + // Allow chaining by returning a new object with this folder as the root + var ret = this.clone(); + ret.root = newFolder.name; + return ret; + }, + + /** + * Delete a file, or a directory and all sub-files, from the zip + * @param {string} name the name of the file to delete + * @return {JSZip} this JSZip object + */ + remove: function(name) { + name = this.root + name; + var file = this.files[name]; + if (!file) { + // Look for any folders + if (name.slice(-1) !== "/") { + name += "/"; + } + file = this.files[name]; + } + + if (file && !file.dir) { + // file + delete this.files[name]; + } else { + // maybe a folder, delete recursively + var kids = this.filter(function(relativePath, file) { + return file.name.slice(0, name.length) === name; + }); + for (var i = 0; i < kids.length; i++) { + delete this.files[kids[i].name]; + } + } + + return this; + }, + + /** + * Generate the complete zip file + * @param {Object} options the options to generate the zip file : + * - compression, "STORE" by default. + * - type, "base64" by default. Values are : string, base64, uint8array, arraybuffer, blob. + * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the zip file + */ + generate: function(options) { + throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide."); + }, + + /** + * Generate the complete zip file as an internal stream. + * @param {Object} options the options to generate the zip file : + * - compression, "STORE" by default. + * - type, "base64" by default. Values are : string, base64, uint8array, arraybuffer, blob. + * @return {StreamHelper} the streamed zip file. + */ + generateInternalStream: function(options) { + var worker, opts = {}; + try { + opts = utils.extend(options || {}, { + streamFiles: false, + compression: "STORE", + compressionOptions : null, + type: "", + platform: "DOS", + comment: null, + mimeType: 'application/zip', + encodeFileName: utf8.utf8encode + }); + + opts.type = opts.type.toLowerCase(); + opts.compression = opts.compression.toUpperCase(); + + // "binarystring" is prefered but the internals use "string". + if(opts.type === "binarystring") { + opts.type = "string"; + } + + if (!opts.type) { + throw new Error("No output type specified."); + } + + utils.checkSupport(opts.type); + + // accept nodejs `process.platform` + if( + opts.platform === 'darwin' || + opts.platform === 'freebsd' || + opts.platform === 'linux' || + opts.platform === 'sunos' + ) { + opts.platform = "UNIX"; + } + if (opts.platform === 'win32') { + opts.platform = "DOS"; + } + + var comment = opts.comment || this.comment || ""; + worker = generate.generateWorker(this, opts, comment); + } catch (e) { + worker = new GenericWorker("error"); + worker.error(e); + } + return new StreamHelper(worker, opts.type || "string", opts.mimeType); + }, + /** + * Generate the complete zip file asynchronously. + * @see generateInternalStream + */ + generateAsync: function(options, onUpdate) { + return this.generateInternalStream(options).accumulate(onUpdate); + }, + /** + * Generate the complete zip file asynchronously. + * @see generateInternalStream + */ + generateNodeStream: function(options, onUpdate) { + options = options || {}; + if (!options.type) { + options.type = "nodebuffer"; + } + return this.generateInternalStream(options).toNodejsStream(onUpdate); + } +}; +module.exports = out; + +},{"./compressedObject":2,"./defaults":5,"./generate":9,"./nodejs/NodejsStreamInputAdapter":12,"./nodejsUtils":14,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31,"./utils":32,"./zipObject":35}],16:[function(require,module,exports){ +/* + * This file is used by module bundlers (browserify/webpack/etc) when + * including a stream implementation. We use "readable-stream" to get a + * consistent behavior between nodejs versions but bundlers often have a shim + * for "stream". Using this shim greatly improve the compatibility and greatly + * reduce the final size of the bundle (only one stream implementation, not + * two). + */ +module.exports = require("stream"); + +},{"stream":undefined}],17:[function(require,module,exports){ +'use strict'; +var DataReader = require('./DataReader'); +var utils = require('../utils'); + +function ArrayReader(data) { + DataReader.call(this, data); + for(var i = 0; i < this.data.length; i++) { + data[i] = data[i] & 0xFF; + } +} +utils.inherits(ArrayReader, DataReader); +/** + * @see DataReader.byteAt + */ +ArrayReader.prototype.byteAt = function(i) { + return this.data[this.zero + i]; +}; +/** + * @see DataReader.lastIndexOfSignature + */ +ArrayReader.prototype.lastIndexOfSignature = function(sig) { + var sig0 = sig.charCodeAt(0), + sig1 = sig.charCodeAt(1), + sig2 = sig.charCodeAt(2), + sig3 = sig.charCodeAt(3); + for (var i = this.length - 4; i >= 0; --i) { + if (this.data[i] === sig0 && this.data[i + 1] === sig1 && this.data[i + 2] === sig2 && this.data[i + 3] === sig3) { + return i - this.zero; + } + } + + return -1; +}; +/** + * @see DataReader.readAndCheckSignature + */ +ArrayReader.prototype.readAndCheckSignature = function (sig) { + var sig0 = sig.charCodeAt(0), + sig1 = sig.charCodeAt(1), + sig2 = sig.charCodeAt(2), + sig3 = sig.charCodeAt(3), + data = this.readData(4); + return sig0 === data[0] && sig1 === data[1] && sig2 === data[2] && sig3 === data[3]; +}; +/** + * @see DataReader.readData + */ +ArrayReader.prototype.readData = function(size) { + this.checkOffset(size); + if(size === 0) { + return []; + } + var result = this.data.slice(this.zero + this.index, this.zero + this.index + size); + this.index += size; + return result; +}; +module.exports = ArrayReader; + +},{"../utils":32,"./DataReader":18}],18:[function(require,module,exports){ +'use strict'; +var utils = require('../utils'); + +function DataReader(data) { + this.data = data; // type : see implementation + this.length = data.length; + this.index = 0; + this.zero = 0; +} +DataReader.prototype = { + /** + * Check that the offset will not go too far. + * @param {string} offset the additional offset to check. + * @throws {Error} an Error if the offset is out of bounds. + */ + checkOffset: function(offset) { + this.checkIndex(this.index + offset); + }, + /** + * Check that the specified index will not be too far. + * @param {string} newIndex the index to check. + * @throws {Error} an Error if the index is out of bounds. + */ + checkIndex: function(newIndex) { + if (this.length < this.zero + newIndex || newIndex < 0) { + throw new Error("End of data reached (data length = " + this.length + ", asked index = " + (newIndex) + "). Corrupted zip ?"); + } + }, + /** + * Change the index. + * @param {number} newIndex The new index. + * @throws {Error} if the new index is out of the data. + */ + setIndex: function(newIndex) { + this.checkIndex(newIndex); + this.index = newIndex; + }, + /** + * Skip the next n bytes. + * @param {number} n the number of bytes to skip. + * @throws {Error} if the new index is out of the data. + */ + skip: function(n) { + this.setIndex(this.index + n); + }, + /** + * Get the byte at the specified index. + * @param {number} i the index to use. + * @return {number} a byte. + */ + byteAt: function(i) { + // see implementations + }, + /** + * Get the next number with a given byte size. + * @param {number} size the number of bytes to read. + * @return {number} the corresponding number. + */ + readInt: function(size) { + var result = 0, + i; + this.checkOffset(size); + for (i = this.index + size - 1; i >= this.index; i--) { + result = (result << 8) + this.byteAt(i); + } + this.index += size; + return result; + }, + /** + * Get the next string with a given byte size. + * @param {number} size the number of bytes to read. + * @return {string} the corresponding string. + */ + readString: function(size) { + return utils.transformTo("string", this.readData(size)); + }, + /** + * Get raw data without conversion, bytes. + * @param {number} size the number of bytes to read. + * @return {Object} the raw data, implementation specific. + */ + readData: function(size) { + // see implementations + }, + /** + * Find the last occurence of a zip signature (4 bytes). + * @param {string} sig the signature to find. + * @return {number} the index of the last occurence, -1 if not found. + */ + lastIndexOfSignature: function(sig) { + // see implementations + }, + /** + * Read the signature (4 bytes) at the current position and compare it with sig. + * @param {string} sig the expected signature + * @return {boolean} true if the signature matches, false otherwise. + */ + readAndCheckSignature: function(sig) { + // see implementations + }, + /** + * Get the next date. + * @return {Date} the date. + */ + readDate: function() { + var dostime = this.readInt(4); + return new Date(Date.UTC( + ((dostime >> 25) & 0x7f) + 1980, // year + ((dostime >> 21) & 0x0f) - 1, // month + (dostime >> 16) & 0x1f, // day + (dostime >> 11) & 0x1f, // hour + (dostime >> 5) & 0x3f, // minute + (dostime & 0x1f) << 1)); // second + } +}; +module.exports = DataReader; + +},{"../utils":32}],19:[function(require,module,exports){ +'use strict'; +var Uint8ArrayReader = require('./Uint8ArrayReader'); +var utils = require('../utils'); + +function NodeBufferReader(data) { + Uint8ArrayReader.call(this, data); +} +utils.inherits(NodeBufferReader, Uint8ArrayReader); + +/** + * @see DataReader.readData + */ +NodeBufferReader.prototype.readData = function(size) { + this.checkOffset(size); + var result = this.data.slice(this.zero + this.index, this.zero + this.index + size); + this.index += size; + return result; +}; +module.exports = NodeBufferReader; + +},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(require,module,exports){ +'use strict'; +var DataReader = require('./DataReader'); +var utils = require('../utils'); + +function StringReader(data) { + DataReader.call(this, data); +} +utils.inherits(StringReader, DataReader); +/** + * @see DataReader.byteAt + */ +StringReader.prototype.byteAt = function(i) { + return this.data.charCodeAt(this.zero + i); +}; +/** + * @see DataReader.lastIndexOfSignature + */ +StringReader.prototype.lastIndexOfSignature = function(sig) { + return this.data.lastIndexOf(sig) - this.zero; +}; +/** + * @see DataReader.readAndCheckSignature + */ +StringReader.prototype.readAndCheckSignature = function (sig) { + var data = this.readData(4); + return sig === data; +}; +/** + * @see DataReader.readData + */ +StringReader.prototype.readData = function(size) { + this.checkOffset(size); + // this will work because the constructor applied the "& 0xff" mask. + var result = this.data.slice(this.zero + this.index, this.zero + this.index + size); + this.index += size; + return result; +}; +module.exports = StringReader; + +},{"../utils":32,"./DataReader":18}],21:[function(require,module,exports){ +'use strict'; +var ArrayReader = require('./ArrayReader'); +var utils = require('../utils'); + +function Uint8ArrayReader(data) { + ArrayReader.call(this, data); +} +utils.inherits(Uint8ArrayReader, ArrayReader); +/** + * @see DataReader.readData + */ +Uint8ArrayReader.prototype.readData = function(size) { + this.checkOffset(size); + if(size === 0) { + // in IE10, when using subarray(idx, idx), we get the array [0x00] instead of []. + return new Uint8Array(0); + } + var result = this.data.subarray(this.zero + this.index, this.zero + this.index + size); + this.index += size; + return result; +}; +module.exports = Uint8ArrayReader; + +},{"../utils":32,"./ArrayReader":17}],22:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var support = require('../support'); +var ArrayReader = require('./ArrayReader'); +var StringReader = require('./StringReader'); +var NodeBufferReader = require('./NodeBufferReader'); +var Uint8ArrayReader = require('./Uint8ArrayReader'); + +/** + * Create a reader adapted to the data. + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data to read. + * @return {DataReader} the data reader. + */ +module.exports = function (data) { + var type = utils.getTypeOf(data); + utils.checkSupport(type); + if (type === "string" && !support.uint8array) { + return new StringReader(data); + } + if (type === "nodebuffer") { + return new NodeBufferReader(data); + } + if (support.uint8array) { + return new Uint8ArrayReader(utils.transformTo("uint8array", data)); + } + return new ArrayReader(utils.transformTo("array", data)); +}; + +},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(require,module,exports){ +'use strict'; +exports.LOCAL_FILE_HEADER = "PK\x03\x04"; +exports.CENTRAL_FILE_HEADER = "PK\x01\x02"; +exports.CENTRAL_DIRECTORY_END = "PK\x05\x06"; +exports.ZIP64_CENTRAL_DIRECTORY_LOCATOR = "PK\x06\x07"; +exports.ZIP64_CENTRAL_DIRECTORY_END = "PK\x06\x06"; +exports.DATA_DESCRIPTOR = "PK\x07\x08"; + +},{}],24:[function(require,module,exports){ +'use strict'; + +var GenericWorker = require('./GenericWorker'); +var utils = require('../utils'); + +/** + * A worker which convert chunks to a specified type. + * @constructor + * @param {String} destType the destination type. + */ +function ConvertWorker(destType) { + GenericWorker.call(this, "ConvertWorker to " + destType); + this.destType = destType; +} +utils.inherits(ConvertWorker, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +ConvertWorker.prototype.processChunk = function (chunk) { + this.push({ + data : utils.transformTo(this.destType, chunk.data), + meta : chunk.meta + }); +}; +module.exports = ConvertWorker; + +},{"../utils":32,"./GenericWorker":28}],25:[function(require,module,exports){ +'use strict'; + +var GenericWorker = require('./GenericWorker'); +var crc32 = require('../crc32'); +var utils = require('../utils'); + +/** + * A worker which calculate the crc32 of the data flowing through. + * @constructor + */ +function Crc32Probe() { + GenericWorker.call(this, "Crc32Probe"); + this.withStreamInfo("crc32", 0); +} +utils.inherits(Crc32Probe, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +Crc32Probe.prototype.processChunk = function (chunk) { + this.streamInfo.crc32 = crc32(chunk.data, this.streamInfo.crc32 || 0); + this.push(chunk); +}; +module.exports = Crc32Probe; + +},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var GenericWorker = require('./GenericWorker'); + +/** + * A worker which calculate the total length of the data flowing through. + * @constructor + * @param {String} propName the name used to expose the length + */ +function DataLengthProbe(propName) { + GenericWorker.call(this, "DataLengthProbe for " + propName); + this.propName = propName; + this.withStreamInfo(propName, 0); +} +utils.inherits(DataLengthProbe, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +DataLengthProbe.prototype.processChunk = function (chunk) { + if(chunk) { + var length = this.streamInfo[this.propName] || 0; + this.streamInfo[this.propName] = length + chunk.data.length; + } + GenericWorker.prototype.processChunk.call(this, chunk); +}; +module.exports = DataLengthProbe; + + +},{"../utils":32,"./GenericWorker":28}],27:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var GenericWorker = require('./GenericWorker'); + +// the size of the generated chunks +// TODO expose this as a public variable +var DEFAULT_BLOCK_SIZE = 16 * 1024; + +/** + * A worker that reads a content and emits chunks. + * @constructor + * @param {Promise} dataP the promise of the data to split + */ +function DataWorker(dataP) { + GenericWorker.call(this, "DataWorker"); + var self = this; + this.dataIsReady = false; + this.index = 0; + this.max = 0; + this.data = null; + this.type = ""; + + this._tickScheduled = false; + + dataP.then(function (data) { + self.dataIsReady = true; + self.data = data; + self.max = data && data.length || 0; + self.type = utils.getTypeOf(data); + if(!self.isPaused) { + self._tickAndRepeat(); + } + }, function (e) { + self.error(e); + }); +} + +utils.inherits(DataWorker, GenericWorker); + +/** + * @see GenericWorker.cleanUp + */ +DataWorker.prototype.cleanUp = function () { + GenericWorker.prototype.cleanUp.call(this); + this.data = null; +}; + +/** + * @see GenericWorker.resume + */ +DataWorker.prototype.resume = function () { + if(!GenericWorker.prototype.resume.call(this)) { + return false; + } + + if (!this._tickScheduled && this.dataIsReady) { + this._tickScheduled = true; + utils.delay(this._tickAndRepeat, [], this); + } + return true; +}; + +/** + * Trigger a tick a schedule an other call to this function. + */ +DataWorker.prototype._tickAndRepeat = function() { + this._tickScheduled = false; + if(this.isPaused || this.isFinished) { + return; + } + this._tick(); + if(!this.isFinished) { + utils.delay(this._tickAndRepeat, [], this); + this._tickScheduled = true; + } +}; + +/** + * Read and push a chunk. + */ +DataWorker.prototype._tick = function() { + + if(this.isPaused || this.isFinished) { + return false; + } + + var size = DEFAULT_BLOCK_SIZE; + var data = null, nextIndex = Math.min(this.max, this.index + size); + if (this.index >= this.max) { + // EOF + return this.end(); + } else { + switch(this.type) { + case "string": + data = this.data.substring(this.index, nextIndex); + break; + case "uint8array": + data = this.data.subarray(this.index, nextIndex); + break; + case "array": + case "nodebuffer": + data = this.data.slice(this.index, nextIndex); + break; + } + this.index = nextIndex; + return this.push({ + data : data, + meta : { + percent : this.max ? this.index / this.max * 100 : 0 + } + }); + } +}; + +module.exports = DataWorker; + +},{"../utils":32,"./GenericWorker":28}],28:[function(require,module,exports){ +'use strict'; + +/** + * A worker that does nothing but passing chunks to the next one. This is like + * a nodejs stream but with some differences. On the good side : + * - it works on IE 6-9 without any issue / polyfill + * - it weights less than the full dependencies bundled with browserify + * - it forwards errors (no need to declare an error handler EVERYWHERE) + * + * A chunk is an object with 2 attributes : `meta` and `data`. The former is an + * object containing anything (`percent` for example), see each worker for more + * details. The latter is the real data (String, Uint8Array, etc). + * + * @constructor + * @param {String} name the name of the stream (mainly used for debugging purposes) + */ +function GenericWorker(name) { + // the name of the worker + this.name = name || "default"; + // an object containing metadata about the workers chain + this.streamInfo = {}; + // an error which happened when the worker was paused + this.generatedError = null; + // an object containing metadata to be merged by this worker into the general metadata + this.extraStreamInfo = {}; + // true if the stream is paused (and should not do anything), false otherwise + this.isPaused = true; + // true if the stream is finished (and should not do anything), false otherwise + this.isFinished = false; + // true if the stream is locked to prevent further structure updates (pipe), false otherwise + this.isLocked = false; + // the event listeners + this._listeners = { + 'data':[], + 'end':[], + 'error':[] + }; + // the previous worker, if any + this.previous = null; +} + +GenericWorker.prototype = { + /** + * Push a chunk to the next workers. + * @param {Object} chunk the chunk to push + */ + push : function (chunk) { + this.emit("data", chunk); + }, + /** + * End the stream. + * @return {Boolean} true if this call ended the worker, false otherwise. + */ + end : function () { + if (this.isFinished) { + return false; + } + + this.flush(); + try { + this.emit("end"); + this.cleanUp(); + this.isFinished = true; + } catch (e) { + this.emit("error", e); + } + return true; + }, + /** + * End the stream with an error. + * @param {Error} e the error which caused the premature end. + * @return {Boolean} true if this call ended the worker with an error, false otherwise. + */ + error : function (e) { + if (this.isFinished) { + return false; + } + + if(this.isPaused) { + this.generatedError = e; + } else { + this.isFinished = true; + + this.emit("error", e); + + // in the workers chain exploded in the middle of the chain, + // the error event will go downward but we also need to notify + // workers upward that there has been an error. + if(this.previous) { + this.previous.error(e); + } + + this.cleanUp(); + } + return true; + }, + /** + * Add a callback on an event. + * @param {String} name the name of the event (data, end, error) + * @param {Function} listener the function to call when the event is triggered + * @return {GenericWorker} the current object for chainability + */ + on : function (name, listener) { + this._listeners[name].push(listener); + return this; + }, + /** + * Clean any references when a worker is ending. + */ + cleanUp : function () { + this.streamInfo = this.generatedError = this.extraStreamInfo = null; + this._listeners = []; + }, + /** + * Trigger an event. This will call registered callback with the provided arg. + * @param {String} name the name of the event (data, end, error) + * @param {Object} arg the argument to call the callback with. + */ + emit : function (name, arg) { + if (this._listeners[name]) { + for(var i = 0; i < this._listeners[name].length; i++) { + this._listeners[name][i].call(this, arg); + } + } + }, + /** + * Chain a worker with an other. + * @param {Worker} next the worker receiving events from the current one. + * @return {worker} the next worker for chainability + */ + pipe : function (next) { + return next.registerPrevious(this); + }, + /** + * Same as `pipe` in the other direction. + * Using an API with `pipe(next)` is very easy. + * Implementing the API with the point of view of the next one registering + * a source is easier, see the ZipFileWorker. + * @param {Worker} previous the previous worker, sending events to this one + * @return {Worker} the current worker for chainability + */ + registerPrevious : function (previous) { + if (this.isLocked) { + throw new Error("The stream '" + this + "' has already been used."); + } + + // sharing the streamInfo... + this.streamInfo = previous.streamInfo; + // ... and adding our own bits + this.mergeStreamInfo(); + this.previous = previous; + var self = this; + previous.on('data', function (chunk) { + self.processChunk(chunk); + }); + previous.on('end', function () { + self.end(); + }); + previous.on('error', function (e) { + self.error(e); + }); + return this; + }, + /** + * Pause the stream so it doesn't send events anymore. + * @return {Boolean} true if this call paused the worker, false otherwise. + */ + pause : function () { + if(this.isPaused || this.isFinished) { + return false; + } + this.isPaused = true; + + if(this.previous) { + this.previous.pause(); + } + return true; + }, + /** + * Resume a paused stream. + * @return {Boolean} true if this call resumed the worker, false otherwise. + */ + resume : function () { + if(!this.isPaused || this.isFinished) { + return false; + } + this.isPaused = false; + + // if true, the worker tried to resume but failed + var withError = false; + if(this.generatedError) { + this.error(this.generatedError); + withError = true; + } + if(this.previous) { + this.previous.resume(); + } + + return !withError; + }, + /** + * Flush any remaining bytes as the stream is ending. + */ + flush : function () {}, + /** + * Process a chunk. This is usually the method overridden. + * @param {Object} chunk the chunk to process. + */ + processChunk : function(chunk) { + this.push(chunk); + }, + /** + * Add a key/value to be added in the workers chain streamInfo once activated. + * @param {String} key the key to use + * @param {Object} value the associated value + * @return {Worker} the current worker for chainability + */ + withStreamInfo : function (key, value) { + this.extraStreamInfo[key] = value; + this.mergeStreamInfo(); + return this; + }, + /** + * Merge this worker's streamInfo into the chain's streamInfo. + */ + mergeStreamInfo : function () { + for(var key in this.extraStreamInfo) { + if (!this.extraStreamInfo.hasOwnProperty(key)) { + continue; + } + this.streamInfo[key] = this.extraStreamInfo[key]; + } + }, + + /** + * Lock the stream to prevent further updates on the workers chain. + * After calling this method, all calls to pipe will fail. + */ + lock: function () { + if (this.isLocked) { + throw new Error("The stream '" + this + "' has already been used."); + } + this.isLocked = true; + if (this.previous) { + this.previous.lock(); + } + }, + + /** + * + * Pretty print the workers chain. + */ + toString : function () { + var me = "Worker " + this.name; + if (this.previous) { + return this.previous + " -> " + me; + } else { + return me; + } + } +}; + +module.exports = GenericWorker; + +},{}],29:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils'); +var ConvertWorker = require('./ConvertWorker'); +var GenericWorker = require('./GenericWorker'); +var base64 = require('../base64'); +var support = require("../support"); +var external = require("../external"); + +var NodejsStreamOutputAdapter = null; +if (support.nodestream) { + try { + NodejsStreamOutputAdapter = require('../nodejs/NodejsStreamOutputAdapter'); + } catch(e) {} +} + +/** + * Apply the final transformation of the data. If the user wants a Blob for + * example, it's easier to work with an U8intArray and finally do the + * ArrayBuffer/Blob conversion. + * @param {String} type the name of the final type + * @param {String|Uint8Array|Buffer} content the content to transform + * @param {String} mimeType the mime type of the content, if applicable. + * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the content in the right format. + */ +function transformZipOutput(type, content, mimeType) { + switch(type) { + case "blob" : + return utils.newBlob(utils.transformTo("arraybuffer", content), mimeType); + case "base64" : + return base64.encode(content); + default : + return utils.transformTo(type, content); + } +} + +/** + * Concatenate an array of data of the given type. + * @param {String} type the type of the data in the given array. + * @param {Array} dataArray the array containing the data chunks to concatenate + * @return {String|Uint8Array|Buffer} the concatenated data + * @throws Error if the asked type is unsupported + */ +function concat (type, dataArray) { + var i, index = 0, res = null, totalLength = 0; + for(i = 0; i < dataArray.length; i++) { + totalLength += dataArray[i].length; + } + switch(type) { + case "string": + return dataArray.join(""); + case "array": + return Array.prototype.concat.apply([], dataArray); + case "uint8array": + res = new Uint8Array(totalLength); + for(i = 0; i < dataArray.length; i++) { + res.set(dataArray[i], index); + index += dataArray[i].length; + } + return res; + case "nodebuffer": + return Buffer.concat(dataArray); + default: + throw new Error("concat : unsupported type '" + type + "'"); + } +} + +/** + * Listen a StreamHelper, accumulate its content and concatenate it into a + * complete block. + * @param {StreamHelper} helper the helper to use. + * @param {Function} updateCallback a callback called on each update. Called + * with one arg : + * - the metadata linked to the update received. + * @return Promise the promise for the accumulation. + */ +function accumulate(helper, updateCallback) { + return new external.Promise(function (resolve, reject){ + var dataArray = []; + var chunkType = helper._internalType, + resultType = helper._outputType, + mimeType = helper._mimeType; + helper + .on('data', function (data, meta) { + dataArray.push(data); + if(updateCallback) { + updateCallback(meta); + } + }) + .on('error', function(err) { + dataArray = []; + reject(err); + }) + .on('end', function (){ + try { + var result = transformZipOutput(resultType, concat(chunkType, dataArray), mimeType); + resolve(result); + } catch (e) { + reject(e); + } + dataArray = []; + }) + .resume(); + }); +} + +/** + * An helper to easily use workers outside of JSZip. + * @constructor + * @param {Worker} worker the worker to wrap + * @param {String} outputType the type of data expected by the use + * @param {String} mimeType the mime type of the content, if applicable. + */ +function StreamHelper(worker, outputType, mimeType) { + var internalType = outputType; + switch(outputType) { + case "blob": + case "arraybuffer": + internalType = "uint8array"; + break; + case "base64": + internalType = "string"; + break; + } + + try { + // the type used internally + this._internalType = internalType; + // the type used to output results + this._outputType = outputType; + // the mime type + this._mimeType = mimeType; + utils.checkSupport(internalType); + this._worker = worker.pipe(new ConvertWorker(internalType)); + // the last workers can be rewired without issues but we need to + // prevent any updates on previous workers. + worker.lock(); + } catch(e) { + this._worker = new GenericWorker("error"); + this._worker.error(e); + } +} + +StreamHelper.prototype = { + /** + * Listen a StreamHelper, accumulate its content and concatenate it into a + * complete block. + * @param {Function} updateCb the update callback. + * @return Promise the promise for the accumulation. + */ + accumulate : function (updateCb) { + return accumulate(this, updateCb); + }, + /** + * Add a listener on an event triggered on a stream. + * @param {String} evt the name of the event + * @param {Function} fn the listener + * @return {StreamHelper} the current helper. + */ + on : function (evt, fn) { + var self = this; + + if(evt === "data") { + this._worker.on(evt, function (chunk) { + fn.call(self, chunk.data, chunk.meta); + }); + } else { + this._worker.on(evt, function () { + utils.delay(fn, arguments, self); + }); + } + return this; + }, + /** + * Resume the flow of chunks. + * @return {StreamHelper} the current helper. + */ + resume : function () { + utils.delay(this._worker.resume, [], this._worker); + return this; + }, + /** + * Pause the flow of chunks. + * @return {StreamHelper} the current helper. + */ + pause : function () { + this._worker.pause(); + return this; + }, + /** + * Return a nodejs stream for this helper. + * @param {Function} updateCb the update callback. + * @return {NodejsStreamOutputAdapter} the nodejs stream. + */ + toNodejsStream : function (updateCb) { + utils.checkSupport("nodestream"); + if (this._outputType !== "nodebuffer") { + // an object stream containing blob/arraybuffer/uint8array/string + // is strange and I don't know if it would be useful. + // I you find this comment and have a good usecase, please open a + // bug report ! + throw new Error(this._outputType + " is not supported by this method"); + } + + return new NodejsStreamOutputAdapter(this, { + objectMode : this._outputType !== "nodebuffer" + }, updateCb); + } +}; + + +module.exports = StreamHelper; + +},{"../base64":1,"../external":6,"../nodejs/NodejsStreamOutputAdapter":13,"../support":30,"../utils":32,"./ConvertWorker":24,"./GenericWorker":28}],30:[function(require,module,exports){ +'use strict'; + +exports.base64 = true; +exports.array = true; +exports.string = true; +exports.arraybuffer = typeof ArrayBuffer !== "undefined" && typeof Uint8Array !== "undefined"; +exports.nodebuffer = typeof Buffer !== "undefined"; +// contains true if JSZip can read/generate Uint8Array, false otherwise. +exports.uint8array = typeof Uint8Array !== "undefined"; + +if (typeof ArrayBuffer === "undefined") { + exports.blob = false; +} +else { + var buffer = new ArrayBuffer(0); + try { + exports.blob = new Blob([buffer], { + type: "application/zip" + }).size === 0; + } + catch (e) { + try { + var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder; + var builder = new Builder(); + builder.append(buffer); + exports.blob = builder.getBlob('application/zip').size === 0; + } + catch (e) { + exports.blob = false; + } + } +} + +try { + exports.nodestream = !!require('readable-stream').Readable; +} catch(e) { + exports.nodestream = false; +} + +},{"readable-stream":16}],31:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); +var support = require('./support'); +var nodejsUtils = require('./nodejsUtils'); +var GenericWorker = require('./stream/GenericWorker'); + +/** + * The following functions come from pako, from pako/lib/utils/strings + * released under the MIT license, see pako https://github.com/nodeca/pako/ + */ + +// Table with utf8 lengths (calculated by first byte of sequence) +// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS, +// because max possible codepoint is 0x10ffff +var _utf8len = new Array(256); +for (var i=0; i<256; i++) { + _utf8len[i] = (i >= 252 ? 6 : i >= 248 ? 5 : i >= 240 ? 4 : i >= 224 ? 3 : i >= 192 ? 2 : 1); +} +_utf8len[254]=_utf8len[254]=1; // Invalid sequence start + +// convert string to array (typed, when possible) +var string2buf = function (str) { + var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0; + + // count binary size + for (m_pos = 0; m_pos < str_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) { + c2 = str.charCodeAt(m_pos+1); + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); + m_pos++; + } + } + buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4; + } + + // allocate buffer + if (support.uint8array) { + buf = new Uint8Array(buf_len); + } else { + buf = new Array(buf_len); + } + + // convert + for (i=0, m_pos = 0; i < buf_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) { + c2 = str.charCodeAt(m_pos+1); + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); + m_pos++; + } + } + if (c < 0x80) { + /* one byte */ + buf[i++] = c; + } else if (c < 0x800) { + /* two bytes */ + buf[i++] = 0xC0 | (c >>> 6); + buf[i++] = 0x80 | (c & 0x3f); + } else if (c < 0x10000) { + /* three bytes */ + buf[i++] = 0xE0 | (c >>> 12); + buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | (c & 0x3f); + } else { + /* four bytes */ + buf[i++] = 0xf0 | (c >>> 18); + buf[i++] = 0x80 | (c >>> 12 & 0x3f); + buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | (c & 0x3f); + } + } + + return buf; +}; + +// Calculate max possible position in utf8 buffer, +// that will not break sequence. If that's not possible +// - (very small limits) return max size as is. +// +// buf[] - utf8 bytes array +// max - length limit (mandatory); +var utf8border = function(buf, max) { + var pos; + + max = max || buf.length; + if (max > buf.length) { max = buf.length; } + + // go back from last position, until start of sequence found + pos = max-1; + while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; } + + // Fuckup - very small and broken sequence, + // return max, because we should return something anyway. + if (pos < 0) { return max; } + + // If we came to start of buffer - that means vuffer is too small, + // return max too. + if (pos === 0) { return max; } + + return (pos + _utf8len[buf[pos]] > max) ? pos : max; +}; + +// convert array to string +var buf2string = function (buf) { + var str, i, out, c, c_len; + var len = buf.length; + + // Reserve max possible length (2 words per char) + // NB: by unknown reasons, Array is significantly faster for + // String.fromCharCode.apply than Uint16Array. + var utf16buf = new Array(len*2); + + for (out=0, i=0; i 4) { utf16buf[out++] = 0xfffd; i += c_len-1; continue; } + + // apply mask on first byte + c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07; + // join the rest + while (c_len > 1 && i < len) { + c = (c << 6) | (buf[i++] & 0x3f); + c_len--; + } + + // terminated by end of string? + if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; } + + if (c < 0x10000) { + utf16buf[out++] = c; + } else { + c -= 0x10000; + utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff); + utf16buf[out++] = 0xdc00 | (c & 0x3ff); + } + } + + // shrinkBuf(utf16buf, out) + if (utf16buf.length !== out) { + if(utf16buf.subarray) { + utf16buf = utf16buf.subarray(0, out); + } else { + utf16buf.length = out; + } + } + + // return String.fromCharCode.apply(null, utf16buf); + return utils.applyFromCharCode(utf16buf); +}; + + +// That's all for the pako functions. + + +/** + * Transform a javascript string into an array (typed if possible) of bytes, + * UTF-8 encoded. + * @param {String} str the string to encode + * @return {Array|Uint8Array|Buffer} the UTF-8 encoded string. + */ +exports.utf8encode = function utf8encode(str) { + if (support.nodebuffer) { + return nodejsUtils.newBufferFrom(str, "utf-8"); + } + + return string2buf(str); +}; + + +/** + * Transform a bytes array (or a representation) representing an UTF-8 encoded + * string into a javascript string. + * @param {Array|Uint8Array|Buffer} buf the data de decode + * @return {String} the decoded string. + */ +exports.utf8decode = function utf8decode(buf) { + if (support.nodebuffer) { + return utils.transformTo("nodebuffer", buf).toString("utf-8"); + } + + buf = utils.transformTo(support.uint8array ? "uint8array" : "array", buf); + + return buf2string(buf); +}; + +/** + * A worker to decode utf8 encoded binary chunks into string chunks. + * @constructor + */ +function Utf8DecodeWorker() { + GenericWorker.call(this, "utf-8 decode"); + // the last bytes if a chunk didn't end with a complete codepoint. + this.leftOver = null; +} +utils.inherits(Utf8DecodeWorker, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +Utf8DecodeWorker.prototype.processChunk = function (chunk) { + + var data = utils.transformTo(support.uint8array ? "uint8array" : "array", chunk.data); + + // 1st step, re-use what's left of the previous chunk + if (this.leftOver && this.leftOver.length) { + if(support.uint8array) { + var previousData = data; + data = new Uint8Array(previousData.length + this.leftOver.length); + data.set(this.leftOver, 0); + data.set(previousData, this.leftOver.length); + } else { + data = this.leftOver.concat(data); + } + this.leftOver = null; + } + + var nextBoundary = utf8border(data); + var usableData = data; + if (nextBoundary !== data.length) { + if (support.uint8array) { + usableData = data.subarray(0, nextBoundary); + this.leftOver = data.subarray(nextBoundary, data.length); + } else { + usableData = data.slice(0, nextBoundary); + this.leftOver = data.slice(nextBoundary, data.length); + } + } + + this.push({ + data : exports.utf8decode(usableData), + meta : chunk.meta + }); +}; + +/** + * @see GenericWorker.flush + */ +Utf8DecodeWorker.prototype.flush = function () { + if(this.leftOver && this.leftOver.length) { + this.push({ + data : exports.utf8decode(this.leftOver), + meta : {} + }); + this.leftOver = null; + } +}; +exports.Utf8DecodeWorker = Utf8DecodeWorker; + +/** + * A worker to endcode string chunks into utf8 encoded binary chunks. + * @constructor + */ +function Utf8EncodeWorker() { + GenericWorker.call(this, "utf-8 encode"); +} +utils.inherits(Utf8EncodeWorker, GenericWorker); + +/** + * @see GenericWorker.processChunk + */ +Utf8EncodeWorker.prototype.processChunk = function (chunk) { + this.push({ + data : exports.utf8encode(chunk.data), + meta : chunk.meta + }); +}; +exports.Utf8EncodeWorker = Utf8EncodeWorker; + +},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(require,module,exports){ +'use strict'; + +var support = require('./support'); +var base64 = require('./base64'); +var nodejsUtils = require('./nodejsUtils'); +var setImmediate = require('core-js/library/fn/set-immediate'); +var external = require("./external"); + + +/** + * Convert a string that pass as a "binary string": it should represent a byte + * array but may have > 255 char codes. Be sure to take only the first byte + * and returns the byte array. + * @param {String} str the string to transform. + * @return {Array|Uint8Array} the string in a binary format. + */ +function string2binary(str) { + var result = null; + if (support.uint8array) { + result = new Uint8Array(str.length); + } else { + result = new Array(str.length); + } + return stringToArrayLike(str, result); +} + +/** + * Create a new blob with the given content and the given type. + * @param {String|ArrayBuffer} part the content to put in the blob. DO NOT use + * an Uint8Array because the stock browser of android 4 won't accept it (it + * will be silently converted to a string, "[object Uint8Array]"). + * + * Use only ONE part to build the blob to avoid a memory leak in IE11 / Edge: + * when a large amount of Array is used to create the Blob, the amount of + * memory consumed is nearly 100 times the original data amount. + * + * @param {String} type the mime type of the blob. + * @return {Blob} the created blob. + */ +exports.newBlob = function(part, type) { + exports.checkSupport("blob"); + + try { + // Blob constructor + return new Blob([part], { + type: type + }); + } + catch (e) { + + try { + // deprecated, browser only, old way + var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder; + var builder = new Builder(); + builder.append(part); + return builder.getBlob(type); + } + catch (e) { + + // well, fuck ?! + throw new Error("Bug : can't construct the Blob."); + } + } + + +}; +/** + * The identity function. + * @param {Object} input the input. + * @return {Object} the same input. + */ +function identity(input) { + return input; +} + +/** + * Fill in an array with a string. + * @param {String} str the string to use. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to fill in (will be mutated). + * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated array. + */ +function stringToArrayLike(str, array) { + for (var i = 0; i < str.length; ++i) { + array[i] = str.charCodeAt(i) & 0xFF; + } + return array; +} + +/** + * An helper for the function arrayLikeToString. + * This contains static informations and functions that + * can be optimized by the browser JIT compiler. + */ +var arrayToStringHelper = { + /** + * Transform an array of int into a string, chunk by chunk. + * See the performances notes on arrayLikeToString. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform. + * @param {String} type the type of the array. + * @param {Integer} chunk the chunk size. + * @return {String} the resulting string. + * @throws Error if the chunk is too big for the stack. + */ + stringifyByChunk: function(array, type, chunk) { + var result = [], k = 0, len = array.length; + // shortcut + if (len <= chunk) { + return String.fromCharCode.apply(null, array); + } + while (k < len) { + if (type === "array" || type === "nodebuffer") { + result.push(String.fromCharCode.apply(null, array.slice(k, Math.min(k + chunk, len)))); + } + else { + result.push(String.fromCharCode.apply(null, array.subarray(k, Math.min(k + chunk, len)))); + } + k += chunk; + } + return result.join(""); + }, + /** + * Call String.fromCharCode on every item in the array. + * This is the naive implementation, which generate A LOT of intermediate string. + * This should be used when everything else fail. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform. + * @return {String} the result. + */ + stringifyByChar: function(array){ + var resultStr = ""; + for(var i = 0; i < array.length; i++) { + resultStr += String.fromCharCode(array[i]); + } + return resultStr; + }, + applyCanBeUsed : { + /** + * true if the browser accepts to use String.fromCharCode on Uint8Array + */ + uint8array : (function () { + try { + return support.uint8array && String.fromCharCode.apply(null, new Uint8Array(1)).length === 1; + } catch (e) { + return false; + } + })(), + /** + * true if the browser accepts to use String.fromCharCode on nodejs Buffer. + */ + nodebuffer : (function () { + try { + return support.nodebuffer && String.fromCharCode.apply(null, nodejsUtils.allocBuffer(1)).length === 1; + } catch (e) { + return false; + } + })() + } +}; + +/** + * Transform an array-like object to a string. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform. + * @return {String} the result. + */ +function arrayLikeToString(array) { + // Performances notes : + // -------------------- + // String.fromCharCode.apply(null, array) is the fastest, see + // see http://jsperf.com/converting-a-uint8array-to-a-string/2 + // but the stack is limited (and we can get huge arrays !). + // + // result += String.fromCharCode(array[i]); generate too many strings ! + // + // This code is inspired by http://jsperf.com/arraybuffer-to-string-apply-performance/2 + // TODO : we now have workers that split the work. Do we still need that ? + var chunk = 65536, + type = exports.getTypeOf(array), + canUseApply = true; + if (type === "uint8array") { + canUseApply = arrayToStringHelper.applyCanBeUsed.uint8array; + } else if (type === "nodebuffer") { + canUseApply = arrayToStringHelper.applyCanBeUsed.nodebuffer; + } + + if (canUseApply) { + while (chunk > 1) { + try { + return arrayToStringHelper.stringifyByChunk(array, type, chunk); + } catch (e) { + chunk = Math.floor(chunk / 2); + } + } + } + + // no apply or chunk error : slow and painful algorithm + // default browser on android 4.* + return arrayToStringHelper.stringifyByChar(array); +} + +exports.applyFromCharCode = arrayLikeToString; + + +/** + * Copy the data from an array-like to an other array-like. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayFrom the origin array. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayTo the destination array which will be mutated. + * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated destination array. + */ +function arrayLikeToArrayLike(arrayFrom, arrayTo) { + for (var i = 0; i < arrayFrom.length; i++) { + arrayTo[i] = arrayFrom[i]; + } + return arrayTo; +} + +// a matrix containing functions to transform everything into everything. +var transform = {}; + +// string to ? +transform["string"] = { + "string": identity, + "array": function(input) { + return stringToArrayLike(input, new Array(input.length)); + }, + "arraybuffer": function(input) { + return transform["string"]["uint8array"](input).buffer; + }, + "uint8array": function(input) { + return stringToArrayLike(input, new Uint8Array(input.length)); + }, + "nodebuffer": function(input) { + return stringToArrayLike(input, nodejsUtils.allocBuffer(input.length)); + } +}; + +// array to ? +transform["array"] = { + "string": arrayLikeToString, + "array": identity, + "arraybuffer": function(input) { + return (new Uint8Array(input)).buffer; + }, + "uint8array": function(input) { + return new Uint8Array(input); + }, + "nodebuffer": function(input) { + return nodejsUtils.newBufferFrom(input); + } +}; + +// arraybuffer to ? +transform["arraybuffer"] = { + "string": function(input) { + return arrayLikeToString(new Uint8Array(input)); + }, + "array": function(input) { + return arrayLikeToArrayLike(new Uint8Array(input), new Array(input.byteLength)); + }, + "arraybuffer": identity, + "uint8array": function(input) { + return new Uint8Array(input); + }, + "nodebuffer": function(input) { + return nodejsUtils.newBufferFrom(new Uint8Array(input)); + } +}; + +// uint8array to ? +transform["uint8array"] = { + "string": arrayLikeToString, + "array": function(input) { + return arrayLikeToArrayLike(input, new Array(input.length)); + }, + "arraybuffer": function(input) { + return input.buffer; + }, + "uint8array": identity, + "nodebuffer": function(input) { + return nodejsUtils.newBufferFrom(input); + } +}; + +// nodebuffer to ? +transform["nodebuffer"] = { + "string": arrayLikeToString, + "array": function(input) { + return arrayLikeToArrayLike(input, new Array(input.length)); + }, + "arraybuffer": function(input) { + return transform["nodebuffer"]["uint8array"](input).buffer; + }, + "uint8array": function(input) { + return arrayLikeToArrayLike(input, new Uint8Array(input.length)); + }, + "nodebuffer": identity +}; + +/** + * Transform an input into any type. + * The supported output type are : string, array, uint8array, arraybuffer, nodebuffer. + * If no output type is specified, the unmodified input will be returned. + * @param {String} outputType the output type. + * @param {String|Array|ArrayBuffer|Uint8Array|Buffer} input the input to convert. + * @throws {Error} an Error if the browser doesn't support the requested output type. + */ +exports.transformTo = function(outputType, input) { + if (!input) { + // undefined, null, etc + // an empty string won't harm. + input = ""; + } + if (!outputType) { + return input; + } + exports.checkSupport(outputType); + var inputType = exports.getTypeOf(input); + var result = transform[inputType][outputType](input); + return result; +}; + +/** + * Return the type of the input. + * The type will be in a format valid for JSZip.utils.transformTo : string, array, uint8array, arraybuffer. + * @param {Object} input the input to identify. + * @return {String} the (lowercase) type of the input. + */ +exports.getTypeOf = function(input) { + if (typeof input === "string") { + return "string"; + } + if (Object.prototype.toString.call(input) === "[object Array]") { + return "array"; + } + if (support.nodebuffer && nodejsUtils.isBuffer(input)) { + return "nodebuffer"; + } + if (support.uint8array && input instanceof Uint8Array) { + return "uint8array"; + } + if (support.arraybuffer && input instanceof ArrayBuffer) { + return "arraybuffer"; + } +}; + +/** + * Throw an exception if the type is not supported. + * @param {String} type the type to check. + * @throws {Error} an Error if the browser doesn't support the requested type. + */ +exports.checkSupport = function(type) { + var supported = support[type.toLowerCase()]; + if (!supported) { + throw new Error(type + " is not supported by this platform"); + } +}; + +exports.MAX_VALUE_16BITS = 65535; +exports.MAX_VALUE_32BITS = -1; // well, "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" is parsed as -1 + +/** + * Prettify a string read as binary. + * @param {string} str the string to prettify. + * @return {string} a pretty string. + */ +exports.pretty = function(str) { + var res = '', + code, i; + for (i = 0; i < (str || "").length; i++) { + code = str.charCodeAt(i); + res += '\\x' + (code < 16 ? "0" : "") + code.toString(16).toUpperCase(); + } + return res; +}; + +/** + * Defer the call of a function. + * @param {Function} callback the function to call asynchronously. + * @param {Array} args the arguments to give to the callback. + */ +exports.delay = function(callback, args, self) { + setImmediate(function () { + callback.apply(self || null, args || []); + }); +}; + +/** + * Extends a prototype with an other, without calling a constructor with + * side effects. Inspired by nodejs' `utils.inherits` + * @param {Function} ctor the constructor to augment + * @param {Function} superCtor the parent constructor to use + */ +exports.inherits = function (ctor, superCtor) { + var Obj = function() {}; + Obj.prototype = superCtor.prototype; + ctor.prototype = new Obj(); +}; + +/** + * Merge the objects passed as parameters into a new one. + * @private + * @param {...Object} var_args All objects to merge. + * @return {Object} a new object with the data of the others. + */ +exports.extend = function() { + var result = {}, i, attr; + for (i = 0; i < arguments.length; i++) { // arguments is not enumerable in some browsers + for (attr in arguments[i]) { + if (arguments[i].hasOwnProperty(attr) && typeof result[attr] === "undefined") { + result[attr] = arguments[i][attr]; + } + } + } + return result; +}; + +/** + * Transform arbitrary content into a Promise. + * @param {String} name a name for the content being processed. + * @param {Object} inputData the content to process. + * @param {Boolean} isBinary true if the content is not an unicode string + * @param {Boolean} isOptimizedBinaryString true if the string content only has one byte per character. + * @param {Boolean} isBase64 true if the string content is encoded with base64. + * @return {Promise} a promise in a format usable by JSZip. + */ +exports.prepareContent = function(name, inputData, isBinary, isOptimizedBinaryString, isBase64) { + + // if inputData is already a promise, this flatten it. + var promise = external.Promise.resolve(inputData).then(function(data) { + + + var isBlob = support.blob && (data instanceof Blob || ['[object File]', '[object Blob]'].indexOf(Object.prototype.toString.call(data)) !== -1); + + if (isBlob && typeof FileReader !== "undefined") { + return new external.Promise(function (resolve, reject) { + var reader = new FileReader(); + + reader.onload = function(e) { + resolve(e.target.result); + }; + reader.onerror = function(e) { + reject(e.target.error); + }; + reader.readAsArrayBuffer(data); + }); + } else { + return data; + } + }); + + return promise.then(function(data) { + var dataType = exports.getTypeOf(data); + + if (!dataType) { + return external.Promise.reject( + new Error("Can't read the data of '" + name + "'. Is it " + + "in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?") + ); + } + // special case : it's way easier to work with Uint8Array than with ArrayBuffer + if (dataType === "arraybuffer") { + data = exports.transformTo("uint8array", data); + } else if (dataType === "string") { + if (isBase64) { + data = base64.decode(data); + } + else if (isBinary) { + // optimizedBinaryString === true means that the file has already been filtered with a 0xFF mask + if (isOptimizedBinaryString !== true) { + // this is a string, not in a base64 format. + // Be sure that this is a correct "binary string" + data = string2binary(data); + } + } + } + return data; + }); +}; + +},{"./base64":1,"./external":6,"./nodejsUtils":14,"./support":30,"core-js/library/fn/set-immediate":36}],33:[function(require,module,exports){ +'use strict'; +var readerFor = require('./reader/readerFor'); +var utils = require('./utils'); +var sig = require('./signature'); +var ZipEntry = require('./zipEntry'); +var utf8 = require('./utf8'); +var support = require('./support'); +// class ZipEntries {{{ +/** + * All the entries in the zip file. + * @constructor + * @param {Object} loadOptions Options for loading the stream. + */ +function ZipEntries(loadOptions) { + this.files = []; + this.loadOptions = loadOptions; +} +ZipEntries.prototype = { + /** + * Check that the reader is on the specified signature. + * @param {string} expectedSignature the expected signature. + * @throws {Error} if it is an other signature. + */ + checkSignature: function(expectedSignature) { + if (!this.reader.readAndCheckSignature(expectedSignature)) { + this.reader.index -= 4; + var signature = this.reader.readString(4); + throw new Error("Corrupted zip or bug: unexpected signature " + "(" + utils.pretty(signature) + ", expected " + utils.pretty(expectedSignature) + ")"); + } + }, + /** + * Check if the given signature is at the given index. + * @param {number} askedIndex the index to check. + * @param {string} expectedSignature the signature to expect. + * @return {boolean} true if the signature is here, false otherwise. + */ + isSignature: function(askedIndex, expectedSignature) { + var currentIndex = this.reader.index; + this.reader.setIndex(askedIndex); + var signature = this.reader.readString(4); + var result = signature === expectedSignature; + this.reader.setIndex(currentIndex); + return result; + }, + /** + * Read the end of the central directory. + */ + readBlockEndOfCentral: function() { + this.diskNumber = this.reader.readInt(2); + this.diskWithCentralDirStart = this.reader.readInt(2); + this.centralDirRecordsOnThisDisk = this.reader.readInt(2); + this.centralDirRecords = this.reader.readInt(2); + this.centralDirSize = this.reader.readInt(4); + this.centralDirOffset = this.reader.readInt(4); + + this.zipCommentLength = this.reader.readInt(2); + // warning : the encoding depends of the system locale + // On a linux machine with LANG=en_US.utf8, this field is utf8 encoded. + // On a windows machine, this field is encoded with the localized windows code page. + var zipComment = this.reader.readData(this.zipCommentLength); + var decodeParamType = support.uint8array ? "uint8array" : "array"; + // To get consistent behavior with the generation part, we will assume that + // this is utf8 encoded unless specified otherwise. + var decodeContent = utils.transformTo(decodeParamType, zipComment); + this.zipComment = this.loadOptions.decodeFileName(decodeContent); + }, + /** + * Read the end of the Zip 64 central directory. + * Not merged with the method readEndOfCentral : + * The end of central can coexist with its Zip64 brother, + * I don't want to read the wrong number of bytes ! + */ + readBlockZip64EndOfCentral: function() { + this.zip64EndOfCentralSize = this.reader.readInt(8); + this.reader.skip(4); + // this.versionMadeBy = this.reader.readString(2); + // this.versionNeeded = this.reader.readInt(2); + this.diskNumber = this.reader.readInt(4); + this.diskWithCentralDirStart = this.reader.readInt(4); + this.centralDirRecordsOnThisDisk = this.reader.readInt(8); + this.centralDirRecords = this.reader.readInt(8); + this.centralDirSize = this.reader.readInt(8); + this.centralDirOffset = this.reader.readInt(8); + + this.zip64ExtensibleData = {}; + var extraDataSize = this.zip64EndOfCentralSize - 44, + index = 0, + extraFieldId, + extraFieldLength, + extraFieldValue; + while (index < extraDataSize) { + extraFieldId = this.reader.readInt(2); + extraFieldLength = this.reader.readInt(4); + extraFieldValue = this.reader.readData(extraFieldLength); + this.zip64ExtensibleData[extraFieldId] = { + id: extraFieldId, + length: extraFieldLength, + value: extraFieldValue + }; + } + }, + /** + * Read the end of the Zip 64 central directory locator. + */ + readBlockZip64EndOfCentralLocator: function() { + this.diskWithZip64CentralDirStart = this.reader.readInt(4); + this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8); + this.disksCount = this.reader.readInt(4); + if (this.disksCount > 1) { + throw new Error("Multi-volumes zip are not supported"); + } + }, + /** + * Read the local files, based on the offset read in the central part. + */ + readLocalFiles: function() { + var i, file; + for (i = 0; i < this.files.length; i++) { + file = this.files[i]; + this.reader.setIndex(file.localHeaderOffset); + this.checkSignature(sig.LOCAL_FILE_HEADER); + file.readLocalPart(this.reader); + file.handleUTF8(); + file.processAttributes(); + } + }, + /** + * Read the central directory. + */ + readCentralDir: function() { + var file; + + this.reader.setIndex(this.centralDirOffset); + while (this.reader.readAndCheckSignature(sig.CENTRAL_FILE_HEADER)) { + file = new ZipEntry({ + zip64: this.zip64 + }, this.loadOptions); + file.readCentralPart(this.reader); + this.files.push(file); + } + + if (this.centralDirRecords !== this.files.length) { + if (this.centralDirRecords !== 0 && this.files.length === 0) { + // We expected some records but couldn't find ANY. + // This is really suspicious, as if something went wrong. + throw new Error("Corrupted zip or bug: expected " + this.centralDirRecords + " records in central dir, got " + this.files.length); + } else { + // We found some records but not all. + // Something is wrong but we got something for the user: no error here. + // console.warn("expected", this.centralDirRecords, "records in central dir, got", this.files.length); + } + } + }, + /** + * Read the end of central directory. + */ + readEndOfCentral: function() { + var offset = this.reader.lastIndexOfSignature(sig.CENTRAL_DIRECTORY_END); + if (offset < 0) { + // Check if the content is a truncated zip or complete garbage. + // A "LOCAL_FILE_HEADER" is not required at the beginning (auto + // extractible zip for example) but it can give a good hint. + // If an ajax request was used without responseType, we will also + // get unreadable data. + var isGarbage = !this.isSignature(0, sig.LOCAL_FILE_HEADER); + + if (isGarbage) { + throw new Error("Can't find end of central directory : is this a zip file ? " + + "If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html"); + } else { + throw new Error("Corrupted zip: can't find end of central directory"); + } + + } + this.reader.setIndex(offset); + var endOfCentralDirOffset = offset; + this.checkSignature(sig.CENTRAL_DIRECTORY_END); + this.readBlockEndOfCentral(); + + + /* extract from the zip spec : + 4) If one of the fields in the end of central directory + record is too small to hold required data, the field + should be set to -1 (0xFFFF or 0xFFFFFFFF) and the + ZIP64 format record should be created. + 5) The end of central directory record and the + Zip64 end of central directory locator record must + reside on the same disk when splitting or spanning + an archive. + */ + if (this.diskNumber === utils.MAX_VALUE_16BITS || this.diskWithCentralDirStart === utils.MAX_VALUE_16BITS || this.centralDirRecordsOnThisDisk === utils.MAX_VALUE_16BITS || this.centralDirRecords === utils.MAX_VALUE_16BITS || this.centralDirSize === utils.MAX_VALUE_32BITS || this.centralDirOffset === utils.MAX_VALUE_32BITS) { + this.zip64 = true; + + /* + Warning : the zip64 extension is supported, but ONLY if the 64bits integer read from + the zip file can fit into a 32bits integer. This cannot be solved : JavaScript represents + all numbers as 64-bit double precision IEEE 754 floating point numbers. + So, we have 53bits for integers and bitwise operations treat everything as 32bits. + see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators + and http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf section 8.5 + */ + + // should look for a zip64 EOCD locator + offset = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR); + if (offset < 0) { + throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator"); + } + this.reader.setIndex(offset); + this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR); + this.readBlockZip64EndOfCentralLocator(); + + // now the zip64 EOCD record + if (!this.isSignature(this.relativeOffsetEndOfZip64CentralDir, sig.ZIP64_CENTRAL_DIRECTORY_END)) { + // console.warn("ZIP64 end of central directory not where expected."); + this.relativeOffsetEndOfZip64CentralDir = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_END); + if (this.relativeOffsetEndOfZip64CentralDir < 0) { + throw new Error("Corrupted zip: can't find the ZIP64 end of central directory"); + } + } + this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir); + this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_END); + this.readBlockZip64EndOfCentral(); + } + + var expectedEndOfCentralDirOffset = this.centralDirOffset + this.centralDirSize; + if (this.zip64) { + expectedEndOfCentralDirOffset += 20; // end of central dir 64 locator + expectedEndOfCentralDirOffset += 12 /* should not include the leading 12 bytes */ + this.zip64EndOfCentralSize; + } + + var extraBytes = endOfCentralDirOffset - expectedEndOfCentralDirOffset; + + if (extraBytes > 0) { + // console.warn(extraBytes, "extra bytes at beginning or within zipfile"); + if (this.isSignature(endOfCentralDirOffset, sig.CENTRAL_FILE_HEADER)) { + // The offsets seem wrong, but we have something at the specified offset. + // So… we keep it. + } else { + // the offset is wrong, update the "zero" of the reader + // this happens if data has been prepended (crx files for example) + this.reader.zero = extraBytes; + } + } else if (extraBytes < 0) { + throw new Error("Corrupted zip: missing " + Math.abs(extraBytes) + " bytes."); + } + }, + prepareReader: function(data) { + this.reader = readerFor(data); + }, + /** + * Read a zip file and create ZipEntries. + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the binary string representing a zip file. + */ + load: function(data) { + this.prepareReader(data); + this.readEndOfCentral(); + this.readCentralDir(); + this.readLocalFiles(); + } +}; +// }}} end of ZipEntries +module.exports = ZipEntries; + +},{"./reader/readerFor":22,"./signature":23,"./support":30,"./utf8":31,"./utils":32,"./zipEntry":34}],34:[function(require,module,exports){ +'use strict'; +var readerFor = require('./reader/readerFor'); +var utils = require('./utils'); +var CompressedObject = require('./compressedObject'); +var crc32fn = require('./crc32'); +var utf8 = require('./utf8'); +var compressions = require('./compressions'); +var support = require('./support'); + +var MADE_BY_DOS = 0x00; +var MADE_BY_UNIX = 0x03; + +/** + * Find a compression registered in JSZip. + * @param {string} compressionMethod the method magic to find. + * @return {Object|null} the JSZip compression object, null if none found. + */ +var findCompression = function(compressionMethod) { + for (var method in compressions) { + if (!compressions.hasOwnProperty(method)) { + continue; + } + if (compressions[method].magic === compressionMethod) { + return compressions[method]; + } + } + return null; +}; + +// class ZipEntry {{{ +/** + * An entry in the zip file. + * @constructor + * @param {Object} options Options of the current file. + * @param {Object} loadOptions Options for loading the stream. + */ +function ZipEntry(options, loadOptions) { + this.options = options; + this.loadOptions = loadOptions; +} +ZipEntry.prototype = { + /** + * say if the file is encrypted. + * @return {boolean} true if the file is encrypted, false otherwise. + */ + isEncrypted: function() { + // bit 1 is set + return (this.bitFlag & 0x0001) === 0x0001; + }, + /** + * say if the file has utf-8 filename/comment. + * @return {boolean} true if the filename/comment is in utf-8, false otherwise. + */ + useUTF8: function() { + // bit 11 is set + return (this.bitFlag & 0x0800) === 0x0800; + }, + /** + * Read the local part of a zip file and add the info in this object. + * @param {DataReader} reader the reader to use. + */ + readLocalPart: function(reader) { + var compression, localExtraFieldsLength; + + // we already know everything from the central dir ! + // If the central dir data are false, we are doomed. + // On the bright side, the local part is scary : zip64, data descriptors, both, etc. + // The less data we get here, the more reliable this should be. + // Let's skip the whole header and dash to the data ! + reader.skip(22); + // in some zip created on windows, the filename stored in the central dir contains \ instead of /. + // Strangely, the filename here is OK. + // I would love to treat these zip files as corrupted (see http://www.info-zip.org/FAQ.html#backslashes + // or APPNOTE#4.4.17.1, "All slashes MUST be forward slashes '/'") but there are a lot of bad zip generators... + // Search "unzip mismatching "local" filename continuing with "central" filename version" on + // the internet. + // + // I think I see the logic here : the central directory is used to display + // content and the local directory is used to extract the files. Mixing / and \ + // may be used to display \ to windows users and use / when extracting the files. + // Unfortunately, this lead also to some issues : http://seclists.org/fulldisclosure/2009/Sep/394 + this.fileNameLength = reader.readInt(2); + localExtraFieldsLength = reader.readInt(2); // can't be sure this will be the same as the central dir + // the fileName is stored as binary data, the handleUTF8 method will take care of the encoding. + this.fileName = reader.readData(this.fileNameLength); + reader.skip(localExtraFieldsLength); + + if (this.compressedSize === -1 || this.uncompressedSize === -1) { + throw new Error("Bug or corrupted zip : didn't get enough informations from the central directory " + "(compressedSize === -1 || uncompressedSize === -1)"); + } + + compression = findCompression(this.compressionMethod); + if (compression === null) { // no compression found + throw new Error("Corrupted zip : compression " + utils.pretty(this.compressionMethod) + " unknown (inner file : " + utils.transformTo("string", this.fileName) + ")"); + } + this.decompressed = new CompressedObject(this.compressedSize, this.uncompressedSize, this.crc32, compression, reader.readData(this.compressedSize)); + }, + + /** + * Read the central part of a zip file and add the info in this object. + * @param {DataReader} reader the reader to use. + */ + readCentralPart: function(reader) { + this.versionMadeBy = reader.readInt(2); + reader.skip(2); + // this.versionNeeded = reader.readInt(2); + this.bitFlag = reader.readInt(2); + this.compressionMethod = reader.readString(2); + this.date = reader.readDate(); + this.crc32 = reader.readInt(4); + this.compressedSize = reader.readInt(4); + this.uncompressedSize = reader.readInt(4); + var fileNameLength = reader.readInt(2); + this.extraFieldsLength = reader.readInt(2); + this.fileCommentLength = reader.readInt(2); + this.diskNumberStart = reader.readInt(2); + this.internalFileAttributes = reader.readInt(2); + this.externalFileAttributes = reader.readInt(4); + this.localHeaderOffset = reader.readInt(4); + + if (this.isEncrypted()) { + throw new Error("Encrypted zip are not supported"); + } + + // will be read in the local part, see the comments there + reader.skip(fileNameLength); + this.readExtraFields(reader); + this.parseZIP64ExtraField(reader); + this.fileComment = reader.readData(this.fileCommentLength); + }, + + /** + * Parse the external file attributes and get the unix/dos permissions. + */ + processAttributes: function () { + this.unixPermissions = null; + this.dosPermissions = null; + var madeBy = this.versionMadeBy >> 8; + + // Check if we have the DOS directory flag set. + // We look for it in the DOS and UNIX permissions + // but some unknown platform could set it as a compatibility flag. + this.dir = this.externalFileAttributes & 0x0010 ? true : false; + + if(madeBy === MADE_BY_DOS) { + // first 6 bits (0 to 5) + this.dosPermissions = this.externalFileAttributes & 0x3F; + } + + if(madeBy === MADE_BY_UNIX) { + this.unixPermissions = (this.externalFileAttributes >> 16) & 0xFFFF; + // the octal permissions are in (this.unixPermissions & 0x01FF).toString(8); + } + + // fail safe : if the name ends with a / it probably means a folder + if (!this.dir && this.fileNameStr.slice(-1) === '/') { + this.dir = true; + } + }, + + /** + * Parse the ZIP64 extra field and merge the info in the current ZipEntry. + * @param {DataReader} reader the reader to use. + */ + parseZIP64ExtraField: function(reader) { + + if (!this.extraFields[0x0001]) { + return; + } + + // should be something, preparing the extra reader + var extraReader = readerFor(this.extraFields[0x0001].value); + + // I really hope that these 64bits integer can fit in 32 bits integer, because js + // won't let us have more. + if (this.uncompressedSize === utils.MAX_VALUE_32BITS) { + this.uncompressedSize = extraReader.readInt(8); + } + if (this.compressedSize === utils.MAX_VALUE_32BITS) { + this.compressedSize = extraReader.readInt(8); + } + if (this.localHeaderOffset === utils.MAX_VALUE_32BITS) { + this.localHeaderOffset = extraReader.readInt(8); + } + if (this.diskNumberStart === utils.MAX_VALUE_32BITS) { + this.diskNumberStart = extraReader.readInt(4); + } + }, + /** + * Read the central part of a zip file and add the info in this object. + * @param {DataReader} reader the reader to use. + */ + readExtraFields: function(reader) { + var end = reader.index + this.extraFieldsLength, + extraFieldId, + extraFieldLength, + extraFieldValue; + + if (!this.extraFields) { + this.extraFields = {}; + } + + while (reader.index < end) { + extraFieldId = reader.readInt(2); + extraFieldLength = reader.readInt(2); + extraFieldValue = reader.readData(extraFieldLength); + + this.extraFields[extraFieldId] = { + id: extraFieldId, + length: extraFieldLength, + value: extraFieldValue + }; + } + }, + /** + * Apply an UTF8 transformation if needed. + */ + handleUTF8: function() { + var decodeParamType = support.uint8array ? "uint8array" : "array"; + if (this.useUTF8()) { + this.fileNameStr = utf8.utf8decode(this.fileName); + this.fileCommentStr = utf8.utf8decode(this.fileComment); + } else { + var upath = this.findExtraFieldUnicodePath(); + if (upath !== null) { + this.fileNameStr = upath; + } else { + // ASCII text or unsupported code page + var fileNameByteArray = utils.transformTo(decodeParamType, this.fileName); + this.fileNameStr = this.loadOptions.decodeFileName(fileNameByteArray); + } + + var ucomment = this.findExtraFieldUnicodeComment(); + if (ucomment !== null) { + this.fileCommentStr = ucomment; + } else { + // ASCII text or unsupported code page + var commentByteArray = utils.transformTo(decodeParamType, this.fileComment); + this.fileCommentStr = this.loadOptions.decodeFileName(commentByteArray); + } + } + }, + + /** + * Find the unicode path declared in the extra field, if any. + * @return {String} the unicode path, null otherwise. + */ + findExtraFieldUnicodePath: function() { + var upathField = this.extraFields[0x7075]; + if (upathField) { + var extraReader = readerFor(upathField.value); + + // wrong version + if (extraReader.readInt(1) !== 1) { + return null; + } + + // the crc of the filename changed, this field is out of date. + if (crc32fn(this.fileName) !== extraReader.readInt(4)) { + return null; + } + + return utf8.utf8decode(extraReader.readData(upathField.length - 5)); + } + return null; + }, + + /** + * Find the unicode comment declared in the extra field, if any. + * @return {String} the unicode comment, null otherwise. + */ + findExtraFieldUnicodeComment: function() { + var ucommentField = this.extraFields[0x6375]; + if (ucommentField) { + var extraReader = readerFor(ucommentField.value); + + // wrong version + if (extraReader.readInt(1) !== 1) { + return null; + } + + // the crc of the comment changed, this field is out of date. + if (crc32fn(this.fileComment) !== extraReader.readInt(4)) { + return null; + } + + return utf8.utf8decode(extraReader.readData(ucommentField.length - 5)); + } + return null; + } +}; +module.exports = ZipEntry; + +},{"./compressedObject":2,"./compressions":3,"./crc32":4,"./reader/readerFor":22,"./support":30,"./utf8":31,"./utils":32}],35:[function(require,module,exports){ +'use strict'; + +var StreamHelper = require('./stream/StreamHelper'); +var DataWorker = require('./stream/DataWorker'); +var utf8 = require('./utf8'); +var CompressedObject = require('./compressedObject'); +var GenericWorker = require('./stream/GenericWorker'); + +/** + * A simple object representing a file in the zip file. + * @constructor + * @param {string} name the name of the file + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data + * @param {Object} options the options of the file + */ +var ZipObject = function(name, data, options) { + this.name = name; + this.dir = options.dir; + this.date = options.date; + this.comment = options.comment; + this.unixPermissions = options.unixPermissions; + this.dosPermissions = options.dosPermissions; + + this._data = data; + this._dataBinary = options.binary; + // keep only the compression + this.options = { + compression : options.compression, + compressionOptions : options.compressionOptions + }; +}; + +ZipObject.prototype = { + /** + * Create an internal stream for the content of this object. + * @param {String} type the type of each chunk. + * @return StreamHelper the stream. + */ + internalStream: function (type) { + var result = null, outputType = "string"; + try { + if (!type) { + throw new Error("No output type specified."); + } + outputType = type.toLowerCase(); + var askUnicodeString = outputType === "string" || outputType === "text"; + if (outputType === "binarystring" || outputType === "text") { + outputType = "string"; + } + result = this._decompressWorker(); + + var isUnicodeString = !this._dataBinary; + + if (isUnicodeString && !askUnicodeString) { + result = result.pipe(new utf8.Utf8EncodeWorker()); + } + if (!isUnicodeString && askUnicodeString) { + result = result.pipe(new utf8.Utf8DecodeWorker()); + } + } catch (e) { + result = new GenericWorker("error"); + result.error(e); + } + + return new StreamHelper(result, outputType, ""); + }, + + /** + * Prepare the content in the asked type. + * @param {String} type the type of the result. + * @param {Function} onUpdate a function to call on each internal update. + * @return Promise the promise of the result. + */ + async: function (type, onUpdate) { + return this.internalStream(type).accumulate(onUpdate); + }, + + /** + * Prepare the content as a nodejs stream. + * @param {String} type the type of each chunk. + * @param {Function} onUpdate a function to call on each internal update. + * @return Stream the stream. + */ + nodeStream: function (type, onUpdate) { + return this.internalStream(type || "nodebuffer").toNodejsStream(onUpdate); + }, + + /** + * Return a worker for the compressed content. + * @private + * @param {Object} compression the compression object to use. + * @param {Object} compressionOptions the options to use when compressing. + * @return Worker the worker. + */ + _compressWorker: function (compression, compressionOptions) { + if ( + this._data instanceof CompressedObject && + this._data.compression.magic === compression.magic + ) { + return this._data.getCompressedWorker(); + } else { + var result = this._decompressWorker(); + if(!this._dataBinary) { + result = result.pipe(new utf8.Utf8EncodeWorker()); + } + return CompressedObject.createWorkerFrom(result, compression, compressionOptions); + } + }, + /** + * Return a worker for the decompressed content. + * @private + * @return Worker the worker. + */ + _decompressWorker : function () { + if (this._data instanceof CompressedObject) { + return this._data.getContentWorker(); + } else if (this._data instanceof GenericWorker) { + return this._data; + } else { + return new DataWorker(this._data); + } + } +}; + +var removedMethods = ["asText", "asBinary", "asNodeBuffer", "asUint8Array", "asArrayBuffer"]; +var removedFn = function () { + throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide."); +}; + +for(var i = 0; i < removedMethods.length; i++) { + ZipObject.prototype[removedMethods[i]] = removedFn; +} +module.exports = ZipObject; + +},{"./compressedObject":2,"./stream/DataWorker":27,"./stream/GenericWorker":28,"./stream/StreamHelper":29,"./utf8":31}],36:[function(require,module,exports){ +require('../modules/web.immediate'); +module.exports = require('../modules/_core').setImmediate; +},{"../modules/_core":40,"../modules/web.immediate":56}],37:[function(require,module,exports){ +module.exports = function(it){ + if(typeof it != 'function')throw TypeError(it + ' is not a function!'); + return it; +}; +},{}],38:[function(require,module,exports){ +var isObject = require('./_is-object'); +module.exports = function(it){ + if(!isObject(it))throw TypeError(it + ' is not an object!'); + return it; +}; +},{"./_is-object":51}],39:[function(require,module,exports){ +var toString = {}.toString; + +module.exports = function(it){ + return toString.call(it).slice(8, -1); +}; +},{}],40:[function(require,module,exports){ +var core = module.exports = {version: '2.3.0'}; +if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef +},{}],41:[function(require,module,exports){ +// optional / simple context binding +var aFunction = require('./_a-function'); +module.exports = function(fn, that, length){ + aFunction(fn); + if(that === undefined)return fn; + switch(length){ + case 1: return function(a){ + return fn.call(that, a); + }; + case 2: return function(a, b){ + return fn.call(that, a, b); + }; + case 3: return function(a, b, c){ + return fn.call(that, a, b, c); + }; + } + return function(/* ...args */){ + return fn.apply(that, arguments); + }; +}; +},{"./_a-function":37}],42:[function(require,module,exports){ +// Thank's IE8 for his funny defineProperty +module.exports = !require('./_fails')(function(){ + return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7; +}); +},{"./_fails":45}],43:[function(require,module,exports){ +var isObject = require('./_is-object') + , document = require('./_global').document + // in old IE typeof document.createElement is 'object' + , is = isObject(document) && isObject(document.createElement); +module.exports = function(it){ + return is ? document.createElement(it) : {}; +}; +},{"./_global":46,"./_is-object":51}],44:[function(require,module,exports){ +var global = require('./_global') + , core = require('./_core') + , ctx = require('./_ctx') + , hide = require('./_hide') + , PROTOTYPE = 'prototype'; + +var $export = function(type, name, source){ + var IS_FORCED = type & $export.F + , IS_GLOBAL = type & $export.G + , IS_STATIC = type & $export.S + , IS_PROTO = type & $export.P + , IS_BIND = type & $export.B + , IS_WRAP = type & $export.W + , exports = IS_GLOBAL ? core : core[name] || (core[name] = {}) + , expProto = exports[PROTOTYPE] + , target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE] + , key, own, out; + if(IS_GLOBAL)source = name; + for(key in source){ + // contains in native + own = !IS_FORCED && target && target[key] !== undefined; + if(own && key in exports)continue; + // export native or passed + out = own ? target[key] : source[key]; + // prevent global pollution for namespaces + exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key] + // bind timers to global for call from export context + : IS_BIND && own ? ctx(out, global) + // wrap global constructors for prevent change them in library + : IS_WRAP && target[key] == out ? (function(C){ + var F = function(a, b, c){ + if(this instanceof C){ + switch(arguments.length){ + case 0: return new C; + case 1: return new C(a); + case 2: return new C(a, b); + } return new C(a, b, c); + } return C.apply(this, arguments); + }; + F[PROTOTYPE] = C[PROTOTYPE]; + return F; + // make static versions for prototype methods + })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; + // export proto methods to core.%CONSTRUCTOR%.methods.%NAME% + if(IS_PROTO){ + (exports.virtual || (exports.virtual = {}))[key] = out; + // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME% + if(type & $export.R && expProto && !expProto[key])hide(expProto, key, out); + } + } +}; +// type bitmap +$export.F = 1; // forced +$export.G = 2; // global +$export.S = 4; // static +$export.P = 8; // proto +$export.B = 16; // bind +$export.W = 32; // wrap +$export.U = 64; // safe +$export.R = 128; // real proto method for `library` +module.exports = $export; +},{"./_core":40,"./_ctx":41,"./_global":46,"./_hide":47}],45:[function(require,module,exports){ +module.exports = function(exec){ + try { + return !!exec(); + } catch(e){ + return true; + } +}; +},{}],46:[function(require,module,exports){ +// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 +var global = module.exports = typeof window != 'undefined' && window.Math == Math + ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')(); +if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef +},{}],47:[function(require,module,exports){ +var dP = require('./_object-dp') + , createDesc = require('./_property-desc'); +module.exports = require('./_descriptors') ? function(object, key, value){ + return dP.f(object, key, createDesc(1, value)); +} : function(object, key, value){ + object[key] = value; + return object; +}; +},{"./_descriptors":42,"./_object-dp":52,"./_property-desc":53}],48:[function(require,module,exports){ +module.exports = require('./_global').document && document.documentElement; +},{"./_global":46}],49:[function(require,module,exports){ +module.exports = !require('./_descriptors') && !require('./_fails')(function(){ + return Object.defineProperty(require('./_dom-create')('div'), 'a', {get: function(){ return 7; }}).a != 7; +}); +},{"./_descriptors":42,"./_dom-create":43,"./_fails":45}],50:[function(require,module,exports){ +// fast apply, http://jsperf.lnkit.com/fast-apply/5 +module.exports = function(fn, args, that){ + var un = that === undefined; + switch(args.length){ + case 0: return un ? fn() + : fn.call(that); + case 1: return un ? fn(args[0]) + : fn.call(that, args[0]); + case 2: return un ? fn(args[0], args[1]) + : fn.call(that, args[0], args[1]); + case 3: return un ? fn(args[0], args[1], args[2]) + : fn.call(that, args[0], args[1], args[2]); + case 4: return un ? fn(args[0], args[1], args[2], args[3]) + : fn.call(that, args[0], args[1], args[2], args[3]); + } return fn.apply(that, args); +}; +},{}],51:[function(require,module,exports){ +module.exports = function(it){ + return typeof it === 'object' ? it !== null : typeof it === 'function'; +}; +},{}],52:[function(require,module,exports){ +var anObject = require('./_an-object') + , IE8_DOM_DEFINE = require('./_ie8-dom-define') + , toPrimitive = require('./_to-primitive') + , dP = Object.defineProperty; + +exports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes){ + anObject(O); + P = toPrimitive(P, true); + anObject(Attributes); + if(IE8_DOM_DEFINE)try { + return dP(O, P, Attributes); + } catch(e){ /* empty */ } + if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!'); + if('value' in Attributes)O[P] = Attributes.value; + return O; +}; +},{"./_an-object":38,"./_descriptors":42,"./_ie8-dom-define":49,"./_to-primitive":55}],53:[function(require,module,exports){ +module.exports = function(bitmap, value){ + return { + enumerable : !(bitmap & 1), + configurable: !(bitmap & 2), + writable : !(bitmap & 4), + value : value + }; +}; +},{}],54:[function(require,module,exports){ +var ctx = require('./_ctx') + , invoke = require('./_invoke') + , html = require('./_html') + , cel = require('./_dom-create') + , global = require('./_global') + , process = global.process + , setTask = global.setImmediate + , clearTask = global.clearImmediate + , MessageChannel = global.MessageChannel + , counter = 0 + , queue = {} + , ONREADYSTATECHANGE = 'onreadystatechange' + , defer, channel, port; +var run = function(){ + var id = +this; + if(queue.hasOwnProperty(id)){ + var fn = queue[id]; + delete queue[id]; + fn(); + } +}; +var listener = function(event){ + run.call(event.data); +}; +// Node.js 0.9+ & IE10+ has setImmediate, otherwise: +if(!setTask || !clearTask){ + setTask = function setImmediate(fn){ + var args = [], i = 1; + while(arguments.length > i)args.push(arguments[i++]); + queue[++counter] = function(){ + invoke(typeof fn == 'function' ? fn : Function(fn), args); + }; + defer(counter); + return counter; + }; + clearTask = function clearImmediate(id){ + delete queue[id]; + }; + // Node.js 0.8- + if(require('./_cof')(process) == 'process'){ + defer = function(id){ + process.nextTick(ctx(run, id, 1)); + }; + // Browsers with MessageChannel, includes WebWorkers + } else if(MessageChannel){ + channel = new MessageChannel; + port = channel.port2; + channel.port1.onmessage = listener; + defer = ctx(port.postMessage, port, 1); + // Browsers with postMessage, skip WebWorkers + // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' + } else if(global.addEventListener && typeof postMessage == 'function' && !global.importScripts){ + defer = function(id){ + global.postMessage(id + '', '*'); + }; + global.addEventListener('message', listener, false); + // IE8- + } else if(ONREADYSTATECHANGE in cel('script')){ + defer = function(id){ + html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function(){ + html.removeChild(this); + run.call(id); + }; + }; + // Rest old browsers + } else { + defer = function(id){ + setTimeout(ctx(run, id, 1), 0); + }; + } +} +module.exports = { + set: setTask, + clear: clearTask +}; +},{"./_cof":39,"./_ctx":41,"./_dom-create":43,"./_global":46,"./_html":48,"./_invoke":50}],55:[function(require,module,exports){ +// 7.1.1 ToPrimitive(input [, PreferredType]) +var isObject = require('./_is-object'); +// instead of the ES6 spec version, we didn't implement @@toPrimitive case +// and the second argument - flag - preferred type is a string +module.exports = function(it, S){ + if(!isObject(it))return it; + var fn, val; + if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val; + if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val; + if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val; + throw TypeError("Can't convert object to primitive value"); +}; +},{"./_is-object":51}],56:[function(require,module,exports){ +var $export = require('./_export') + , $task = require('./_task'); +$export($export.G + $export.B, { + setImmediate: $task.set, + clearImmediate: $task.clear +}); +},{"./_export":44,"./_task":54}],57:[function(require,module,exports){ +(function (global){ +'use strict'; +var Mutation = global.MutationObserver || global.WebKitMutationObserver; + +var scheduleDrain; + +{ + if (Mutation) { + var called = 0; + var observer = new Mutation(nextTick); + var element = global.document.createTextNode(''); + observer.observe(element, { + characterData: true + }); + scheduleDrain = function () { + element.data = (called = ++called % 2); + }; + } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') { + var channel = new global.MessageChannel(); + channel.port1.onmessage = nextTick; + scheduleDrain = function () { + channel.port2.postMessage(0); + }; + } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) { + scheduleDrain = function () { + + // Create a + + + + + +
    + +

    index.html

    +
    + + diff --git a/doc/0.1.4/en_public/overview-tree.html b/doc/0.1.4/en_public/overview-tree.html new file mode 100644 index 0000000..76feff0 --- /dev/null +++ b/doc/0.1.4/en_public/overview-tree.html @@ -0,0 +1,313 @@ + + + + + +Class Hierarchy + + + + + + + + + + + + + + + +
    + +
    +
    + +
    +
    +

    Class Hierarchy

    + +
    +
    +

    Interface Hierarchy

    + +
    +
    +

    Enum Hierarchy

    + +
    +
    +
    +
    + +
    + + diff --git a/doc/0.1.4/en_public/package-search-index.js b/doc/0.1.4/en_public/package-search-index.js new file mode 100644 index 0000000..195d1ef --- /dev/null +++ b/doc/0.1.4/en_public/package-search-index.js @@ -0,0 +1 @@ +packageSearchIndex = [{"l":"All Packages","url":"allpackages-index.html"},{"l":"bitchanger.calculations"},{"l":"bitchanger.gui.controller"},{"l":"bitchanger.gui.controls"},{"l":"bitchanger.gui.views"},{"l":"bitchanger.main"},{"l":"bitchanger.preferences"},{"l":"bitchanger.util"}] \ No newline at end of file diff --git a/doc/0.1.4/en_public/package-search-index.zip b/doc/0.1.4/en_public/package-search-index.zip new file mode 100644 index 0000000000000000000000000000000000000000..5a2c35a2a7c62891e9d5d7f7a993236fbc8ea68a GIT binary patch literal 282 zcmWIWW@Zs#;Nak3C|V{F$bbYSf$W0BR3-ORj{)C#?<;{3eUenY-P z4m>RTn_}9l8D#A}`ZanC#kr4*TiSKB{IGTmkXtnOZe%7uf544{aiy1)V+}v^$cEHA zhs@oVqh0n)mDfz+o7J6`u967K$$PrfYf;ie*QtN~A3s0j`{N#uyGZuO zlRpogbGvgT>%^~TKbQi%**V@i)u@yKoyN?_z!2cg$Rxsma6Yme$oZ%Mr)L7ZS=m5J N8G+CpNbd#f0|0`HRNw#r literal 0 HcmV?d00001 diff --git a/doc/0.1.4/en_public/resources/glass.png b/doc/0.1.4/en_public/resources/glass.png new file mode 100644 index 0000000000000000000000000000000000000000..a7f591f467a1c0c949bbc510156a0c1afb860a6e GIT binary patch literal 499 zcmVJoRsvExf%rEN>jUL}qZ_~k#FbE+Q;{`;0FZwVNX2n-^JoI; zP;4#$8DIy*Yk-P>VN(DUKmPse7mx+ExD4O|;?E5D0Z5($mjO3`*anwQU^s{ZDK#Lz zj>~{qyaIx5K!t%=G&2IJNzg!ChRpyLkO7}Ry!QaotAHAMpbB3AF(}|_f!G-oI|uK6 z`id_dumai5K%C3Y$;tKS_iqMPHg<*|-@e`liWLAggVM!zAP#@l;=c>S03;{#04Z~5 zN_+ss=Yg6*hTr59mzMwZ@+l~q!+?ft!fF66AXT#wWavHt30bZWFCK%!BNk}LN?0Hg z1VF_nfs`Lm^DjYZ1(1uD0u4CSIr)XAaqW6IT{!St5~1{i=i}zAy76p%_|w8rh@@c0Axr!ns=D-X+|*sY6!@wacG9%)Qn*O zl0sa739kT-&_?#oVxXF6tOnqTD)cZ}2vi$`ZU8RLAlo8=_z#*P3xI~i!lEh+Pdu-L zx{d*wgjtXbnGX_Yf@Tc7Q3YhLhPvc8noGJs2DA~1DySiA&6V{5JzFt ojAY1KXm~va;tU{v7C?Xj0BHw!K;2aXV*mgE07*qoM6N<$f;4TDA^-pY literal 0 HcmV?d00001 diff --git a/doc/0.1.4/en_public/script.js b/doc/0.1.4/en_public/script.js new file mode 100644 index 0000000..09adaaa --- /dev/null +++ b/doc/0.1.4/en_public/script.js @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved. + * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + */ + +var moduleSearchIndex; +var packageSearchIndex; +var typeSearchIndex; +var memberSearchIndex; +var tagSearchIndex; +function loadScripts(doc, tag) { + createElem(doc, tag, 'jquery/jszip/dist/jszip.js'); + createElem(doc, tag, 'jquery/jszip-utils/dist/jszip-utils.js'); + if (window.navigator.userAgent.indexOf('MSIE ') > 0 || window.navigator.userAgent.indexOf('Trident/') > 0 || + window.navigator.userAgent.indexOf('Edge/') > 0) { + createElem(doc, tag, 'jquery/jszip-utils/dist/jszip-utils-ie.js'); + } + createElem(doc, tag, 'search.js'); + + $.get(pathtoroot + "module-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "module-search-index.zip", function(e, data) { + var zip = new JSZip(data); + zip.load(data); + moduleSearchIndex = JSON.parse(zip.file("module-search-index.json").asText()); + }); + }); + $.get(pathtoroot + "package-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "package-search-index.zip", function(e, data) { + var zip = new JSZip(data); + zip.load(data); + packageSearchIndex = JSON.parse(zip.file("package-search-index.json").asText()); + }); + }); + $.get(pathtoroot + "type-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "type-search-index.zip", function(e, data) { + var zip = new JSZip(data); + zip.load(data); + typeSearchIndex = JSON.parse(zip.file("type-search-index.json").asText()); + }); + }); + $.get(pathtoroot + "member-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "member-search-index.zip", function(e, data) { + var zip = new JSZip(data); + zip.load(data); + memberSearchIndex = JSON.parse(zip.file("member-search-index.json").asText()); + }); + }); + $.get(pathtoroot + "tag-search-index.zip") + .done(function() { + JSZipUtils.getBinaryContent(pathtoroot + "tag-search-index.zip", function(e, data) { + var zip = new JSZip(data); + zip.load(data); + tagSearchIndex = JSON.parse(zip.file("tag-search-index.json").asText()); + }); + }); + if (!moduleSearchIndex) { + createElem(doc, tag, 'module-search-index.js'); + } + if (!packageSearchIndex) { + createElem(doc, tag, 'package-search-index.js'); + } + if (!typeSearchIndex) { + createElem(doc, tag, 'type-search-index.js'); + } + if (!memberSearchIndex) { + createElem(doc, tag, 'member-search-index.js'); + } + if (!tagSearchIndex) { + createElem(doc, tag, 'tag-search-index.js'); + } + $(window).resize(function() { + $('.navPadding').css('padding-top', $('.fixedNav').css("height")); + }); +} + +function createElem(doc, tag, path) { + var script = doc.createElement(tag); + var scriptElement = doc.getElementsByTagName(tag)[0]; + script.src = pathtoroot + path; + scriptElement.parentNode.insertBefore(script, scriptElement); +} + +function show(type) { + count = 0; + for (var key in data) { + var row = document.getElementById(key); + if ((data[key] & type) !== 0) { + row.style.display = ''; + row.className = (count++ % 2) ? rowColor : altColor; + } + else + row.style.display = 'none'; + } + updateTabs(type); +} + +function updateTabs(type) { + for (var value in tabs) { + var sNode = document.getElementById(tabs[value][0]); + var spanNode = sNode.firstChild; + if (value == type) { + sNode.className = activeTableTab; + spanNode.innerHTML = tabs[value][1]; + } + else { + sNode.className = tableTab; + spanNode.innerHTML = "" + tabs[value][1] + ""; + } + } +} + +function updateModuleFrame(pFrame, cFrame) { + top.packageFrame.location = pFrame; + top.classFrame.location = cFrame; +} diff --git a/doc/0.1.4/en_public/search.js b/doc/0.1.4/en_public/search.js new file mode 100644 index 0000000..7fc8bfc --- /dev/null +++ b/doc/0.1.4/en_public/search.js @@ -0,0 +1,329 @@ +/* + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + */ + +var noResult = {l: "No results found"}; +var catModules = "Modules"; +var catPackages = "Packages"; +var catTypes = "Types"; +var catMembers = "Members"; +var catSearchTags = "SearchTags"; +var highlight = "$&"; +var camelCaseRegexp = ""; +var secondaryMatcher = ""; +function getHighlightedText(item) { + var ccMatcher = new RegExp(camelCaseRegexp); + var label = item.replace(ccMatcher, highlight); + if (label === item) { + label = item.replace(secondaryMatcher, highlight); + } + return label; +} +function getURLPrefix(ui) { + var urlPrefix=""; + if (useModuleDirectories) { + var slash = "/"; + if (ui.item.category === catModules) { + return ui.item.l + slash; + } else if (ui.item.category === catPackages && ui.item.m) { + return ui.item.m + slash; + } else if ((ui.item.category === catTypes && ui.item.p) || ui.item.category === catMembers) { + $.each(packageSearchIndex, function(index, item) { + if (ui.item.p == item.l) { + urlPrefix = item.m + slash; + } + }); + return urlPrefix; + } else { + return urlPrefix; + } + } + return urlPrefix; +} +var watermark = 'Search'; +$(function() { + $("#search").val(''); + $("#search").prop("disabled", false); + $("#reset").prop("disabled", false); + $("#search").val(watermark).addClass('watermark'); + $("#search").blur(function() { + if ($(this).val().length == 0) { + $(this).val(watermark).addClass('watermark'); + } + }); + $("#search").on('click keydown', function() { + if ($(this).val() == watermark) { + $(this).val('').removeClass('watermark'); + } + }); + $("#reset").click(function() { + $("#search").val(''); + $("#search").focus(); + }); + $("#search").focus(); + $("#search")[0].setSelectionRange(0, 0); +}); +$.widget("custom.catcomplete", $.ui.autocomplete, { + _create: function() { + this._super(); + this.widget().menu("option", "items", "> :not(.ui-autocomplete-category)"); + }, + _renderMenu: function(ul, items) { + var rMenu = this, + currentCategory = ""; + $.each(items, function(index, item) { + var li; + if (item.l !== noResult.l && item.category !== currentCategory) { + ul.append("
  • " + item.category + "
  • "); + currentCategory = item.category; + } + li = rMenu._renderItemData(ul, item); + if (item.category) { + li.attr("aria-label", item.category + " : " + item.l); + li.attr("class", "resultItem"); + } else { + li.attr("aria-label", item.l); + li.attr("class", "resultItem"); + } + }); + }, + _renderItem: function(ul, item) { + var label = ""; + if (item.category === catModules) { + label = getHighlightedText(item.l); + } else if (item.category === catPackages) { + label = (item.m) + ? getHighlightedText(item.m + "/" + item.l) + : getHighlightedText(item.l); + } else if (item.category === catTypes) { + label = (item.p) + ? getHighlightedText(item.p + "." + item.l) + : getHighlightedText(item.l); + } else if (item.category === catMembers) { + label = getHighlightedText(item.p + "." + (item.c + "." + item.l)); + } else if (item.category === catSearchTags) { + label = getHighlightedText(item.l); + } else { + label = item.l; + } + $li = $("
  • ").appendTo(ul); + if (item.category === catSearchTags) { + if (item.d) { + $("").attr("href", "#") + .html(label + " (" + item.h + ")
    " + + item.d + "
    ") + .appendTo($li); + } else { + $("
    ").attr("href", "#") + .html(label + " (" + item.h + ")") + .appendTo($li); + } + } else { + $("").attr("href", "#") + .html(label) + .appendTo($li); + } + return $li; + } +}); +$(function() { + $("#search").catcomplete({ + minLength: 1, + delay: 100, + source: function(request, response) { + var result = new Array(); + var presult = new Array(); + var tresult = new Array(); + var mresult = new Array(); + var tgresult = new Array(); + var secondaryresult = new Array(); + var displayCount = 0; + var exactMatcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(request.term) + "$", "i"); + camelCaseRegexp = ($.ui.autocomplete.escapeRegex(request.term)).split(/(?=[A-Z])/).join("([a-z0-9_$]*?)"); + var camelCaseMatcher = new RegExp("^" + camelCaseRegexp); + secondaryMatcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i"); + + // Return the nested innermost name from the specified object + function nestedName(e) { + return e.l.substring(e.l.lastIndexOf(".") + 1); + } + + function concatResults(a1, a2) { + a1 = a1.concat(a2); + a2.length = 0; + return a1; + } + + if (moduleSearchIndex) { + var mdleCount = 0; + $.each(moduleSearchIndex, function(index, item) { + item.category = catModules; + if (exactMatcher.test(item.l)) { + result.push(item); + mdleCount++; + } else if (camelCaseMatcher.test(item.l)) { + result.push(item); + } else if (secondaryMatcher.test(item.l)) { + secondaryresult.push(item); + } + }); + displayCount = mdleCount; + result = concatResults(result, secondaryresult); + } + if (packageSearchIndex) { + var pCount = 0; + var pkg = ""; + $.each(packageSearchIndex, function(index, item) { + item.category = catPackages; + pkg = (item.m) + ? (item.m + "/" + item.l) + : item.l; + if (exactMatcher.test(item.l)) { + presult.push(item); + pCount++; + } else if (camelCaseMatcher.test(pkg)) { + presult.push(item); + } else if (secondaryMatcher.test(pkg)) { + secondaryresult.push(item); + } + }); + result = result.concat(concatResults(presult, secondaryresult)); + displayCount = (pCount > displayCount) ? pCount : displayCount; + } + if (typeSearchIndex) { + var tCount = 0; + $.each(typeSearchIndex, function(index, item) { + item.category = catTypes; + var s = nestedName(item); + if (exactMatcher.test(s)) { + tresult.push(item); + tCount++; + } else if (camelCaseMatcher.test(s)) { + tresult.push(item); + } else if (secondaryMatcher.test(item.p + "." + item.l)) { + secondaryresult.push(item); + } + }); + result = result.concat(concatResults(tresult, secondaryresult)); + displayCount = (tCount > displayCount) ? tCount : displayCount; + } + if (memberSearchIndex) { + var mCount = 0; + $.each(memberSearchIndex, function(index, item) { + item.category = catMembers; + var s = nestedName(item); + if (exactMatcher.test(s)) { + mresult.push(item); + mCount++; + } else if (camelCaseMatcher.test(s)) { + mresult.push(item); + } else if (secondaryMatcher.test(item.c + "." + item.l)) { + secondaryresult.push(item); + } + }); + result = result.concat(concatResults(mresult, secondaryresult)); + displayCount = (mCount > displayCount) ? mCount : displayCount; + } + if (tagSearchIndex) { + var tgCount = 0; + $.each(tagSearchIndex, function(index, item) { + item.category = catSearchTags; + if (exactMatcher.test(item.l)) { + tgresult.push(item); + tgCount++; + } else if (secondaryMatcher.test(item.l)) { + secondaryresult.push(item); + } + }); + result = result.concat(concatResults(tgresult, secondaryresult)); + displayCount = (tgCount > displayCount) ? tgCount : displayCount; + } + displayCount = (displayCount > 500) ? displayCount : 500; + var counter = function() { + var count = {Modules: 0, Packages: 0, Types: 0, Members: 0, SearchTags: 0}; + var f = function(item) { + count[item.category] += 1; + return (count[item.category] <= displayCount); + }; + return f; + }(); + response(result.filter(counter)); + }, + response: function(event, ui) { + if (!ui.content.length) { + ui.content.push(noResult); + } else { + $("#search").empty(); + } + }, + autoFocus: true, + position: { + collision: "flip" + }, + select: function(event, ui) { + if (ui.item.l !== noResult.l) { + var url = getURLPrefix(ui); + if (ui.item.category === catModules) { + if (useModuleDirectories) { + url += "module-summary.html"; + } else { + url = ui.item.l + "-summary.html"; + } + } else if (ui.item.category === catPackages) { + if (ui.item.url) { + url = ui.item.url; + } else { + url += ui.item.l.replace(/\./g, '/') + "/package-summary.html"; + } + } else if (ui.item.category === catTypes) { + if (ui.item.url) { + url = ui.item.url; + } else if (ui.item.p === "") { + url += ui.item.l + ".html"; + } else { + url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.l + ".html"; + } + } else if (ui.item.category === catMembers) { + if (ui.item.p === "") { + url += ui.item.c + ".html" + "#"; + } else { + url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.c + ".html" + "#"; + } + if (ui.item.url) { + url += ui.item.url; + } else { + url += ui.item.l; + } + } else if (ui.item.category === catSearchTags) { + url += ui.item.u; + } + if (top !== window) { + parent.classFrame.location = pathtoroot + url; + } else { + window.location.href = pathtoroot + url; + } + } + } + }); +}); diff --git a/doc/0.1.4/en_public/stylesheet.css b/doc/0.1.4/en_public/stylesheet.css new file mode 100644 index 0000000..fa24676 --- /dev/null +++ b/doc/0.1.4/en_public/stylesheet.css @@ -0,0 +1,906 @@ +/* + * Javadoc style sheet + */ + +@import url('resources/fonts/dejavu.css'); + +/* + * Styles for individual HTML elements. + * + * These are styles that are specific to individual HTML elements. Changing them affects the style of a particular + * HTML element throughout the page. + */ + +body { + background-color:#ffffff; + color:#353833; + font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; + font-size:14px; + margin:0; + padding:0; + height:100%; + width:100%; +} +iframe { + margin:0; + padding:0; + height:100%; + width:100%; + overflow-y:scroll; + border:none; +} +a:link, a:visited { + text-decoration:none; + color:#4A6782; +} +a[href]:hover, a[href]:focus { + text-decoration:none; + color:#bb7a2a; +} +a[name] { + color:#353833; +} +a[name]:before, a[name]:target, a[id]:before, a[id]:target { + content:""; + display:inline-block; + position:relative; + padding-top:129px; + margin-top:-129px; +} +pre { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; +} +h1 { + font-size:20px; +} +h2 { + font-size:18px; +} +h3 { + font-size:16px; + font-style:italic; +} +h4 { + font-size:13px; +} +h5 { + font-size:12px; +} +h6 { + font-size:11px; +} +ul { + list-style-type:disc; +} +code, tt { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; + margin-top:8px; + line-height:1.4em; +} +dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + padding-top:4px; +} +table tr td dt code { + font-family:'DejaVu Sans Mono', monospace; + font-size:14px; + vertical-align:top; + padding-top:4px; +} +sup { + font-size:8px; +} + +/* + * Styles for HTML generated by javadoc. + * + * These are style classes that are used by the standard doclet to generate HTML documentation. + */ + +/* + * Styles for document title and copyright. + */ +.clear { + clear:both; + height:0px; + overflow:hidden; +} +.aboutLanguage { + float:right; + padding:0px 21px; + font-size:11px; + z-index:200; + margin-top:-9px; +} +.legalCopy { + margin-left:.5em; +} +.bar a, .bar a:link, .bar a:visited, .bar a:active { + color:#FFFFFF; + text-decoration:none; +} +.bar a:hover, .bar a:focus { + color:#bb7a2a; +} +.tab { + background-color:#0066FF; + color:#ffffff; + padding:8px; + width:5em; + font-weight:bold; +} +/* + * Styles for navigation bar. + */ +.bar { + background-color:#4D7A97; + color:#FFFFFF; + padding:.8em .5em .4em .8em; + height:auto;/*height:1.8em;*/ + font-size:11px; + margin:0; +} +.navPadding { + padding-top: 107px; +} +.fixedNav { + position:fixed; + width:100%; + z-index:999; + background-color:#ffffff; +} +.topNav { + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.bottomNav { + margin-top:10px; + background-color:#4D7A97; + color:#FFFFFF; + float:left; + padding:0; + width:100%; + clear:right; + height:2.8em; + padding-top:10px; + overflow:hidden; + font-size:12px; +} +.subNav { + background-color:#dee3e9; + float:left; + width:100%; + overflow:hidden; + font-size:12px; +} +.subNav div { + clear:left; + float:left; + padding:0 0 5px 6px; + text-transform:uppercase; +} +ul.navList, ul.subNavList { + float:left; + margin:0 25px 0 0; + padding:0; +} +ul.navList li{ + list-style:none; + float:left; + padding: 5px 6px; + text-transform:uppercase; +} +ul.navListSearch { + float:right; + margin:0 0 0 0; + padding:0; +} +ul.navListSearch li { + list-style:none; + float:right; + padding: 5px 6px; + text-transform:uppercase; +} +ul.navListSearch li label { + position:relative; + right:-16px; +} +ul.subNavList li { + list-style:none; + float:left; +} +.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited { + color:#FFFFFF; + text-decoration:none; + text-transform:uppercase; +} +.topNav a:hover, .bottomNav a:hover { + text-decoration:none; + color:#bb7a2a; + text-transform:uppercase; +} +.navBarCell1Rev { + background-color:#F8981D; + color:#253441; + margin: auto 5px; +} +.skipNav { + position:absolute; + top:auto; + left:-9999px; + overflow:hidden; +} +/* + * Styles for page header and footer. + */ +.header, .footer { + clear:both; + margin:0 20px; + padding:5px 0 0 0; +} +.indexNav { + position:relative; + font-size:12px; + background-color:#dee3e9; +} +.indexNav ul { + margin-top:0; + padding:5px; +} +.indexNav ul li { + display:inline; + list-style-type:none; + padding-right:10px; + text-transform:uppercase; +} +.indexNav h1 { + font-size:13px; +} +.title { + color:#2c4557; + margin:10px 0; +} +.subTitle { + margin:5px 0 0 0; +} +.header ul { + margin:0 0 15px 0; + padding:0; +} +.footer ul { + margin:20px 0 5px 0; +} +.header ul li, .footer ul li { + list-style:none; + font-size:13px; +} +/* + * Styles for headings. + */ +div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + background-color:#dee3e9; + border:1px solid #d0d9e0; + margin:0 0 6px -8px; + padding:7px 5px; +} +ul.blockList ul.blockList li.blockList h3 { + padding:0; + margin:15px 0; +} +ul.blockList li.blockList h2 { + padding:0px 0 20px 0; +} +/* + * Styles for page layout containers. + */ +.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer, +.allClassesContainer, .allPackagesContainer { + clear:both; + padding:10px 20px; + position:relative; +} +.indexContainer { + margin:10px; + position:relative; + font-size:12px; +} +.indexContainer h2 { + font-size:13px; + padding:0 0 3px 0; +} +.indexContainer ul { + margin:0; + padding:0; +} +.indexContainer ul li { + list-style:none; + padding-top:2px; +} +.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt { + font-size:12px; + font-weight:bold; + margin:10px 0 0 0; + color:#4E4E4E; +} +.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd { + margin:5px 0 10px 0px; + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} +.serializedFormContainer dl.nameValue dt { + margin-left:1px; + font-size:1.1em; + display:inline; + font-weight:bold; +} +.serializedFormContainer dl.nameValue dd { + margin:0 0 0 1px; + font-size:1.1em; + display:inline; +} +/* + * Styles for lists. + */ +li.circle { + list-style:circle; +} +ul.horizontal li { + display:inline; + font-size:0.9em; +} +ul.inheritance { + margin:0; + padding:0; +} +ul.inheritance li { + display:inline; + list-style:none; +} +ul.inheritance li ul.inheritance { + margin-left:15px; + padding-left:15px; + padding-top:1px; +} +ul.blockList, ul.blockListLast { + margin:10px 0 10px 0; + padding:0; +} +ul.blockList li.blockList, ul.blockListLast li.blockList { + list-style:none; + margin-bottom:15px; + line-height:1.4; +} +ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList { + padding:0px 20px 5px 10px; + border:1px solid #ededed; + background-color:#f8f8f8; +} +ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList { + padding:0 0 5px 8px; + background-color:#ffffff; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockList { + margin-left:0; + padding-left:0; + padding-bottom:15px; + border:none; +} +ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast { + list-style:none; + border-bottom:none; + padding-bottom:0; +} +table tr td dl, table tr td dl dt, table tr td dl dd { + margin-top:0; + margin-bottom:1px; +} +/* + * Styles for tables. + */ +.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary, +.requiresSummary, .packagesSummary, .providesSummary, .usesSummary { + width:100%; + border-spacing:0; + border-left:1px solid #EEE; + border-right:1px solid #EEE; + border-bottom:1px solid #EEE; +} +.overviewSummary, .memberSummary, .requiresSummary, .packagesSummary, .providesSummary, .usesSummary { + padding:0px; +} +.overviewSummary caption, .memberSummary caption, .typeSummary caption, +.useSummary caption, .constantsSummary caption, .deprecatedSummary caption, +.requiresSummary caption, .packagesSummary caption, .providesSummary caption, .usesSummary caption { + position:relative; + text-align:left; + background-repeat:no-repeat; + color:#253441; + font-weight:bold; + clear:none; + overflow:hidden; + padding:0px; + padding-top:10px; + padding-left:1px; + margin:0px; + white-space:pre; +} +.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link, +.constantsSummary caption a:link, .deprecatedSummary caption a:link, +.requiresSummary caption a:link, .packagesSummary caption a:link, .providesSummary caption a:link, +.usesSummary caption a:link, +.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover, +.constantsSummary caption a:hover, .deprecatedSummary caption a:hover, +.requiresSummary caption a:hover, .packagesSummary caption a:hover, .providesSummary caption a:hover, +.usesSummary caption a:hover, +.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active, +.constantsSummary caption a:active, .deprecatedSummary caption a:active, +.requiresSummary caption a:active, .packagesSummary caption a:active, .providesSummary caption a:active, +.usesSummary caption a:active, +.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited, +.constantsSummary caption a:visited, .deprecatedSummary caption a:visited, +.requiresSummary caption a:visited, .packagesSummary caption a:visited, .providesSummary caption a:visited, +.usesSummary caption a:visited { + color:#FFFFFF; +} +.useSummary caption a:link, .useSummary caption a:hover, .useSummary caption a:active, +.useSummary caption a:visited { + color:#1f389c; +} +.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span, +.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span, +.requiresSummary caption span, .packagesSummary caption span, .providesSummary caption span, +.usesSummary caption span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + padding-bottom:7px; + display:inline-block; + float:left; + background-color:#F8981D; + border: none; + height:16px; +} +.memberSummary caption span.activeTableTab span, .packagesSummary caption span.activeTableTab span, +.overviewSummary caption span.activeTableTab span, .typeSummary caption span.activeTableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#F8981D; + height:16px; +} +.memberSummary caption span.tableTab span, .packagesSummary caption span.tableTab span, +.overviewSummary caption span.tableTab span, .typeSummary caption span.tableTab span { + white-space:nowrap; + padding-top:5px; + padding-left:12px; + padding-right:12px; + margin-right:3px; + display:inline-block; + float:left; + background-color:#4D7A97; + height:16px; +} +.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab, +.packagesSummary caption span.tableTab, .packagesSummary caption span.activeTableTab, +.overviewSummary caption span.tableTab, .overviewSummary caption span.activeTableTab, +.typeSummary caption span.tableTab, .typeSummary caption span.activeTableTab { + padding-top:0px; + padding-left:0px; + padding-right:0px; + background-image:none; + float:none; + display:inline; +} +.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd, +.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd, +.requiresSummary .tabEnd, .packagesSummary .tabEnd, .providesSummary .tabEnd, .usesSummary .tabEnd { + display:none; + width:5px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .activeTableTab .tabEnd, .packagesSummary .activeTableTab .tabEnd, +.overviewSummary .activeTableTab .tabEnd, .typeSummary .activeTableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + float:left; + background-color:#F8981D; +} +.memberSummary .tableTab .tabEnd, .packagesSummary .tableTab .tabEnd, +.overviewSummary .tableTab .tabEnd, .typeSummary .tableTab .tabEnd { + display:none; + width:5px; + margin-right:3px; + position:relative; + background-color:#4D7A97; + float:left; +} +.rowColor th, .altColor th { + font-weight:normal; +} +.overviewSummary td, .memberSummary td, .typeSummary td, +.useSummary td, .constantsSummary td, .deprecatedSummary td, +.requiresSummary td, .packagesSummary td, .providesSummary td, .usesSummary td { + text-align:left; + padding:0px 0px 12px 10px; +} +th.colFirst, th.colSecond, th.colLast, th.colConstructorName, th.colDeprecatedItemName, .useSummary th, +.constantsSummary th, .packagesSummary th, td.colFirst, td.colSecond, td.colLast, .useSummary td, +.constantsSummary td { + vertical-align:top; + padding-right:0px; + padding-top:8px; + padding-bottom:3px; +} +th.colFirst, th.colSecond, th.colLast, th.colConstructorName, th.colDeprecatedItemName, .constantsSummary th, +.packagesSummary th { + background:#dee3e9; + text-align:left; + padding:8px 3px 3px 7px; +} +td.colFirst, th.colFirst { + font-size:13px; +} +td.colSecond, th.colSecond, td.colLast, th.colConstructorName, th.colDeprecatedItemName, th.colLast { + font-size:13px; +} +.constantsSummary th, .packagesSummary th { + font-size:13px; +} +.providesSummary th.colFirst, .providesSummary th.colLast, .providesSummary td.colFirst, +.providesSummary td.colLast { + white-space:normal; + font-size:13px; +} +.overviewSummary td.colFirst, .overviewSummary th.colFirst, +.requiresSummary td.colFirst, .requiresSummary th.colFirst, +.packagesSummary td.colFirst, .packagesSummary td.colSecond, .packagesSummary th.colFirst, .packagesSummary th, +.usesSummary td.colFirst, .usesSummary th.colFirst, +.providesSummary td.colFirst, .providesSummary th.colFirst, +.memberSummary td.colFirst, .memberSummary th.colFirst, +.memberSummary td.colSecond, .memberSummary th.colSecond, .memberSummary th.colConstructorName, +.typeSummary td.colFirst, .typeSummary th.colFirst { + vertical-align:top; +} +.packagesSummary th.colLast, .packagesSummary td.colLast { + white-space:normal; +} +td.colFirst a:link, td.colFirst a:visited, +td.colSecond a:link, td.colSecond a:visited, +th.colFirst a:link, th.colFirst a:visited, +th.colSecond a:link, th.colSecond a:visited, +th.colConstructorName a:link, th.colConstructorName a:visited, +th.colDeprecatedItemName a:link, th.colDeprecatedItemName a:visited, +.constantValuesContainer td a:link, .constantValuesContainer td a:visited, +.allClassesContainer td a:link, .allClassesContainer td a:visited, +.allPackagesContainer td a:link, .allPackagesContainer td a:visited { + font-weight:bold; +} +.tableSubHeadingColor { + background-color:#EEEEFF; +} +.altColor, .altColor th { + background-color:#FFFFFF; +} +.rowColor, .rowColor th { + background-color:#EEEEEF; +} +/* + * Styles for contents. + */ +.description pre { + margin-top:0; +} +.deprecatedContent { + margin:0; + padding:10px 0; +} +.docSummary { + padding:0; +} +ul.blockList ul.blockList ul.blockList li.blockList h3 { + font-style:normal; +} +div.block { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; +} +td.colLast div { + padding-top:0px; +} +td.colLast a { + padding-bottom:3px; +} +/* + * Styles for formatting effect. + */ +.sourceLineNo { + color:green; + padding:0 30px 0 0; +} +h1.hidden { + visibility:hidden; + overflow:hidden; + font-size:10px; +} +.block { + display:block; + margin:3px 10px 2px 0px; + color:#474747; +} +.deprecatedLabel, .descfrmTypeLabel, .implementationLabel, .memberNameLabel, .memberNameLink, +.moduleLabelInPackage, .moduleLabelInType, .overrideSpecifyLabel, .packageLabelInType, +.packageHierarchyLabel, .paramLabel, .returnLabel, .seeLabel, .simpleTagLabel, +.throwsLabel, .typeNameLabel, .typeNameLink, .searchTagLink { + font-weight:bold; +} +.deprecationComment, .emphasizedPhrase, .interfaceName { + font-style:italic; +} +.deprecationBlock { + font-size:14px; + font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; + border-style:solid; + border-width:thin; + border-radius:10px; + padding:10px; + margin-bottom:10px; + margin-right:10px; + display:inline-block; +} +div.block div.deprecationComment, div.block div.block span.emphasizedPhrase, +div.block div.block span.interfaceName { + font-style:normal; +} +div.contentContainer ul.blockList li.blockList h2 { + padding-bottom:0px; +} +/* + * Styles for IFRAME. + */ +.mainContainer { + margin:0 auto; + padding:0; + height:100%; + width:100%; + position:fixed; + top:0; + left:0; +} +.leftContainer { + height:100%; + position:fixed; + width:320px; +} +.leftTop { + position:relative; + float:left; + width:315px; + top:0; + left:0; + height:30%; + border-right:6px solid #ccc; + border-bottom:6px solid #ccc; +} +.leftBottom { + position:relative; + float:left; + width:315px; + bottom:0; + left:0; + height:70%; + border-right:6px solid #ccc; + border-top:1px solid #000; +} +.rightContainer { + position:absolute; + left:320px; + top:0; + bottom:0; + height:100%; + right:0; + border-left:1px solid #000; +} +.rightIframe { + margin:0; + padding:0; + height:100%; + right:30px; + width:100%; + overflow:visible; + margin-bottom:30px; +} +/* + * Styles specific to HTML5 elements. + */ +main, nav, header, footer, section { + display:block; +} +/* + * Styles for javadoc search. + */ +.ui-autocomplete-category { + font-weight:bold; + font-size:15px; + padding:7px 0 7px 3px; + background-color:#4D7A97; + color:#FFFFFF; +} +.resultItem { + font-size:13px; +} +.ui-autocomplete { + max-height:85%; + max-width:65%; + overflow-y:scroll; + overflow-x:scroll; + white-space:nowrap; + box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); +} +ul.ui-autocomplete { + position:fixed; + z-index:999999; +} +ul.ui-autocomplete li { + float:left; + clear:both; + width:100%; +} +.resultHighlight { + font-weight:bold; +} +#search { + background-image:url('resources/glass.png'); + background-size:13px; + background-repeat:no-repeat; + background-position:2px 3px; + padding-left:20px; + position:relative; + right:-18px; +} +#reset { + background-color: rgb(255,255,255); + background-image:url('resources/x.png'); + background-position:center; + background-repeat:no-repeat; + background-size:12px; + border:0 none; + width:16px; + height:17px; + position:relative; + left:-4px; + top:-4px; + font-size:0px; +} +.watermark { + color:#545454; +} +.searchTagDescResult { + font-style:italic; + font-size:11px; +} +.searchTagHolderResult { + font-style:italic; + font-size:12px; +} +.searchTagResult:before, .searchTagResult:target { + color:red; +} +.moduleGraph span { + display:none; + position:absolute; +} +.moduleGraph:hover span { + display:block; + margin: -100px 0 0 100px; + z-index: 1; +} +.methodSignature { + white-space:normal; +} + +/* + * Styles for user-provided tables. + * + * borderless: + * No borders, vertical margins, styled caption. + * This style is provided for use with existing doc comments. + * In general, borderless tables should not be used for layout purposes. + * + * plain: + * Plain borders around table and cells, vertical margins, styled caption. + * Best for small tables or for complex tables for tables with cells that span + * rows and columns, when the "striped" style does not work well. + * + * striped: + * Borders around the table and vertical borders between cells, striped rows, + * vertical margins, styled caption. + * Best for tables that have a header row, and a body containing a series of simple rows. + */ + +table.borderless, +table.plain, +table.striped { + margin-top: 10px; + margin-bottom: 10px; +} +table.borderless > caption, +table.plain > caption, +table.striped > caption { + font-weight: bold; + font-size: smaller; +} +table.borderless th, table.borderless td, +table.plain th, table.plain td, +table.striped th, table.striped td { + padding: 2px 5px; +} +table.borderless, +table.borderless > thead > tr > th, table.borderless > tbody > tr > th, table.borderless > tr > th, +table.borderless > thead > tr > td, table.borderless > tbody > tr > td, table.borderless > tr > td { + border: none; +} +table.borderless > thead > tr, table.borderless > tbody > tr, table.borderless > tr { + background-color: transparent; +} +table.plain { + border-collapse: collapse; + border: 1px solid black; +} +table.plain > thead > tr, table.plain > tbody tr, table.plain > tr { + background-color: transparent; +} +table.plain > thead > tr > th, table.plain > tbody > tr > th, table.plain > tr > th, +table.plain > thead > tr > td, table.plain > tbody > tr > td, table.plain > tr > td { + border: 1px solid black; +} +table.striped { + border-collapse: collapse; + border: 1px solid black; +} +table.striped > thead { + background-color: #E3E3E3; +} +table.striped > thead > tr > th, table.striped > thead > tr > td { + border: 1px solid black; +} +table.striped > tbody > tr:nth-child(even) { + background-color: #EEE +} +table.striped > tbody > tr:nth-child(odd) { + background-color: #FFF +} +table.striped > tbody > tr > th, table.striped > tbody > tr > td { + border-left: 1px solid black; + border-right: 1px solid black; +} +table.striped > tbody > tr > th { + font-weight: normal; +} diff --git a/doc/0.1.4/en_public/type-search-index.js b/doc/0.1.4/en_public/type-search-index.js new file mode 100644 index 0000000..feeb60f --- /dev/null +++ b/doc/0.1.4/en_public/type-search-index.js @@ -0,0 +1 @@ +typeSearchIndex = [{"l":"All Classes","url":"allclasses-index.html"},{"p":"bitchanger.gui.views","l":"AlphaNumGridView"},{"p":"bitchanger.gui.controls","l":"AlphaNumKeys"},{"p":"bitchanger.gui.controller","l":"AlphaNumKeysController"},{"p":"bitchanger.util","l":"ArrayUtils"},{"p":"bitchanger.gui.controls","l":"BaseSpinner"},{"p":"bitchanger.gui.controls","l":"BasicMenuBar"},{"p":"bitchanger.gui.controller","l":"BasicMenuController"},{"p":"bitchanger.main","l":"BitchangerLauncher"},{"p":"bitchanger.calculations","l":"Calculable"},{"p":"bitchanger.gui.views","l":"CalculatorView"},{"p":"bitchanger.calculations","l":"ChangeableNumber"},{"p":"bitchanger.preferences","l":"Comma"},{"p":"bitchanger.gui.views","l":"AlphaNumGridView.ConstraintType"},{"p":"bitchanger.gui.controller","l":"Controllable"},{"p":"bitchanger.gui.controller","l":"ControllableApplication"},{"p":"bitchanger.gui.controller","l":"Controller"},{"p":"bitchanger.gui.controller","l":"ControllerBase"},{"p":"bitchanger.gui.controller","l":"ConverterController"},{"p":"bitchanger.gui.controls","l":"ConverterMenuBar"},{"p":"bitchanger.gui.controller","l":"ConverterMenuController"},{"p":"bitchanger.gui.views","l":"ConverterView"},{"p":"bitchanger.calculations","l":"ConvertingNumbers"},{"p":"bitchanger.util","l":"FXUtils"},{"p":"bitchanger.util","l":"IconFactory"},{"p":"bitchanger.gui.controller","l":"IEEEController"},{"p":"bitchanger.gui.controller","l":"IEEEMenuController"},{"p":"bitchanger.gui.views","l":"IEEEView"},{"p":"bitchanger.gui.controls","l":"InformationDialog"},{"p":"bitchanger.gui.controls","l":"InformationDialog.InformationType"},{"p":"bitchanger.preferences","l":"Preferences"},{"p":"bitchanger.main","l":"PrimaryFXApp"},{"p":"bitchanger.util","l":"Resources"},{"p":"bitchanger.calculations","l":"SimpleChangeableNumber"},{"p":"bitchanger.preferences","l":"Style"},{"p":"bitchanger.gui.controls","l":"SVGIcon"},{"p":"bitchanger.util","l":"TriConsumer"},{"p":"bitchanger.gui.controls","l":"UnfocusedButton"},{"p":"bitchanger.gui.controls","l":"ValueButton"},{"p":"bitchanger.gui.controls","l":"ValueField"},{"p":"bitchanger.gui.views","l":"Viewable"},{"p":"bitchanger.gui.views","l":"ViewBase"}] \ No newline at end of file diff --git a/doc/0.1.4/en_public/type-search-index.zip b/doc/0.1.4/en_public/type-search-index.zip new file mode 100644 index 0000000000000000000000000000000000000000..521709693c0bfaa89390c2b2cb4915ac08a325ae GIT binary patch literal 592 zcmWIWW@Zs#;Nak3C|V{F$bbaIfb5dWf>hn&)Wo9X4BgDUl++5ntm6E{w~8F=H)gN!VN!g+Ve-ea=fOE8Q-RGZ(*9XLUCx=Sz~ke6#p++l z9EVEoTf8n@KRwgfWzV^AUg6!i`5wper&fF(j+Z8GhtFb;<-ht!p(JoxOVRAA ze7lv)C4{crV86`}{otJ5+4xQCd+HlAx9@McwxG5o%y>ok)^m%T_nQBGy!_h5`@2m) zX7;vznY7+Y-A=OC&Ar4d;jg#o3c1^*i{iP%ZXb$Wv>>TeXZridTWoLtN8EoO$+vz> zwVUb=Df^#0y}rC)^m(}B>B)|uWh=az9)G)ZCG6zi4ZE%PbA9r3`F}zpY+CSK^`d9m z`g0qf9*CTM$Bfrh{K*1)L$?K~;)-m7Wq&8O?EdL*ixH#^74TGO;mj0_A_91IKr l-i%Bl42XC~mIK8*D!`r!0=!w-K|;1Degi004BR`)~jN literal 0 HcmV?d00001