From a314ac99ef252b2b98577ec8deb04c1102a67833 Mon Sep 17 00:00:00 2001 From: cp6 Date: Fri, 18 Feb 2022 15:48:32 +1100 Subject: [PATCH 001/135] Initial v2 commit Initial v2 commit Laravel project --- .editorconfig | 15 + .env.example | 49 + .gitattributes | 5 + .gitignore | 75 + .idea/.gitignore | 8 + .idea/blade.xml | 101 + .../Laravel_1_30_22__1_00_PM.xml | 3490 +++++++ .../frameworkDescriptionVersion1.1.4.xsd | 47 + .idea/dbnavigator.xml | 459 + .idea/deployment.xml | 70 + .idea/idlers.iml | 131 + .idea/inspectionProfiles/Project_Default.xml | 166 + .idea/laravel-idea.xml | 13 + .idea/laravel-plugin.xml | 6 + .idea/laravel-query-settings.xml | 14 + .idea/markdown.xml | 9 + .idea/modules.xml | 8 + .idea/php.xml | 126 + .idea/phpunit.xml | 11 + .idea/vcs.xml | 6 + .styleci.yml | 13 + .../Commands/CreateDatabaseCommand.php | 33 + app/Console/Kernel.php | 41 + app/Exceptions/Handler.php | 40 + app/Http/Controllers/AccountController.php | 26 + app/Http/Controllers/ApiController.php | 261 + .../Auth/AuthenticatedSessionController.php | 54 + .../Auth/ConfirmPasswordController.php | 40 + .../Auth/ConfirmablePasswordController.php | 44 + ...mailVerificationNotificationController.php | 27 + .../EmailVerificationPromptController.php | 23 + .../Auth/ForgotPasswordController.php | 22 + app/Http/Controllers/Auth/LoginController.php | 42 + .../Auth/NewPasswordController.php | 65 + .../Auth/PasswordResetLinkController.php | 47 + .../Controllers/Auth/RegisterController.php | 75 + .../Auth/RegisteredUserController.php | 60 + .../Auth/ResetPasswordController.php | 31 + .../Auth/VerificationController.php | 42 + .../Auth/VerifyEmailController.php | 30 + app/Http/Controllers/Controller.php | 13 + app/Http/Controllers/DNSController.php | 132 + app/Http/Controllers/DiskSpeedController.php | 29 + app/Http/Controllers/DomainsController.php | 174 + app/Http/Controllers/HomeController.php | 161 + app/Http/Controllers/LabelsController.php | 62 + app/Http/Controllers/LocationsController.php | 45 + app/Http/Controllers/MiscController.php | 130 + .../Controllers/NetworkSpeedController.php | 24 + app/Http/Controllers/PricingController.php | 19 + app/Http/Controllers/ProvidersController.php | 62 + app/Http/Controllers/ResellerController.php | 217 + app/Http/Controllers/ServerController.php | 306 + app/Http/Controllers/SettingsController.php | 56 + app/Http/Controllers/SharedController.php | 216 + app/Http/Controllers/YabsController.php | 140 + app/Http/Kernel.php | 71 + app/Http/Middleware/Authenticate.php | 21 + app/Http/Middleware/EncryptCookies.php | 17 + .../PreventRequestsDuringMaintenance.php | 17 + .../Middleware/RedirectIfAuthenticated.php | 32 + app/Http/Middleware/TrimStrings.php | 18 + app/Http/Middleware/TrustHosts.php | 20 + app/Http/Middleware/TrustProxies.php | 28 + app/Http/Middleware/VerifyCsrfToken.php | 17 + app/Http/Requests/Auth/LoginRequest.php | 93 + app/Models/DNS.php | 17 + app/Models/DiskSpeed.php | 15 + app/Models/Domains.php | 15 + app/Models/Labels.php | 27 + app/Models/Locations.php | 15 + app/Models/Misc.php | 17 + app/Models/NetworkSpeed.php | 15 + app/Models/OS.php | 13 + app/Models/Pricing.php | 78 + app/Models/Providers.php | 15 + app/Models/Reseller.php | 17 + app/Models/Server.php | 153 + app/Models/Settings.php | 13 + app/Models/Shared.php | 17 + app/Models/User.php | 44 + app/Models/Yabs.php | 17 + app/Process.php | 353 + app/Providers/AppServiceProvider.php | 28 + app/Providers/AuthServiceProvider.php | 30 + app/Providers/BroadcastServiceProvider.php | 21 + app/Providers/EventServiceProvider.php | 32 + app/Providers/RouteServiceProvider.php | 63 + app/View/Components/AppLayout.php | 18 + app/View/Components/CurrencySelect.php | 19 + app/View/Components/GuestLayout.php | 18 + app/View/Components/LabelsSelect.php | 21 + app/View/Components/LocationsSelect.php | 21 + app/View/Components/PricingSelect.php | 28 + app/View/Components/ProvidersSelect.php | 22 + app/View/Components/TermSelect.php | 28 + artisan | 53 + assets/css/all.min.css | 5 - assets/css/style.css | 1569 --- assets/favicon.ico | Bin 12862 -> 0 bytes assets/js/bootstrap.min.js | 2 - assets/js/jquery.min.js | 1 - assets/js/scripts.min.js | 556 -- bootstrap/app.php | 55 + bootstrap/cache/.gitignore | 2 + calls.php | 100 - class.php | 3849 -------- composer.json | 67 + composer.lock | 7943 +++++++++++++++ config/app.php | 235 + config/auth.php | 122 + config/broadcasting.php | 64 + config/cache.php | 106 + config/cors.php | 34 + config/custom.php | 1 + config/database.php | 147 + config/datatables.php | 122 + config/filesystems.php | 72 + config/hashing.php | 52 + config/logging.php | 104 + config/mail.php | 110 + config/queue.php | 89 + config/services.php | 33 + config/session.php | 201 + config/view.php | 36 + database/.gitignore | 2 + database/factories/DNSFactory.php | 23 + database/factories/DomainsFactory.php | 32 + database/factories/ServerFactory.php | 52 + database/factories/UserFactory.php | 35 + .../2014_10_12_000000_create_users_table.php | 37 + ...12_100000_create_password_resets_table.php | 32 + ..._08_19_000000_create_failed_jobs_table.php | 36 + .../2021_02_09_071732_create_crud_table.php | 36 + ...2021_02_10_122904_create_servers_table.php | 53 + ...22_01_30_112059_create_providers_table.php | 32 + ...22_01_30_112350_create_locations_table.php | 32 + .../2022_02_01_031629_create_os_table.php | 32 + ...2022_02_01_233932_create_domains_table.php | 39 + .../2022_02_02_005352_create_d_n_s_table.php | 38 + .../2022_02_03_035702_create_labels_table.php | 32 + ...2022_02_03_040140_create_shareds_table.php | 49 + ...22_02_03_040152_create_resellers_table.php | 50 + .../2022_02_05_104355_create_yabs_table.php | 47 + ...2_02_05_104551_create_disk_speed_table.php | 42 + ...2_05_104919_create_network_speed_table.php | 37 + ...2022_02_05_105219_create_pricing_table.php | 39 + ...08_010323_create_labels_assigned_table.php | 31 + ...022_02_09_032438_create_settings_table.php | 39 + .../2022_02_11_022150_create_miscs_table.php | 34 + database/seeders/DatabaseSeeder.php | 27 + database/seeders/DomainsSeeder.php | 71 + database/seeders/LabelsSeeder.php | 79 + database/seeders/LocationsSeeder.php | 275 + database/seeders/OsSeeder.php | 51 + database/seeders/ProvidersSeeder.php | 120 + database/seeders/ServersSeeder.php | 92 + database/seeders/SettingsSeeder.php | 34 + database/seeders/SharedSeeder.php | 35 + index.php | 4 - my_idlers.sql | 400 - package-lock.json | 8485 +++++++++++++++++ package.json | 32 + phpunit.xml | 31 + public/.htaccess | 21 + public/css/app.css | Bin 0 -> 31403 bytes public/css/bootstrap.min.css | Bin 0 -> 163873 bytes public/css/datatables.bootstrap.min.css | Bin 0 -> 8144 bytes public/css/fa.min.css | Bin 0 -> 59306 bytes public/favicon.ico | 0 public/index.php | 55 + public/js/addService.js | Bin 0 -> 159 bytes public/js/app.js | Bin 0 -> 1258307 bytes public/js/bootstrap.min.js | Bin 0 -> 59220 bytes public/js/datatables.bootstrap5.min.js | Bin 0 -> 4496 bytes public/js/datatables.min.js | Bin 0 -> 91086 bytes public/js/jquery.min.js | Bin 0 -> 89501 bytes public/mix-manifest.json | 4 + public/robots.txt | 2 + public/web.config | 28 + {assets => public}/webfonts/fa-brands-400.eot | Bin {assets => public}/webfonts/fa-brands-400.svg | 0 {assets => public}/webfonts/fa-brands-400.ttf | Bin .../webfonts/fa-brands-400.woff | Bin .../webfonts/fa-brands-400.woff2 | Bin {assets => public}/webfonts/fa-solid-900.eot | Bin {assets => public}/webfonts/fa-solid-900.svg | 0 {assets => public}/webfonts/fa-solid-900.ttf | Bin {assets => public}/webfonts/fa-solid-900.woff | Bin .../webfonts/fa-solid-900.woff2 | Bin public/yabsFromForm.txt | 63 + resources/css/app.css | 3 + resources/js/app.js | 6 + resources/js/bootstrap.js | 32 + resources/js/components/ExampleComponent.vue | 23 + resources/lang/en/auth.php | 20 + resources/lang/en/pagination.php | 19 + resources/lang/en/passwords.php | 22 + resources/lang/en/validation.php | 152 + resources/sass/_variables.scss | 7 + resources/sass/app.scss | 8 + resources/views/account/index.blade.php | 61 + .../views/auth/confirm-password.blade.php | 36 + .../views/auth/forgot-password.blade.php | 36 + resources/views/auth/login.blade.php | 44 + .../views/auth/passwords/confirm.blade.php | 49 + .../views/auth/passwords/email.blade.php | 47 + .../views/auth/passwords/reset.blade.php | 65 + resources/views/auth/register.blade.php | 60 + resources/views/auth/reset-password.blade.php | 48 + resources/views/auth/verify-email.blade.php | 39 + resources/views/auth/verify.blade.php | 28 + .../components/application-logo.blade.php | 3 + .../views/components/auth-card.blade.php | 12 + .../components/auth-session-status.blade.php | 7 + .../auth-validation-errors.blade.php | 15 + .../views/components/back-button.blade.php | 1 + resources/views/components/button.blade.php | 3 + resources/views/components/card.blade.php | 5 + .../views/components/cont-card.blade.php | 7 + .../components/currency-select.blade.php | 12 + .../components/datatables-assets.blade.php | 3 + .../views/components/date-input.blade.php | 5 + .../components/delete-confirm-modal.blade.php | 39 + .../components/disk-type-select.blade.php | 6 + .../views/components/dropdown-link.blade.php | 1 + resources/views/components/dropdown.blade.php | 43 + .../views/components/errors-alert.blade.php | 9 + .../views/components/form-style.blade.php | 42 + resources/views/components/input.blade.php | 3 + resources/views/components/label.blade.php | 5 + .../views/components/labels-select.blade.php | 11 + .../components/locations-select.blade.php | 10 + .../views/components/login-card.blade.php | 18 + .../components/modal-delete-script.blade.php | 19 + .../views/components/modal-style.blade.php | 32 + resources/views/components/nav-link.blade.php | 13 + .../views/components/number-input.blade.php | 5 + .../views/components/pricing-select.blade.php | 3 + .../components/providers-select.blade.php | 10 + .../components/ram-type-select.blade.php | 6 + .../components/responsive-nav-link.blade.php | 11 + .../views/components/submit-button.blade.php | 4 + .../views/components/success-alert.blade.php | 5 + .../views/components/term-select.blade.php | 11 + .../views/components/text-input.blade.php | 5 + .../views/components/yes-no-select.blade.php | 6 + resources/views/dashboard.blade.php | 17 + resources/views/dns/create.blade.php | 133 + resources/views/dns/edit.blade.php | 149 + resources/views/dns/index.blade.php | 66 + resources/views/dns/show.blade.php | 64 + resources/views/domains/create.blade.php | 137 + resources/views/domains/edit.blade.php | 162 + resources/views/domains/index.blade.php | 73 + resources/views/domains/show.blade.php | 84 + resources/views/errors/404.blade.php | 45 + resources/views/home.blade.php | 256 + resources/views/labels/create.blade.php | 36 + resources/views/labels/index.blade.php | 77 + resources/views/labels/show.blade.php | 32 + resources/views/layouts/app.blade.php | 45 + resources/views/layouts/guest.blade.php | 22 + resources/views/layouts/navigation.blade.php | 64 + resources/views/locations/create.blade.php | 36 + resources/views/locations/index.blade.php | 72 + resources/views/misc/create.blade.php | 71 + resources/views/misc/edit.blade.php | 78 + resources/views/misc/index.blade.php | 72 + resources/views/misc/show.blade.php | 64 + resources/views/providers/create.blade.php | 36 + resources/views/providers/index.blade.php | 70 + resources/views/reseller/create.blade.php | 209 + resources/views/reseller/edit.blade.php | 273 + resources/views/reseller/index.blade.php | 98 + resources/views/reseller/show.blade.php | 143 + .../views/servers/choose-compare.blade.php | 74 + resources/views/servers/compare.blade.php | 246 + resources/views/servers/create.blade.php | 275 + resources/views/servers/edit.blade.php | 284 + resources/views/servers/index.blade.php | 145 + .../views/servers/public-index.blade.php | 98 + resources/views/servers/show.blade.php | 186 + resources/views/settings/index.blade.php | 171 + resources/views/shared/create.blade.php | 203 + resources/views/shared/edit.blade.php | 273 + resources/views/shared/index.blade.php | 98 + resources/views/shared/show.blade.php | 139 + resources/views/welcome.blade.php | 132 + resources/views/yabs/create.blade.php | 46 + resources/views/yabs/index.blade.php | 87 + resources/views/yabs/show.blade.php | 134 + routes/api.php | 66 + routes/auth.php | 64 + routes/channels.php | 18 + routes/console.php | 19 + routes/web.php | 69 + server.php | 21 + storage/app/.gitignore | 3 + storage/app/public/.gitignore | 2 + storage/framework/.gitignore | 9 + storage/framework/cache/.gitignore | 3 + storage/framework/cache/data/.gitignore | 2 + storage/framework/sessions/.gitignore | 2 + storage/framework/testing/.gitignore | 2 + storage/framework/views/.gitignore | 2 + storage/logs/.gitignore | 2 + tailwind.config.js | 19 + tests/CreatesApplication.php | 22 + tests/Feature/Auth/AuthenticationTest.php | 45 + tests/Feature/Auth/EmailVerificationTest.php | 65 + .../Feature/Auth/PasswordConfirmationTest.php | 44 + tests/Feature/Auth/PasswordResetTest.php | 71 + tests/Feature/Auth/RegistrationTest.php | 32 + tests/Feature/AuthenticationTest.php | 45 + tests/Feature/EmailVerificationTest.php | 65 + tests/Feature/ExampleTest.php | 21 + tests/Feature/PasswordConfirmationTest.php | 44 + tests/Feature/PasswordResetTest.php | 71 + tests/Feature/RegistrationTest.php | 32 + tests/TestCase.php | 10 + tests/Unit/ExampleTest.php | 18 + update1.3to1.4.sql | 2 - webpack.mix.js | 18 + yabs/index.php | 1 - 325 files changed, 36575 insertions(+), 6489 deletions(-) create mode 100644 .editorconfig create mode 100644 .env.example create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .idea/.gitignore create mode 100644 .idea/blade.xml create mode 100644 .idea/commandlinetools/Laravel_1_30_22__1_00_PM.xml create mode 100644 .idea/commandlinetools/schemas/frameworkDescriptionVersion1.1.4.xsd create mode 100644 .idea/dbnavigator.xml create mode 100644 .idea/deployment.xml create mode 100644 .idea/idlers.iml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/laravel-idea.xml create mode 100644 .idea/laravel-plugin.xml create mode 100644 .idea/laravel-query-settings.xml create mode 100644 .idea/markdown.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/php.xml create mode 100644 .idea/phpunit.xml create mode 100644 .idea/vcs.xml create mode 100644 .styleci.yml create mode 100644 app/Console/Commands/CreateDatabaseCommand.php create mode 100644 app/Console/Kernel.php create mode 100644 app/Exceptions/Handler.php create mode 100644 app/Http/Controllers/AccountController.php create mode 100644 app/Http/Controllers/ApiController.php create mode 100644 app/Http/Controllers/Auth/AuthenticatedSessionController.php create mode 100644 app/Http/Controllers/Auth/ConfirmPasswordController.php create mode 100644 app/Http/Controllers/Auth/ConfirmablePasswordController.php create mode 100644 app/Http/Controllers/Auth/EmailVerificationNotificationController.php create mode 100644 app/Http/Controllers/Auth/EmailVerificationPromptController.php create mode 100644 app/Http/Controllers/Auth/ForgotPasswordController.php create mode 100644 app/Http/Controllers/Auth/LoginController.php create mode 100644 app/Http/Controllers/Auth/NewPasswordController.php create mode 100644 app/Http/Controllers/Auth/PasswordResetLinkController.php create mode 100644 app/Http/Controllers/Auth/RegisterController.php create mode 100644 app/Http/Controllers/Auth/RegisteredUserController.php create mode 100644 app/Http/Controllers/Auth/ResetPasswordController.php create mode 100644 app/Http/Controllers/Auth/VerificationController.php create mode 100644 app/Http/Controllers/Auth/VerifyEmailController.php create mode 100644 app/Http/Controllers/Controller.php create mode 100644 app/Http/Controllers/DNSController.php create mode 100644 app/Http/Controllers/DiskSpeedController.php create mode 100644 app/Http/Controllers/DomainsController.php create mode 100644 app/Http/Controllers/HomeController.php create mode 100644 app/Http/Controllers/LabelsController.php create mode 100644 app/Http/Controllers/LocationsController.php create mode 100644 app/Http/Controllers/MiscController.php create mode 100644 app/Http/Controllers/NetworkSpeedController.php create mode 100644 app/Http/Controllers/PricingController.php create mode 100644 app/Http/Controllers/ProvidersController.php create mode 100644 app/Http/Controllers/ResellerController.php create mode 100644 app/Http/Controllers/ServerController.php create mode 100644 app/Http/Controllers/SettingsController.php create mode 100644 app/Http/Controllers/SharedController.php create mode 100644 app/Http/Controllers/YabsController.php create mode 100644 app/Http/Kernel.php create mode 100644 app/Http/Middleware/Authenticate.php create mode 100644 app/Http/Middleware/EncryptCookies.php create mode 100644 app/Http/Middleware/PreventRequestsDuringMaintenance.php create mode 100644 app/Http/Middleware/RedirectIfAuthenticated.php create mode 100644 app/Http/Middleware/TrimStrings.php create mode 100644 app/Http/Middleware/TrustHosts.php create mode 100644 app/Http/Middleware/TrustProxies.php create mode 100644 app/Http/Middleware/VerifyCsrfToken.php create mode 100644 app/Http/Requests/Auth/LoginRequest.php create mode 100644 app/Models/DNS.php create mode 100644 app/Models/DiskSpeed.php create mode 100644 app/Models/Domains.php create mode 100644 app/Models/Labels.php create mode 100644 app/Models/Locations.php create mode 100644 app/Models/Misc.php create mode 100644 app/Models/NetworkSpeed.php create mode 100644 app/Models/OS.php create mode 100644 app/Models/Pricing.php create mode 100644 app/Models/Providers.php create mode 100644 app/Models/Reseller.php create mode 100644 app/Models/Server.php create mode 100644 app/Models/Settings.php create mode 100644 app/Models/Shared.php create mode 100644 app/Models/User.php create mode 100644 app/Models/Yabs.php create mode 100644 app/Process.php create mode 100644 app/Providers/AppServiceProvider.php create mode 100644 app/Providers/AuthServiceProvider.php create mode 100644 app/Providers/BroadcastServiceProvider.php create mode 100644 app/Providers/EventServiceProvider.php create mode 100644 app/Providers/RouteServiceProvider.php create mode 100644 app/View/Components/AppLayout.php create mode 100644 app/View/Components/CurrencySelect.php create mode 100644 app/View/Components/GuestLayout.php create mode 100644 app/View/Components/LabelsSelect.php create mode 100644 app/View/Components/LocationsSelect.php create mode 100644 app/View/Components/PricingSelect.php create mode 100644 app/View/Components/ProvidersSelect.php create mode 100644 app/View/Components/TermSelect.php create mode 100644 artisan delete mode 100644 assets/css/all.min.css delete mode 100644 assets/css/style.css delete mode 100644 assets/favicon.ico delete mode 100644 assets/js/bootstrap.min.js delete mode 100644 assets/js/jquery.min.js delete mode 100644 assets/js/scripts.min.js create mode 100644 bootstrap/app.php create mode 100644 bootstrap/cache/.gitignore delete mode 100644 calls.php delete mode 100644 class.php create mode 100644 composer.json create mode 100644 composer.lock create mode 100644 config/app.php create mode 100644 config/auth.php create mode 100644 config/broadcasting.php create mode 100644 config/cache.php create mode 100644 config/cors.php create mode 100644 config/custom.php create mode 100644 config/database.php create mode 100644 config/datatables.php create mode 100644 config/filesystems.php create mode 100644 config/hashing.php create mode 100644 config/logging.php create mode 100644 config/mail.php create mode 100644 config/queue.php create mode 100644 config/services.php create mode 100644 config/session.php create mode 100644 config/view.php create mode 100644 database/.gitignore create mode 100644 database/factories/DNSFactory.php create mode 100644 database/factories/DomainsFactory.php create mode 100644 database/factories/ServerFactory.php create mode 100644 database/factories/UserFactory.php create mode 100644 database/migrations/2014_10_12_000000_create_users_table.php create mode 100644 database/migrations/2014_10_12_100000_create_password_resets_table.php create mode 100644 database/migrations/2019_08_19_000000_create_failed_jobs_table.php create mode 100644 database/migrations/2021_02_09_071732_create_crud_table.php create mode 100644 database/migrations/2021_02_10_122904_create_servers_table.php create mode 100644 database/migrations/2022_01_30_112059_create_providers_table.php create mode 100644 database/migrations/2022_01_30_112350_create_locations_table.php create mode 100644 database/migrations/2022_02_01_031629_create_os_table.php create mode 100644 database/migrations/2022_02_01_233932_create_domains_table.php create mode 100644 database/migrations/2022_02_02_005352_create_d_n_s_table.php create mode 100644 database/migrations/2022_02_03_035702_create_labels_table.php create mode 100644 database/migrations/2022_02_03_040140_create_shareds_table.php create mode 100644 database/migrations/2022_02_03_040152_create_resellers_table.php create mode 100644 database/migrations/2022_02_05_104355_create_yabs_table.php create mode 100644 database/migrations/2022_02_05_104551_create_disk_speed_table.php create mode 100644 database/migrations/2022_02_05_104919_create_network_speed_table.php create mode 100644 database/migrations/2022_02_05_105219_create_pricing_table.php create mode 100644 database/migrations/2022_02_08_010323_create_labels_assigned_table.php create mode 100644 database/migrations/2022_02_09_032438_create_settings_table.php create mode 100644 database/migrations/2022_02_11_022150_create_miscs_table.php create mode 100644 database/seeders/DatabaseSeeder.php create mode 100644 database/seeders/DomainsSeeder.php create mode 100644 database/seeders/LabelsSeeder.php create mode 100644 database/seeders/LocationsSeeder.php create mode 100644 database/seeders/OsSeeder.php create mode 100644 database/seeders/ProvidersSeeder.php create mode 100644 database/seeders/ServersSeeder.php create mode 100644 database/seeders/SettingsSeeder.php create mode 100644 database/seeders/SharedSeeder.php delete mode 100644 index.php delete mode 100644 my_idlers.sql create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 phpunit.xml create mode 100644 public/.htaccess create mode 100644 public/css/app.css create mode 100644 public/css/bootstrap.min.css create mode 100644 public/css/datatables.bootstrap.min.css create mode 100644 public/css/fa.min.css create mode 100644 public/favicon.ico create mode 100644 public/index.php create mode 100644 public/js/addService.js create mode 100644 public/js/app.js create mode 100644 public/js/bootstrap.min.js create mode 100644 public/js/datatables.bootstrap5.min.js create mode 100644 public/js/datatables.min.js create mode 100644 public/js/jquery.min.js create mode 100644 public/mix-manifest.json create mode 100644 public/robots.txt create mode 100644 public/web.config rename {assets => public}/webfonts/fa-brands-400.eot (100%) rename {assets => public}/webfonts/fa-brands-400.svg (100%) rename {assets => public}/webfonts/fa-brands-400.ttf (100%) rename {assets => public}/webfonts/fa-brands-400.woff (100%) rename {assets => public}/webfonts/fa-brands-400.woff2 (100%) rename {assets => public}/webfonts/fa-solid-900.eot (100%) rename {assets => public}/webfonts/fa-solid-900.svg (100%) rename {assets => public}/webfonts/fa-solid-900.ttf (100%) rename {assets => public}/webfonts/fa-solid-900.woff (100%) rename {assets => public}/webfonts/fa-solid-900.woff2 (100%) create mode 100644 public/yabsFromForm.txt create mode 100644 resources/css/app.css create mode 100644 resources/js/app.js create mode 100644 resources/js/bootstrap.js create mode 100644 resources/js/components/ExampleComponent.vue create mode 100644 resources/lang/en/auth.php create mode 100644 resources/lang/en/pagination.php create mode 100644 resources/lang/en/passwords.php create mode 100644 resources/lang/en/validation.php create mode 100644 resources/sass/_variables.scss create mode 100644 resources/sass/app.scss create mode 100644 resources/views/account/index.blade.php create mode 100644 resources/views/auth/confirm-password.blade.php create mode 100644 resources/views/auth/forgot-password.blade.php create mode 100644 resources/views/auth/login.blade.php create mode 100644 resources/views/auth/passwords/confirm.blade.php create mode 100644 resources/views/auth/passwords/email.blade.php create mode 100644 resources/views/auth/passwords/reset.blade.php create mode 100644 resources/views/auth/register.blade.php create mode 100644 resources/views/auth/reset-password.blade.php create mode 100644 resources/views/auth/verify-email.blade.php create mode 100644 resources/views/auth/verify.blade.php create mode 100644 resources/views/components/application-logo.blade.php create mode 100644 resources/views/components/auth-card.blade.php create mode 100644 resources/views/components/auth-session-status.blade.php create mode 100644 resources/views/components/auth-validation-errors.blade.php create mode 100644 resources/views/components/back-button.blade.php create mode 100644 resources/views/components/button.blade.php create mode 100644 resources/views/components/card.blade.php create mode 100644 resources/views/components/cont-card.blade.php create mode 100644 resources/views/components/currency-select.blade.php create mode 100644 resources/views/components/datatables-assets.blade.php create mode 100644 resources/views/components/date-input.blade.php create mode 100644 resources/views/components/delete-confirm-modal.blade.php create mode 100644 resources/views/components/disk-type-select.blade.php create mode 100644 resources/views/components/dropdown-link.blade.php create mode 100644 resources/views/components/dropdown.blade.php create mode 100644 resources/views/components/errors-alert.blade.php create mode 100644 resources/views/components/form-style.blade.php create mode 100644 resources/views/components/input.blade.php create mode 100644 resources/views/components/label.blade.php create mode 100644 resources/views/components/labels-select.blade.php create mode 100644 resources/views/components/locations-select.blade.php create mode 100644 resources/views/components/login-card.blade.php create mode 100644 resources/views/components/modal-delete-script.blade.php create mode 100644 resources/views/components/modal-style.blade.php create mode 100644 resources/views/components/nav-link.blade.php create mode 100644 resources/views/components/number-input.blade.php create mode 100644 resources/views/components/pricing-select.blade.php create mode 100644 resources/views/components/providers-select.blade.php create mode 100644 resources/views/components/ram-type-select.blade.php create mode 100644 resources/views/components/responsive-nav-link.blade.php create mode 100644 resources/views/components/submit-button.blade.php create mode 100644 resources/views/components/success-alert.blade.php create mode 100644 resources/views/components/term-select.blade.php create mode 100644 resources/views/components/text-input.blade.php create mode 100644 resources/views/components/yes-no-select.blade.php create mode 100644 resources/views/dashboard.blade.php create mode 100644 resources/views/dns/create.blade.php create mode 100644 resources/views/dns/edit.blade.php create mode 100644 resources/views/dns/index.blade.php create mode 100644 resources/views/dns/show.blade.php create mode 100644 resources/views/domains/create.blade.php create mode 100644 resources/views/domains/edit.blade.php create mode 100644 resources/views/domains/index.blade.php create mode 100644 resources/views/domains/show.blade.php create mode 100644 resources/views/errors/404.blade.php create mode 100644 resources/views/home.blade.php create mode 100644 resources/views/labels/create.blade.php create mode 100644 resources/views/labels/index.blade.php create mode 100644 resources/views/labels/show.blade.php create mode 100644 resources/views/layouts/app.blade.php create mode 100644 resources/views/layouts/guest.blade.php create mode 100644 resources/views/layouts/navigation.blade.php create mode 100644 resources/views/locations/create.blade.php create mode 100644 resources/views/locations/index.blade.php create mode 100644 resources/views/misc/create.blade.php create mode 100644 resources/views/misc/edit.blade.php create mode 100644 resources/views/misc/index.blade.php create mode 100644 resources/views/misc/show.blade.php create mode 100644 resources/views/providers/create.blade.php create mode 100644 resources/views/providers/index.blade.php create mode 100644 resources/views/reseller/create.blade.php create mode 100644 resources/views/reseller/edit.blade.php create mode 100644 resources/views/reseller/index.blade.php create mode 100644 resources/views/reseller/show.blade.php create mode 100644 resources/views/servers/choose-compare.blade.php create mode 100644 resources/views/servers/compare.blade.php create mode 100644 resources/views/servers/create.blade.php create mode 100644 resources/views/servers/edit.blade.php create mode 100644 resources/views/servers/index.blade.php create mode 100644 resources/views/servers/public-index.blade.php create mode 100644 resources/views/servers/show.blade.php create mode 100644 resources/views/settings/index.blade.php create mode 100644 resources/views/shared/create.blade.php create mode 100644 resources/views/shared/edit.blade.php create mode 100644 resources/views/shared/index.blade.php create mode 100644 resources/views/shared/show.blade.php create mode 100644 resources/views/welcome.blade.php create mode 100644 resources/views/yabs/create.blade.php create mode 100644 resources/views/yabs/index.blade.php create mode 100644 resources/views/yabs/show.blade.php create mode 100644 routes/api.php create mode 100644 routes/auth.php create mode 100644 routes/channels.php create mode 100644 routes/console.php create mode 100644 routes/web.php create mode 100644 server.php create mode 100644 storage/app/.gitignore create mode 100644 storage/app/public/.gitignore create mode 100644 storage/framework/.gitignore create mode 100644 storage/framework/cache/.gitignore create mode 100644 storage/framework/cache/data/.gitignore create mode 100644 storage/framework/sessions/.gitignore create mode 100644 storage/framework/testing/.gitignore create mode 100644 storage/framework/views/.gitignore create mode 100644 storage/logs/.gitignore create mode 100644 tailwind.config.js create mode 100644 tests/CreatesApplication.php create mode 100644 tests/Feature/Auth/AuthenticationTest.php create mode 100644 tests/Feature/Auth/EmailVerificationTest.php create mode 100644 tests/Feature/Auth/PasswordConfirmationTest.php create mode 100644 tests/Feature/Auth/PasswordResetTest.php create mode 100644 tests/Feature/Auth/RegistrationTest.php create mode 100644 tests/Feature/AuthenticationTest.php create mode 100644 tests/Feature/EmailVerificationTest.php create mode 100644 tests/Feature/ExampleTest.php create mode 100644 tests/Feature/PasswordConfirmationTest.php create mode 100644 tests/Feature/PasswordResetTest.php create mode 100644 tests/Feature/RegistrationTest.php create mode 100644 tests/TestCase.php create mode 100644 tests/Unit/ExampleTest.php delete mode 100644 update1.3to1.4.sql create mode 100644 webpack.mix.js delete mode 100644 yabs/index.php diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..6537ca4 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,15 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +indent_style = space +indent_size = 4 +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false + +[*.{yml,yaml}] +indent_size = 2 diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..7ea8753 --- /dev/null +++ b/.env.example @@ -0,0 +1,49 @@ +APP_NAME=MyIdlers +APP_ENV=local +APP_KEY= +APP_DEBUG=true +APP_URL=http://localhost + +LOG_CHANNEL=stack +LOG_LEVEL=debug + +DB_CONNECTION=mysql +DB_HOST=127.0.0.1 +DB_PORT=3306 +DB_DATABASE=my_idlers +DB_USERNAME=root +DB_PASSWORD= + +BROADCAST_DRIVER=log +CACHE_DRIVER=file +QUEUE_CONNECTION=sync +SESSION_DRIVER=file +SESSION_LIFETIME=120 + +MEMCACHED_HOST=127.0.0.1 + +REDIS_HOST=127.0.0.1 +REDIS_PASSWORD=null +REDIS_PORT=6379 + +MAIL_MAILER=smtp +MAIL_HOST=mailhog +MAIL_PORT=1025 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_ENCRYPTION=null +MAIL_FROM_ADDRESS=null +MAIL_FROM_NAME="${APP_NAME}" + +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +AWS_DEFAULT_REGION=us-east-1 +AWS_BUCKET= + +PUSHER_APP_ID= +PUSHER_APP_KEY= +PUSHER_APP_SECRET= +PUSHER_APP_CLUSTER=mt1 + +MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" +MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..967315d --- /dev/null +++ b/.gitattributes @@ -0,0 +1,5 @@ +* text=auto +*.css linguist-vendored +*.scss linguist-vendored +*.js linguist-vendored +CHANGELOG.md export-ignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7acef30 --- /dev/null +++ b/.gitignore @@ -0,0 +1,75 @@ +### Laravel ### +vendor/ +node_modules/ +npm-debug.log + +# Laravel 4 specific +bootstrap/compiled.php +app/storage/ + +# Laravel 5 & Lumen specific +public/storage +public/hot +storage/*.key +.env.*.php +.env.php +.env +Homestead.yaml +Homestead.json + +# Rocketeer PHP task runner and deployment package. https://github.com/rocketeers/rocketeer +.rocketeer/ + +# Created by https://www.gitignore.io/api/phpstorm + +### PhpStorm ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff: +.idea/**/workspace.xml +.idea/**/tasks.xml + +# Sensitive or high-churn files: +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.xml +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml + +# Gradle: +.idea/**/gradle.xml +.idea/**/libraries + +# Mongo Explorer plugin: +.idea/**/mongoSettings.xml + +## File-based project format: +*.iws + +## Plugin-specific files: + +# IntelliJ +/out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +### PhpStorm Patch ### +# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 + +# *.iml +# modules.xml +# .idea/misc.xml +# *.ipr diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/blade.xml b/.idea/blade.xml new file mode 100644 index 0000000..083cb65 --- /dev/null +++ b/.idea/blade.xml @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/commandlinetools/Laravel_1_30_22__1_00_PM.xml b/.idea/commandlinetools/Laravel_1_30_22__1_00_PM.xml new file mode 100644 index 0000000..1e4b806 --- /dev/null +++ b/.idea/commandlinetools/Laravel_1_30_22__1_00_PM.xml @@ -0,0 +1,3490 @@ + + + + + _complete +
Options:
--shell(-s)The shell type ("bash")
--input(-i)An array of input tokens (e.g. COMP_WORDS or argv)
--current(-c)The index of the "input" array that the cursor is in (e.g. COMP_CWORD)
--symfony(-S)The version of the completion script
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + + + + + +
+ + clear-compiled +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + +
+ + completion + completion command dumps the shell completion script required
to use shell autocompletion (currently only bash completion is supported).

Static installation
-------------------

Dump the script to a global completion file and restart your shell:

C:/laragon/www/idlers/artisan completion bash | sudo tee /etc/bash_completion.d/artisan

Or dump the script to a local file and source it:

C:/laragon/www/idlers/artisan completion bash > completion.sh

# source the file whenever you use the project
source completion.sh

# or add this line at the end of your "~/.bashrc" file:
source /path/to/completion.sh

Dynamic installation
--------------------

Add this add the end of your shell configuration file (e.g. "~/.bashrc"):

eval "$(C:\laragon\www\idlers\artisan completion bash)"

Options:
--debugTail the completion debug log
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ shell[=null] + + + command]]> + + + + + + + + + +
+ + db +
Options:
--readConnect to the read connection
--writeConnect to the write connection
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ connection[=null] + + + +
command]]> + + + + + + + + + + + + down +
Options:
--redirectThe path that users should be redirected to
--renderThe view that should be prerendered for display during maintenance mode
--retryThe number of seconds after which the request may be retried
--refreshThe number of seconds after which the browser may refresh
--secretThe secret phrase that may be used to bypass maintenance mode
--statusThe status code that should be used when returning the maintenance mode response
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + +
command]]> + + + + + + + + + + + + env +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + +
+ + help + help command displays help for a given command:

C:/laragon/www/idlers/artisan help list

You can also output the help in other formats by using the --format option:

C:/laragon/www/idlers/artisan help --format=xml list

To display the list of available commands, please use the list command.

Options:
--formatThe output format (txt, xml, json, or md)
--rawTo output raw command help
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ command_name[=null] + + + + + + + + + + + + +
+ + inspire +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + +
+ + list + list command lists all commands:

C:/laragon/www/idlers/artisan list

You can also display the commands for a specific namespace:

C:/laragon/www/idlers/artisan list test

You can also output the information in other formats by using the --format option:

C:/laragon/www/idlers/artisan list --format=xml

It's also possible to get raw list of commands (useful for embedding command runner):

C:/laragon/www/idlers/artisan list --raw

Options:
--rawTo output raw command list
--formatThe output format (txt, xml, json, or md)
--shortTo skip describing commands' arguments
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ namespace[=null] + + + + + + + + + + + + + +
+ + migrate +
Options:
--databaseThe database connection to use
--forceForce the operation to run when in production
--pathThe path(s) to the migrations files to be executed
--realpathIndicate any provided migration file paths are pre-resolved absolute paths
--schema-pathThe path to a schema dump file
--pretendDump the SQL queries that would be run
--seedIndicates if the seed task should be re-run
--stepForce the migrations to be run so they can be rolled back individually
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + + + + + + + + + +
+ + optimize +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + +
+ + serve +
Options:
--hostThe host address to serve the application on
--portThe port to serve the application on
--triesThe max number of ports to attempt to serve from
--no-reloadDo not reload the development server on .env file changes
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + + + + + +
+ + test +
Options:
--without-ttyDisable output to TTY
--parallel(-p)Indicates if the tests should run in parallel
--recreate-databasesIndicates if the test databases should be re-created
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + + + + +
+ + tinker +
Options:
--executeExecute the given code using Tinker
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ include[=null] + + + + + + + + + + + +
+ + up +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + +
+ + auth:clear-resets +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ name[=null] + + + + + + + + + + +
+ + breeze:install +
Options:
--inertiaIndicate that the Vue Inertia stack should be installed (Deprecated)
--pestIndicate that Pest should be installed
--composerAbsolute path to the Composer binary which should be used to install packages
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ stack[=null] + + + + + + + + + + + + + +
+ + cache:clear +
Options:
--tagsThe cache tags you would like to clear
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ store[=null] + + + + + + + + + + + +
+ + cache:forget +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ key store[=null] + + + + + + + + + + +
+ + cache:table +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + +
+ + config:cache +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + +
+ + config:clear +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + +
+ + db:seed +
Options:
--classThe class name of the root seeder
--databaseThe database connection to seed
--forceForce the operation to run when in production
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ class[=null] + + + + + + + + + + + + + +
+ + db:wipe +
Options:
--databaseThe database connection to use
--drop-viewsDrop all tables and views
--drop-typesDrop all tables and types (Postgres only)
--forceForce the operation to run when in production
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + + + + + +
+ + event:cache +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + +
+ + event:clear +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + +
+ + event:generate +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + +
+ + event:list +
Options:
--eventFilter the events by name
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + + +
+ + key:generate +
Options:
--showDisplay the key instead of modifying files
--forceForce the operation to run when in production
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + + + +
+ + make:cast +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ name + + + + + + + + + + +
+ + make:channel +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ name + + + + + + + + + + +
+ + make:command +
Options:
--commandThe terminal command that should be assigned
--testGenerate an accompanying PHPUnit test for the Console command
--pestGenerate an accompanying Pest test for the Console command
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ name + + + + + + + + + + + + + +
+ + make:component +
Options:
--forceCreate the class even if the component already exists
--inlineCreate a component that renders an inline view
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ name + + + + + + + + + + + + +
+ + make:controller +
Options:
--apiExclude the create and edit methods from the controller.
--typeManually specify the controller stub file to use.
--forceCreate the class even if the controller already exists
--invokable(-i)Generate a single method, invokable controller class.
--model(-m)Generate a resource controller for the given model.
--parent(-p)Generate a nested resource controller class.
--resource(-r)Generate a resource controller class.
--requests(-R)Generate FormRequest classes for store and update.
--testGenerate an accompanying PHPUnit test for the Controller
--pestGenerate an accompanying Pest test for the Controller
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ name + + + + + + + + + + + + + + + + + + + + +
+ + make:event +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ name + + + + + + + + + + +
+ + make:exception +
Options:
--renderCreate the exception with an empty render method
--reportCreate the exception with an empty report method
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ name + + + + + + + + + + + + +
+ + make:factory +
Options:
--model(-m)The name of the model
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ name + + + + + + + + + + + +
+ + make:job +
Options:
--syncIndicates that job should be synchronous
--testGenerate an accompanying PHPUnit test for the Job
--pestGenerate an accompanying Pest test for the Job
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ name + + + + + + + + + + + + + +
+ + make:listener +
Options:
--event(-e)The event class being listened for
--queuedIndicates the event listener should be queued
--testGenerate an accompanying PHPUnit test for the Listener
--pestGenerate an accompanying Pest test for the Listener
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ name + + + + + + + + + + + + + + +
+ + make:mail +
Options:
--force(-f)Create the class even if the mailable already exists
--markdown(-m)Create a new Markdown template for the mailable
--testGenerate an accompanying PHPUnit test for the Mail
--pestGenerate an accompanying Pest test for the Mail
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ name + + + + + + + + + + + + + + +
+ + make:middleware +
Options:
--testGenerate an accompanying PHPUnit test for the Middleware
--pestGenerate an accompanying Pest test for the Middleware
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ name + + + + + + + + + + + + +
+ + make:migration +
Options:
--createThe table to be created
--tableThe table to migrate
--pathThe location where the migration file should be created
--realpathIndicate any provided migration file paths are pre-resolved absolute paths
--fullpathOutput the full path of the migration
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ name + + + + + + + + + + + + + + + +
+ + make:model +
Options:
--all(-a)Generate a migration, seeder, factory, policy, and resource controller for the model
--controller(-c)Create a new controller for the model
--factory(-f)Create a new factory for the model
--forceCreate the class even if the model already exists
--migration(-m)Create a new migration file for the model
--policyCreate a new policy for the model
--seed(-s)Create a new seeder for the model
--pivot(-p)Indicates if the generated model should be a custom intermediate table model
--resource(-r)Indicates if the generated controller should be a resource controller
--apiIndicates if the generated controller should be an API controller
--requests(-R)Create new form request classes and use them in the resource controller
--testGenerate an accompanying PHPUnit test for the Model
--pestGenerate an accompanying Pest test for the Model
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ name + + + + + + + + + + + + + + + + + + + + + + + +
+ + make:notification +
Options:
--force(-f)Create the class even if the notification already exists
--markdown(-m)Create a new Markdown template for the notification
--testGenerate an accompanying PHPUnit test for the Notification
--pestGenerate an accompanying Pest test for the Notification
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ name + + + + + + + + + + + + + + +
+ + make:observer +
Options:
--model(-m)The model that the observer applies to.
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ name + + + + + + + + + + + +
+ + make:policy +
Options:
--model(-m)The model that the policy applies to
--guard(-g)The guard that the policy relies on
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ name + + + + + + + + + + + + +
+ + make:provider +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ name + + + + + + + + + + +
+ + make:request +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ name + + + + + + + + + + +
+ + make:resource +
Options:
--collection(-c)Create a resource collection
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ name + + + + + + + + + + + +
+ + make:rule +
Options:
--implicit(-i)Generate an implicit rule.
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ name + + + + + + + + + + + +
+ + make:seeder +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ name + + + + + + + + + + +
+ + make:test +
Options:
--unit(-u)Create a unit test.
--pest(-p)Create a Pest test.
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ name + + + + + + + + + + + + +
+ + migrate:fresh +
Options:
--databaseThe database connection to use
--drop-viewsDrop all tables and views
--drop-typesDrop all tables and types (Postgres only)
--forceForce the operation to run when in production
--pathThe path(s) to the migrations files to be executed
--realpathIndicate any provided migration file paths are pre-resolved absolute paths
--schema-pathThe path to a schema dump file
--seedIndicates if the seed task should be re-run
--seederThe class name of the root seeder
--stepForce the migrations to be run so they can be rolled back individually
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + + + + + + + + + + + +
+ + migrate:install +
Options:
--databaseThe database connection to use
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + + +
+ + migrate:refresh +
Options:
--databaseThe database connection to use
--forceForce the operation to run when in production
--pathThe path(s) to the migrations files to be executed
--realpathIndicate any provided migration file paths are pre-resolved absolute paths
--seedIndicates if the seed task should be re-run
--seederThe class name of the root seeder
--stepThe number of migrations to be reverted & re-run
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + + + + + + + + +
+ + migrate:reset +
Options:
--databaseThe database connection to use
--forceForce the operation to run when in production
--pathThe path(s) to the migrations files to be executed
--realpathIndicate any provided migration file paths are pre-resolved absolute paths
--pretendDump the SQL queries that would be run
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + + + + + + +
+ + migrate:rollback +
Options:
--databaseThe database connection to use
--forceForce the operation to run when in production
--pathThe path(s) to the migrations files to be executed
--realpathIndicate any provided migration file paths are pre-resolved absolute paths
--pretendDump the SQL queries that would be run
--stepThe number of migrations to be reverted
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + + + + + + + +
+ + migrate:status +
Options:
--databaseThe database connection to use
--pathThe path(s) to the migrations files to use
--realpathIndicate any provided migration file paths are pre-resolved absolute paths
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + + + + +
+ + model:prune +
Options:
--modelClass names of the models to be pruned
--exceptClass names of the models to be excluded from pruning
--chunkThe number of models to retrieve per chunk of models to be deleted
--pretendDisplay the number of prunable records found instead of deleting them
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + + + + + +
+ + notifications:table +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + +
+ + optimize:clear +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + +
+ + package:discover +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + +
+ + queue:batches-table +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + +
+ + queue:clear +
Options:
--queueThe name of the queue to clear
--forceForce the operation to run when in production
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ connection[=null] + + + + + + + + + + + + +
+ + queue:failed +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + +
+ + queue:failed-table +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + +
+ + queue:flush +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + +
+ + queue:forget +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ id + + + + + + + + + + +
+ + queue:listen +
Options:
--nameThe name of the worker
--delayThe number of seconds to delay failed jobs (Deprecated)
--backoffThe number of seconds to wait before retrying a job that encountered an uncaught exception
--forceForce the worker to run even in maintenance mode
--memoryThe memory limit in megabytes
--queueThe queue to listen on
--sleepNumber of seconds to sleep when no job is available
--timeoutThe number of seconds a child process can run
--triesNumber of times to attempt a job before logging it failed
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ connection[=null] + + + + + + + + + + + + + + + + + + + +
+ + queue:monitor +
Options:
--maxThe maximum number of jobs that can be on the queue before an event is dispatched
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ queues + + + + + + + + + + + +
+ + queue:prune-batches +
Options:
--hoursThe number of hours to retain batch data
--unfinishedThe number of hours to retain unfinished batch data
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + + + +
+ + queue:prune-failed +
Options:
--hoursThe number of hours to retain failed jobs data
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + + +
+ + queue:restart +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + +
+ + queue:retry +
Options:
--queueRetry all of the failed jobs for the specified queue
--rangeRange of job IDs (numeric) to be retried
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ id[=null] + + + + + + + + + + + + +
+ + queue:retry-batch +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ id + + + + + + + + + + +
+ + queue:table +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + +
+ + queue:work +
Options:
--nameThe name of the worker
--queueThe names of the queues to work
--daemonRun the worker in daemon mode (Deprecated)
--onceOnly process the next job on the queue
--stop-when-emptyStop when the queue is empty
--delayThe number of seconds to delay failed jobs (Deprecated)
--backoffThe number of seconds to wait before retrying a job that encountered an uncaught exception
--max-jobsThe number of jobs to process before stopping
--max-timeThe maximum number of seconds the worker should run
--forceForce the worker to run even in maintenance mode
--memoryThe memory limit in megabytes
--sleepNumber of seconds to sleep when no job is available
--restNumber of seconds to rest between jobs
--timeoutThe number of seconds a child process can run
--triesNumber of times to attempt a job before logging it failed
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ connection[=null] + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + route:cache +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + +
+ + route:clear +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + +
+ + route:list +
Options:
--columnsColumns to include in the route table
--compact(-c)Only show method, URI and action columns
--jsonOutput the route list as JSON
--methodFilter the routes by method
--nameFilter the routes by name
--pathOnly show routes matching the given path pattern
--except-pathDo not display the routes matching the given path pattern
--reverse(-r)Reverse the ordering of the routes
--sortThe column (precedence, domain, method, uri, name, action, middleware) to sort by
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + + + + + + + + + + +
+ + sail:install +
Options:
--withThe services that should be included in the installation
--devcontainerCreate a .devcontainer configuration directory
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + + + +
+ + sail:publish +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + +
+ + schedule:clear-cache +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + +
+ + schedule:finish +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ id code[=null] + + + + + + + + + + +
+ + schedule:list +
Options:
--timezoneThe timezone that times should be displayed in
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + + +
+ + schedule:run +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + +
+ + schedule:test +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + +
+ + schedule:work +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + +
+ + schema:dump +
Options:
--databaseThe database connection to use
--pathThe path where the schema dump file should be stored
--pruneDelete all existing migration files
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + + + + +
+ + session:table +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + +
+ + storage:link +
Options:
--relativeCreate the symbolic link using relative paths
--forceRecreate existing symbolic links
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + + + +
+ + stub:publish +
Options:
--forceOverwrite any existing files
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + + +
+ + vendor:publish +
Options:
--forceOverwrite any existing files
--allPublish assets for all service providers without prompt
--providerThe service provider that has assets you want to publish
--tagOne or many tags that have assets you want to publish
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + + + + + +
+ + view:cache +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + +
+ + view:clear +
Options:
--help(-h)Display help for the given command. When no command is given display help for the list command
--quiet(-q)Do not output any message
--verbose(-v)Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
--version(-V)Display this application version
--ansiForce (or disable --no-ansi) ANSI output
--no-ansiNegate the "--ansi" option
--no-interaction(-n)Do not ask any interactive question
--envThe environment the command should run under

]]>
+ + + + + + + + + + +
+
+ diff --git a/.idea/commandlinetools/schemas/frameworkDescriptionVersion1.1.4.xsd b/.idea/commandlinetools/schemas/frameworkDescriptionVersion1.1.4.xsd new file mode 100644 index 0000000..f2efc6d --- /dev/null +++ b/.idea/commandlinetools/schemas/frameworkDescriptionVersion1.1.4.xsd @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.idea/dbnavigator.xml b/.idea/dbnavigator.xml new file mode 100644 index 0000000..e8deeaf --- /dev/null +++ b/.idea/dbnavigator.xml @@ -0,0 +1,459 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/deployment.xml b/.idea/deployment.xml new file mode 100644 index 0000000..9a70002 --- /dev/null +++ b/.idea/deployment.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/idlers.iml b/.idea/idlers.iml new file mode 100644 index 0000000..f5247e6 --- /dev/null +++ b/.idea/idlers.iml @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..3a88089 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,166 @@ + + + + \ No newline at end of file diff --git a/.idea/laravel-idea.xml b/.idea/laravel-idea.xml new file mode 100644 index 0000000..2f95785 --- /dev/null +++ b/.idea/laravel-idea.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/.idea/laravel-plugin.xml b/.idea/laravel-plugin.xml new file mode 100644 index 0000000..5aae25d --- /dev/null +++ b/.idea/laravel-plugin.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/laravel-query-settings.xml b/.idea/laravel-query-settings.xml new file mode 100644 index 0000000..35cc07f --- /dev/null +++ b/.idea/laravel-query-settings.xml @@ -0,0 +1,14 @@ + + + + + + \ No newline at end of file diff --git a/.idea/markdown.xml b/.idea/markdown.xml new file mode 100644 index 0000000..1e34094 --- /dev/null +++ b/.idea/markdown.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..e354fdf --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/php.xml b/.idea/php.xml new file mode 100644 index 0000000..9f2816a --- /dev/null +++ b/.idea/php.xml @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/phpunit.xml b/.idea/phpunit.xml new file mode 100644 index 0000000..0e6ddb0 --- /dev/null +++ b/.idea/phpunit.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.styleci.yml b/.styleci.yml new file mode 100644 index 0000000..9231873 --- /dev/null +++ b/.styleci.yml @@ -0,0 +1,13 @@ +php: + preset: laravel + disabled: + - no_unused_imports + finder: + not-name: + - index.php + - server.php +js: + finder: + not-name: + - webpack.mix.js +css: true diff --git a/app/Console/Commands/CreateDatabaseCommand.php b/app/Console/Commands/CreateDatabaseCommand.php new file mode 100644 index 0000000..d134f74 --- /dev/null +++ b/app/Console/Commands/CreateDatabaseCommand.php @@ -0,0 +1,33 @@ +argument('name') ?: config("database.connections.mysql.database"); + $charset = config("database.connections.mysql.charset",'utf8mb4'); + $collation = config("database.connections.mysql.collation",'utf8mb4_unicode_ci'); + + config(["database.connections.mysql.database" => null]); + + $query = "CREATE DATABASE IF NOT EXISTS $schemaName CHARACTER SET $charset COLLATE $collation;"; + + DB::statement($query); + + config(["database.connections.mysql.database" => $schemaName]); + } +} diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php new file mode 100644 index 0000000..69914e9 --- /dev/null +++ b/app/Console/Kernel.php @@ -0,0 +1,41 @@ +command('inspire')->hourly(); + } + + /** + * Register the commands for the application. + * + * @return void + */ + protected function commands() + { + $this->load(__DIR__.'/Commands'); + + require base_path('routes/console.php'); + } +} diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php new file mode 100644 index 0000000..f9644ad --- /dev/null +++ b/app/Exceptions/Handler.php @@ -0,0 +1,40 @@ +reportable(function (Throwable $e) { + // + }); + } +} diff --git a/app/Http/Controllers/AccountController.php b/app/Http/Controllers/AccountController.php new file mode 100644 index 0000000..c80a6b9 --- /dev/null +++ b/app/Http/Controllers/AccountController.php @@ -0,0 +1,26 @@ +name = $request->name; + $user->email = $request->email; + $user->save(); + + return redirect()->route('account.index') + ->with('success', 'Account Updated Successfully.'); + } +} diff --git a/app/Http/Controllers/ApiController.php b/app/Http/Controllers/ApiController.php new file mode 100644 index 0000000..893358b --- /dev/null +++ b/app/Http/Controllers/ApiController.php @@ -0,0 +1,261 @@ +Join('pricings as p', 's.id', '=', 'p.service_id') + ->get(['s.*', 'p.id as price_id', 'p.currency', 'p.price', 'p.term', 'p.as_usd', 'p.usd_per_month', 'p.next_due_date'])->toJson(JSON_PRETTY_PRINT); + + return response($servers, 200); + } + + protected function getServer($id) + { + $server = DB::table('servers as s') + ->Join('pricings as p', 's.id', '=', 'p.service_id') + ->where('s.id', '=', $id) + ->get(['s.*', 'p.id as price_id', 'p.currency', 'p.price', 'p.term', 'p.as_usd', 'p.usd_per_month', 'p.next_due_date']); + + $yabs = DB::table('yabs') + ->where('yabs.server_id', '=', $id) + ->get(); + + $disk_speed = DB::table('disk_speed') + ->where('disk_speed.server_id', '=', $id) + ->get(); + + $network_speed = DB::table('network_speed') + ->where('network_speed.server_id', '=', $id) + ->get(); + + $labels = DB::table('labels_assigned as la') + ->Join('labels as l', 'la.label_id', '=', 'l.id') + ->where('la.service_id', '=', $id) + ->get(['l.*']); + + $server['yabs'] = $yabs; + $server['disk_speed'] = $disk_speed; + $server['network_speed'] = $network_speed; + $server['labels'] = $labels; + + return response($server, 200); + } + + protected function getAllPricing() + { + $pricing = Pricing::all()->toJson(JSON_PRETTY_PRINT); + return response($pricing, 200); + } + + protected function getPricing($id) + { + $pricing = Pricing::where('id', $id)->get()->toJson(JSON_PRETTY_PRINT); + return response($pricing, 200); + } + + protected function getAllNetworkSpeeds() + { + $ns = NetworkSpeed::all()->toJson(JSON_PRETTY_PRINT); + return response($ns, 200); + } + + protected function getNetworkSpeeds($id) + { + $ns = DB::table('network_speed as n') + ->where('n.server_id', '=', $id) + ->get()->toJson(JSON_PRETTY_PRINT); + return response($ns, 200); + } + + protected function getAllLabels() + { + $labels = Labels::all()->toJson(JSON_PRETTY_PRINT); + return response($labels, 200); + } + + protected function getLabel($id) + { + $label = DB::table('labels as l') + ->where('l.id', '=', $id) + ->get()->toJson(JSON_PRETTY_PRINT); + return response($label, 200); + } + + protected function getAllShared() + { + $shared = DB::table('shared_hosting as sh') + ->Join('pricings as p', 'sh.id', '=', 'p.service_id') + ->get(['sh.*', 'p.id as price_id', 'p.currency', 'p.price', 'p.term', 'p.as_usd', 'p.usd_per_month', 'p.next_due_date'])->toJson(JSON_PRETTY_PRINT); + return response($shared, 200); + } + + protected function getShared($id) + { + $shared = DB::table('shared_hosting as sh') + ->Join('pricings as p', 'sh.id', '=', 'p.service_id') + ->where('sh.id', '=', $id) + ->get(['sh.*', 'p.id as price_id', 'p.currency', 'p.price', 'p.term', 'p.as_usd', 'p.usd_per_month', 'p.next_due_date'])->toJson(JSON_PRETTY_PRINT); + return response($shared, 200); + } + + protected function getAllReseller() + { + $reseller = DB::table('reseller_hosting as rh') + ->Join('pricings as p', 'rh.id', '=', 'p.service_id') + ->get(['rh.*', 'p.id as price_id', 'p.currency', 'p.price', 'p.term', 'p.as_usd', 'p.usd_per_month', 'p.next_due_date'])->toJson(JSON_PRETTY_PRINT); + return response($reseller, 200); + } + + protected function getReseller($id) + { + $reseller = DB::table('reseller_hosting as rh') + ->Join('pricings as p', 'rh.id', '=', 'p.service_id') + ->where('rh.id', '=', $id) + ->get(['rh.*', 'p.id as price_id', 'p.currency', 'p.price', 'p.term', 'p.as_usd', 'p.usd_per_month', 'p.next_due_date'])->toJson(JSON_PRETTY_PRINT); + return response($reseller, 200); + } + + protected function getAllDomains() + { + $domains = DB::table('domains as d') + ->Join('pricings as p', 'd.id', '=', 'p.service_id') + ->get(['d.*', 'p.id as price_id', 'p.currency', 'p.price', 'p.term', 'p.as_usd', 'p.usd_per_month', 'p.next_due_date'])->toJson(JSON_PRETTY_PRINT); + return response($domains, 200); + } + + protected function getDomains($id) + { + $domain = DB::table('domains as d') + ->Join('pricings as p', 'd.id', '=', 'p.service_id') + ->where('d.id', '=', $id) + ->get(['d.*', 'p.id as price_id', 'p.currency', 'p.price', 'p.term', 'p.as_usd', 'p.usd_per_month', 'p.next_due_date'])->toJson(JSON_PRETTY_PRINT); + return response($domain, 200); + } + + protected function getAllMisc() + { + $misc = DB::table('misc_services as m') + ->Join('pricings as p', 'm.id', '=', 'p.service_id') + ->get(['m.*', 'p.id as price_id', 'p.currency', 'p.price', 'p.term', 'p.as_usd', 'p.usd_per_month', 'p.next_due_date'])->toJson(JSON_PRETTY_PRINT); + return response($misc, 200); + } + + protected function getMisc($id) + { + $misc = DB::table('misc_services as m') + ->Join('pricings as p', 'm.id', '=', 'p.service_id') + ->where('m.id', '=', $id) + ->get(['m.*', 'p.id as price_id', 'p.currency', 'p.price', 'p.term', 'p.as_usd', 'p.usd_per_month', 'p.next_due_date'])->toJson(JSON_PRETTY_PRINT); + return response($misc, 200); + } + + protected function getAllDns() + { + $dns = DB::table('d_n_s') + ->get()->toJson(JSON_PRETTY_PRINT); + return response($dns, 200); + } + + protected function getDns($id) + { + $dns = DB::table('d_n_s') + ->where('id', '=', $id) + ->get()->toJson(JSON_PRETTY_PRINT); + return response($dns, 200); + } + + protected function getAllLocations() + { + $locations = DB::table('locations') + ->get()->toJson(JSON_PRETTY_PRINT); + return response($locations, 200); + } + + protected function getLocation($id) + { + $location = DB::table('locations') + ->where('id', '=', $id) + ->get()->toJson(JSON_PRETTY_PRINT); + return response($location, 200); + } + + protected function getAllProviders() + { + $providers = DB::table('providers') + ->get()->toJson(JSON_PRETTY_PRINT); + return response($providers, 200); + } + + protected function getProvider($id) + { + $providers = DB::table('providers') + ->where('id', '=', $id) + ->get()->toJson(JSON_PRETTY_PRINT); + return response($providers, 200); + } + + protected function getAllSettings() + { + $settings = DB::table('settings') + ->get()->toJson(JSON_PRETTY_PRINT); + return response($settings, 200); + } + + public function getAllProvidersTable(Request $request) + { + if ($request->ajax()) { + $data = Providers::latest()->get(); + $dt = Datatables::of($data) + ->addIndexColumn() + ->addColumn('action', function ($row) { + $actionBtn = '
'; + return $actionBtn; + }) + ->rawColumns(['action']) + ->make(true); + return $dt; + } + } + + protected function checkHostIsUp(string $hostname) + {//Check if host/ip is "up" + ($fp = @fsockopen($hostname, 80, $errCode, $errStr, 1)) ? $result = true : $result = false; + if ($fp) { + @fclose($fp); + } + return response(array('is_online' => $result), 200); + } + + protected function getIpForDomain(string $domainname, string $type) + {//Gets IP from A record for a domain + switch ($type) { + case "A": + $data = dns_get_record($domainname, DNS_A); + if (isset($data['0']['ip'])) { + return response(array('ip' => $data['0']['ip']), 200); + } + case "AAAA": + $data = dns_get_record($domainname, DNS_AAAA); + if (isset($data['0']['ipv6'])) { + return response(array('ip' => $data['0']['ipv6']), 200); + } + break; + } + return response(array('ip' => null), 200); + } + +} diff --git a/app/Http/Controllers/Auth/AuthenticatedSessionController.php b/app/Http/Controllers/Auth/AuthenticatedSessionController.php new file mode 100644 index 0000000..09abe87 --- /dev/null +++ b/app/Http/Controllers/Auth/AuthenticatedSessionController.php @@ -0,0 +1,54 @@ +authenticate(); + + $request->session()->regenerate(); + + return redirect()->intended(RouteServiceProvider::HOME); + } + + /** + * Destroy an authenticated session. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\RedirectResponse + */ + public function destroy(Request $request) + { + Auth::guard('web')->logout(); + + $request->session()->invalidate(); + + $request->session()->regenerateToken(); + + return redirect('/'); + } +} diff --git a/app/Http/Controllers/Auth/ConfirmPasswordController.php b/app/Http/Controllers/Auth/ConfirmPasswordController.php new file mode 100644 index 0000000..138c1f0 --- /dev/null +++ b/app/Http/Controllers/Auth/ConfirmPasswordController.php @@ -0,0 +1,40 @@ +middleware('auth'); + } +} diff --git a/app/Http/Controllers/Auth/ConfirmablePasswordController.php b/app/Http/Controllers/Auth/ConfirmablePasswordController.php new file mode 100644 index 0000000..1175010 --- /dev/null +++ b/app/Http/Controllers/Auth/ConfirmablePasswordController.php @@ -0,0 +1,44 @@ +validate([ + 'email' => $request->user()->email, + 'password' => $request->password, + ])) { + throw ValidationException::withMessages([ + 'password' => __('auth.password'), + ]); + } + + $request->session()->put('auth.password_confirmed_at', time()); + + return redirect()->intended(RouteServiceProvider::HOME); + } +} diff --git a/app/Http/Controllers/Auth/EmailVerificationNotificationController.php b/app/Http/Controllers/Auth/EmailVerificationNotificationController.php new file mode 100644 index 0000000..3362dca --- /dev/null +++ b/app/Http/Controllers/Auth/EmailVerificationNotificationController.php @@ -0,0 +1,27 @@ +user()->hasVerifiedEmail()) { + return redirect()->intended(RouteServiceProvider::HOME); + } + + $request->user()->sendEmailVerificationNotification(); + + return back()->with('status', 'verification-link-sent'); + } +} diff --git a/app/Http/Controllers/Auth/EmailVerificationPromptController.php b/app/Http/Controllers/Auth/EmailVerificationPromptController.php new file mode 100644 index 0000000..e247f95 --- /dev/null +++ b/app/Http/Controllers/Auth/EmailVerificationPromptController.php @@ -0,0 +1,23 @@ +user()->hasVerifiedEmail() + ? redirect()->intended(RouteServiceProvider::HOME) + : view('auth.verify-email'); + } +} diff --git a/app/Http/Controllers/Auth/ForgotPasswordController.php b/app/Http/Controllers/Auth/ForgotPasswordController.php new file mode 100644 index 0000000..465c39c --- /dev/null +++ b/app/Http/Controllers/Auth/ForgotPasswordController.php @@ -0,0 +1,22 @@ +middleware('guest')->except('logout'); + } + + +} diff --git a/app/Http/Controllers/Auth/NewPasswordController.php b/app/Http/Controllers/Auth/NewPasswordController.php new file mode 100644 index 0000000..1df8e21 --- /dev/null +++ b/app/Http/Controllers/Auth/NewPasswordController.php @@ -0,0 +1,65 @@ + $request]); + } + + /** + * Handle an incoming new password request. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\RedirectResponse + * + * @throws \Illuminate\Validation\ValidationException + */ + public function store(Request $request) + { + $request->validate([ + 'token' => ['required'], + 'email' => ['required', 'email'], + 'password' => ['required', 'confirmed', Rules\Password::defaults()], + ]); + + // Here we will attempt to reset the user's password. If it is successful we + // will update the password on an actual user model and persist it to the + // database. Otherwise we will parse the error and return the response. + $status = Password::reset( + $request->only('email', 'password', 'password_confirmation', 'token'), + function ($user) use ($request) { + $user->forceFill([ + 'password' => Hash::make($request->password), + 'remember_token' => Str::random(60), + ])->save(); + + event(new PasswordReset($user)); + } + ); + + // If the password was successfully reset, we will redirect the user back to + // the application's home authenticated view. If there is an error we can + // redirect them back to where they came from with their error message. + return $status == Password::PASSWORD_RESET + ? redirect()->route('login')->with('status', __($status)) + : back()->withInput($request->only('email')) + ->withErrors(['email' => __($status)]); + } +} diff --git a/app/Http/Controllers/Auth/PasswordResetLinkController.php b/app/Http/Controllers/Auth/PasswordResetLinkController.php new file mode 100644 index 0000000..667ab94 --- /dev/null +++ b/app/Http/Controllers/Auth/PasswordResetLinkController.php @@ -0,0 +1,47 @@ +validate([ + 'email' => ['required', 'email'], + ]); + + // We will send the password reset link to this user. Once we have attempted + // to send the link, we will examine the response then see the message we + // need to show to the user. Finally, we'll send out a proper response. + $status = Password::sendResetLink( + $request->only('email') + ); + + return $status == Password::RESET_LINK_SENT + ? back()->with('status', __($status)) + : back()->withInput($request->only('email')) + ->withErrors(['email' => __($status)]); + } +} diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php new file mode 100644 index 0000000..f2130d1 --- /dev/null +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -0,0 +1,75 @@ +middleware('guest'); + } + + /** + * Get a validator for an incoming registration request. + * + * @param array $data + * @return \Illuminate\Contracts\Validation\Validator + */ + protected function validator(array $data) + { + return Validator::make($data, [ + 'name' => ['required', 'string', 'max:255'], + 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], + 'password' => ['required', 'string', 'min:8', 'confirmed'], + ]); + } + + /** + * Create a new user instance after a valid registration. + * + * @param array $data + * @return \App\Models\User + */ + protected function create(array $data) + { + return User::create([ + 'name' => $data['name'], + 'email' => $data['email'], + 'password' => Hash::make($data['password']), + 'api_token' => Str::random(60) + ]); + } +} diff --git a/app/Http/Controllers/Auth/RegisteredUserController.php b/app/Http/Controllers/Auth/RegisteredUserController.php new file mode 100644 index 0000000..8cc77c3 --- /dev/null +++ b/app/Http/Controllers/Auth/RegisteredUserController.php @@ -0,0 +1,60 @@ +count() >= 1) {//Only allow 1 user for this app + return redirect('/login'); + } + return view('auth.register'); + } + + /** + * Handle an incoming registration request. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\RedirectResponse + * + * @throws \Illuminate\Validation\ValidationException + */ + public function store(Request $request) + { + $request->validate([ + 'name' => ['required', 'string', 'max:255'], + 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], + 'password' => ['required', 'confirmed', Rules\Password::defaults()], + ]); + + $user = User::create([ + 'name' => $request->name, + 'email' => $request->email, + 'password' => Hash::make($request->password), + 'api_token' => Str::random(60) + ]); + + event(new Registered($user)); + + Auth::login($user); + + return redirect('/'); + } +} diff --git a/app/Http/Controllers/Auth/ResetPasswordController.php b/app/Http/Controllers/Auth/ResetPasswordController.php new file mode 100644 index 0000000..22c0aaa --- /dev/null +++ b/app/Http/Controllers/Auth/ResetPasswordController.php @@ -0,0 +1,31 @@ +middleware('auth'); + $this->middleware('signed')->only('verify'); + $this->middleware('throttle:6,1')->only('verify', 'resend'); + } +} diff --git a/app/Http/Controllers/Auth/VerifyEmailController.php b/app/Http/Controllers/Auth/VerifyEmailController.php new file mode 100644 index 0000000..6baa9aa --- /dev/null +++ b/app/Http/Controllers/Auth/VerifyEmailController.php @@ -0,0 +1,30 @@ +user()->hasVerifiedEmail()) { + return redirect()->intended(RouteServiceProvider::HOME.'?verified=1'); + } + + if ($request->user()->markEmailAsVerified()) { + event(new Verified($request->user())); + } + + return redirect()->intended(RouteServiceProvider::HOME.'?verified=1'); + } +} diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php new file mode 100644 index 0000000..a0a2a8a --- /dev/null +++ b/app/Http/Controllers/Controller.php @@ -0,0 +1,13 @@ +get(); + return view('dns.index', compact(['dn'])); + } + + public function create() + { + $Servers = Server::all(); + $Domains = Domains::all(); + $Shareds = Shared::all(); + $Resellers = Reseller::all(); + return view('dns.create', compact(['Servers', 'Domains', 'Shareds', 'Resellers'])); + } + + public function store(Request $request) + { + $request->validate([ + 'hostname' => 'required|min:2', + 'address' => 'required|min:2', + 'dns_type' => 'required' + ]); + + $dns_id = Str::random(8); + + DNS::create([ + 'id' => $dns_id, + 'hostname' => $request->hostname, + 'dns_type' => $request->dns_type, + 'address' => $request->address, + 'server_id' => ($request->server_id !== 'null') ? $request->server_id : null, + 'shared_id' => ($request->shared_id !== 'null') ? $request->shared_id : null, + 'reseller_id' => ($request->reseller_id !== 'null') ? $request->reseller_id : null, + 'domain_id' => ($request->domain_id !== 'null') ? $request->domain_id : null + ]); + + $labels_array = [$request->label1, $request->label2, $request->label3, $request->label4]; + + for ($i = 1; $i <= 4; $i++) { + if (!is_null($labels_array[($i - 1)])) { + DB::insert('INSERT IGNORE INTO labels_assigned (label_id, service_id) values (?, ?)', [$labels_array[($i - 1)], $dns_id]); + } + } + + return redirect()->route('dns.index') + ->with('success', 'DNS Created Successfully.'); + } + + public function show(DNS $dn) + { + $dns = DNS::findOrFail($dn->id); + return view('dns.show', compact(['dn', 'dns'])); + } + + public function edit(DNS $dn) + { + $Servers = Server::all(); + $Domains = Domains::all(); + $Shareds = Shared::all(); + $Resellers = Reseller::all(); + $dn = DNS::findOrFail($dn->id); + $labels = DB::table('labels_assigned as l') + ->join('labels', 'l.label_id', '=', 'labels.id') + ->where('l.service_id', '=', $dn->id) + ->get(['labels.id', 'labels.label']); + + return view('dns.edit', compact(['dn', 'labels','Servers', 'Domains', 'Shareds', 'Resellers'])); + } + + public function update(Request $request, DNS $dn) + { + $request->validate([ + 'hostname' => 'required|min:2', + 'address' => 'required|min:2', + 'dns_type' => 'required' + ]); + + $dn->update([ + 'hostname' => $request->hostname, + 'dns_type' => $request->dns_type, + 'address' => $request->address, + 'server_id' => ($request->server_id !== 'null') ? $request->server_id : null, + 'shared_id' => ($request->shared_id !== 'null') ? $request->shared_id : null, + 'reseller_id' => ($request->reseller_id !== 'null') ? $request->reseller_id : null, + 'domain_id' => ($request->domain_id !== 'null') ? $request->domain_id : null + ]); + + + $deleted = DB::table('labels_assigned')->where('service_id', '=', $dn->id)->delete(); + + $labels_array = [$request->label1, $request->label2, $request->label3, $request->label4]; + + for ($i = 1; $i <= 4; $i++) { + if (!is_null($labels_array[($i - 1)])) { + DB::insert('INSERT IGNORE INTO labels_assigned ( label_id, service_id) values (?, ?)', [$labels_array[($i - 1)], $dn->id]); + } + } + + return redirect()->route('dns.index') + ->with('success', 'DNS updated Successfully.'); + } + + public function destroy(DNS $dn) + { + $id = $dn->id; + $items = DNS::find($id); + + $items->delete(); + + Labels::deleteLabelsAssignedTo($id); + + return redirect()->route('dns.index') + ->with('success', 'DNS was deleted Successfully.'); + } +} diff --git a/app/Http/Controllers/DiskSpeedController.php b/app/Http/Controllers/DiskSpeedController.php new file mode 100644 index 0000000..af0540d --- /dev/null +++ b/app/Http/Controllers/DiskSpeedController.php @@ -0,0 +1,29 @@ +join('providers as p', 'd.provider_id', '=', 'p.id') + ->join('pricings as pr', 'd.id', '=', 'pr.service_id') + ->get(['d.*', 'p.name as provider_name', 'pr.*']); + + return view('domains.index', compact(['domains'])); + } + + public function show(Domains $domain) + { + $service_extras = DB::table('domains as d') + ->join('providers as p', 'd.provider_id', '=', 'p.id') + ->join('pricings as pr', 'd.id', '=', 'pr.service_id') + ->where('d.id', '=', $domain->id) + ->get(['d.*', 'p.name as provider_name', 'pr.*']); + + return view('domains.show', compact(['domain', 'service_extras'])); + } + + public function create() + { + $Providers = Providers::all(); + return view('domains.create', compact('Providers')); + } + + public function store(Request $request) + { + $request->validate([ + 'domain' => 'required|min:2', + 'extension' => 'required|min:2', + 'provider_id' => 'numeric', + 'price' => 'numeric', + 'next_due_date' => 'required|date' + ]); + + $domain_id = Str::random(8); + + Domains::create([ + 'id' => $domain_id, + 'domain' => $request->domain, + 'extension' => $request->extension, + 'ns1' => $request->ns1, + 'ns2' => $request->ns2, + 'ns3' => $request->ns3, + 'provider_id' => $request->provider_id, + 'owned_since' => $request->owned_since + ]); + + $pricing = new Pricing(); + + $as_usd = $pricing->convertToUSD($request->price, $request->currency); + + Pricing::create([ + 'service_id' => $domain_id, + 'service_type' => 4, + 'currency' => $request->currency, + 'price' => $request->price, + 'term' => $request->payment_term, + 'as_usd' => $as_usd, + 'usd_per_month' => $pricing->costAsPerMonth($as_usd, $request->payment_term), + 'next_due_date' => $request->next_due_date, + ]); + + $labels_array = [$request->label1, $request->label2, $request->label3, $request->label4]; + + for ($i = 1; $i <= 4; $i++) { + if (!is_null($labels_array[($i - 1)])) { + DB::insert('INSERT INTO labels_assigned (label_id, service_id) values (?, ?)', [$labels_array[($i - 1)], $domain_id]); + } + } + + return redirect()->route('domains.index') + ->with('success', 'Domain Created Successfully.'); + } + + public function edit(Domains $domain) + { + $domain_info = DB::table('domains as d') + ->join('pricings as pr', 'd.id', '=', 'pr.service_id') + ->where('d.id', '=', $domain->id) + ->get(['d.*', 'pr.*']); + + $labels = DB::table('labels_assigned as l') + ->join('labels', 'l.label_id', '=', 'labels.id') + ->where('l.service_id', '=', $domain->id) + ->get(['labels.id', 'labels.label']); + + return view('domains.edit', compact(['domain', 'domain_info', 'labels'])); + } + + public function update(Request $request, Domains $domain) + { + $request->validate([ + 'domain' => 'required|min:2', + 'extension' => 'required|min:2', + 'provider_id' => 'numeric', + 'price' => 'numeric' + ]); + + $domain->update([ + 'domain' => $request->domain, + 'extension' => $request->extension, + 'ns1' => $request->ns1, + 'ns2' => $request->ns2, + 'ns3' => $request->ns3, + 'provider_id' => $request->provider_id, + 'owned_since' => $request->owned_since, + 'active' => (isset($request->is_active)) ? 1 : 0 + ]); + + $pricing = new Pricing(); + + $as_usd = $pricing->convertToUSD($request->price, $request->currency); + + DB::table('pricings') + ->where('service_id', $domain->id) + ->update([ + 'service_type' => 4, + 'currency' => $request->currency, + 'price' => $request->price, + 'term' => $request->payment_term, + 'as_usd' => $as_usd, + 'usd_per_month' => $pricing->costAsPerMonth($as_usd, $request->payment_term), + 'next_due_date' => $request->next_due_date, + 'active' => (isset($request->is_active)) ? 1 : 0 + ]); + + $deleted = DB::table('labels_assigned')->where('service_id', '=', $domain->id)->delete(); + + $labels_array = [$request->label1, $request->label2, $request->label3, $request->label4]; + + for ($i = 1; $i <= 4; $i++) { + if (!is_null($labels_array[($i - 1)])) { + DB::insert('INSERT IGNORE INTO labels_assigned ( label_id, service_id) values (?, ?)', [$labels_array[($i - 1)], $domain->id]); + } + } + + return redirect()->route('domains.index') + ->with('success', 'Domain Updated Successfully.'); + } + + public function destroy(Domains $domain) + { + $items = Domains::find($domain->id); + + $items->delete(); + + $p = new Pricing(); + $p->deletePricing($domain->id); + + Labels::deleteLabelsAssignedTo($domain->id); + + return redirect()->route('domains.index') + ->with('success', 'Domain was deleted Successfully.'); + } + +} diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php new file mode 100644 index 0000000..37bc5ec --- /dev/null +++ b/app/Http/Controllers/HomeController.php @@ -0,0 +1,161 @@ +middleware('auth'); + } + + public function index() + { + $p = new Process(); + $p->startTimer(); + + $services_count = DB::table('pricings') + ->select('service_type', DB::raw('COUNT(*) as amount')) + ->groupBy('service_type') + ->where('active', '=', 1) + ->get(); + + + $due_soon = DB::table('pricings as p') + ->leftJoin('servers as s', 'p.service_id', '=', 's.id') + ->leftJoin('shared_hosting as sh', 'p.service_id', '=', 'sh.id') + ->leftJoin('reseller_hosting as r', 'p.service_id', '=', 'r.id') + ->leftJoin('domains as d', 'p.service_id', '=', 'd.id') + ->leftJoin('misc_services as ms', 'p.service_id', '=', 'ms.id') + ->where('p.active', '=', 1) + ->orderBy('next_due_date', 'ASC') + ->limit(6) + ->get(['p.*', 's.hostname', 'd.domain', 'd.extension', 'r.main_domain as reseller', 'sh.main_domain', 'ms.name']); + + + //Check for past due date and refresh the due date if so: + $pricing = new Pricing(); + $count = 0; + foreach ($due_soon as $service) { + if (Carbon::createFromFormat('Y-m-d', $service->next_due_date)->isPast()) { + $months = $pricing->termAsMonths($service->term);//Get months for term to update the next due date to + $new_due_date = Carbon::createFromFormat('Y-m-d', $service->next_due_date)->addMonths($months)->format('Y-m-d'); + DB::table('pricings')//Update the DB + ->where('service_id', $service->service_id) + ->update(['next_due_date' => $new_due_date]); + $due_soon[$count]->next_due_date = $new_due_date;//Update array being sent to view + } else { + break;//Break because if this date isnt past than the ones after it in the loop wont be either + } + $count++; + } + + + $recently_added = DB::table('pricings as p') + ->leftJoin('servers as s', 'p.service_id', '=', 's.id') + ->leftJoin('shared_hosting as sh', 'p.service_id', '=', 'sh.id') + ->leftJoin('reseller_hosting as r', 'p.service_id', '=', 'r.id') + ->leftJoin('domains as d', 'p.service_id', '=', 'd.id') + ->leftJoin('misc_services as ms', 'p.service_id', '=', 'ms.id') + ->where('p.active', '=', 1) + ->orderBy('created_at', 'DESC') + ->limit(6) + ->get(['p.*', 's.hostname', 'd.domain', 'd.extension', 'r.main_domain as reseller', 'sh.main_domain', 'ms.name']); + + $settings = DB::table('settings') + ->where('id', '=', 1) + ->get(); + + Session::put('timer_version_footer', $settings[0]->show_versions_footer); + Session::put('show_servers_public', $settings[0]->show_servers_public); + Session::save(); + + $pricing = json_decode(DB::table('pricings')->get(), true); + + $total_cost_weekly = $total_cost_pm = $inactive_count = 0; + foreach ($pricing as $price) { + if ($price['active'] === 1) { + if ($price['term'] === 1) {//1 month + $total_cost_weekly += ($price['as_usd'] / 4); + $total_cost_pm += $price['as_usd']; + } elseif ($price['term'] === 2) {//3 months + $total_cost_weekly += ($price['as_usd'] / 12); + $total_cost_pm += ($price['as_usd'] / 3); + } elseif ($price['term'] === 3) {// 6 month + $total_cost_weekly += ($price['as_usd'] / 24); + $total_cost_pm += ($price['as_usd'] / 6); + } elseif ($price['term'] === 4) {// 1 year + $total_cost_weekly += ($price['as_usd'] / 48); + $total_cost_pm += ($price['as_usd'] / 12); + } elseif ($price['term'] === 5) {//2 years + $total_cost_weekly += ($price['as_usd'] / 96); + $total_cost_pm += ($price['as_usd'] / 24); + } elseif ($price['term'] === 6) {//3 years + $total_cost_weekly += ($price['as_usd'] / 144); + $total_cost_pm += ($price['as_usd'] / 36); + } + } else { + $inactive_count++; + } + } + $total_cost_yearly = ($total_cost_pm * 12); + + $services_count = json_decode($services_count, true); + + $servers_count = $domains_count = $shared_count = $reseller_count = $other_count = $total_services = 0; + + foreach ($services_count as $sc) { + $total_services += $sc['amount']; + if ($sc['service_type'] === 1) { + $servers_count = $sc['amount']; + } else if ($sc['service_type'] === 2) { + $shared_count = $sc['amount']; + } else if ($sc['service_type'] === 3) { + $reseller_count = $sc['amount']; + } else if ($sc['service_type'] === 4) { + $domains_count = $sc['amount']; + } else if ($sc['service_type'] === 5) { + $other_count = $sc['amount']; + } + } + + $p->stopTimer(); + + $information = array( + 'servers' => $servers_count, + 'domains' => $domains_count, + 'shared' => $shared_count, + 'reseller' => $reseller_count, + 'misc' => $other_count, + 'labels' => DB::table('labels')->count(), + 'dns' => DB::table('d_n_s')->count(), + 'total_services' => $total_services, + 'total_inactive' => $inactive_count, + 'total_cost_weekly' => number_format($total_cost_weekly, 2), + 'total_cost_monthly' => number_format($total_cost_pm, 2), + 'total_cost_yearly' => number_format($total_cost_yearly, 2), + 'total_cost_2_yearly' => number_format(($total_cost_yearly * 2), 2), + 'due_soon' => $due_soon, + 'newest' => $recently_added, + 'execution_time' => number_format($p->getTimeTaken(), 2) + ); + + //dd($information); + + return view('home', compact('information')); + } +} diff --git a/app/Http/Controllers/LabelsController.php b/app/Http/Controllers/LabelsController.php new file mode 100644 index 0000000..474fd11 --- /dev/null +++ b/app/Http/Controllers/LabelsController.php @@ -0,0 +1,62 @@ +validate([ + 'label' => 'required|min:2' + ]); + + Labels::create([ + 'id' => Str::random(8), + 'label' => $request->label + ]); + + return redirect()->route('labels.index') + ->with('success', 'Label Created Successfully.'); + } + + public function show(Labels $label) + { + return view('labels.show', compact(['label'])); + } + + public function edit(Labels $label) + { + abort(404); + } + + public function destroy(Labels $label) + { + $label_id = $label->id; + + $items = Labels::find($label_id); + + $items->delete(); + + Labels::deleteLabelAssignedAs($label_id); + + return redirect()->route('labels.index') + ->with('success', 'Label was deleted Successfully.'); + } +} diff --git a/app/Http/Controllers/LocationsController.php b/app/Http/Controllers/LocationsController.php new file mode 100644 index 0000000..9f6c302 --- /dev/null +++ b/app/Http/Controllers/LocationsController.php @@ -0,0 +1,45 @@ +validate([ + 'location_name' => 'required|min:2' + ]); + + Locations::create([ + 'name' => $request->location_name + ]); + + return redirect()->route('locations.index') + ->with('success', 'Location Created Successfully.'); + } + + public function destroy(Locations $location) + { + $items = Locations::find($location->id); + + $items->delete(); + + return redirect()->route('locations.index') + ->with('success', 'Location was deleted Successfully.'); + } +} diff --git a/app/Http/Controllers/MiscController.php b/app/Http/Controllers/MiscController.php new file mode 100644 index 0000000..fbd0394 --- /dev/null +++ b/app/Http/Controllers/MiscController.php @@ -0,0 +1,130 @@ +join('pricings as pr', 'd.id', '=', 'pr.service_id') + ->get(['d.*', 'pr.*']); + + return view('misc.index', compact(['misc'])); + } + + public function create() + { + return view('misc.create'); + } + + public function show(Misc $misc) + { + $service_extras = DB::table('misc_services as m') + ->join('pricings as p', 'm.id', '=', 'p.service_id') + ->where('m.id', '=', $misc->id) + ->get(['m.*', 'p.*']); + + return view('misc.show', compact(['misc', 'service_extras'])); + } + + public function store(Request $request) + { + $request->validate([ + 'name' => 'required|min:3', + 'price' => 'required|numeric', + 'owned_since' => 'date', + 'next_due_date' => 'required|date' + ]); + + $ms_id = Str::random(8); + + Misc::create([ + 'id' => $ms_id, + 'name' => $request->name, + 'owned_since' => $request->owned_since + ]); + + $pricing = new Pricing(); + + $as_usd = $pricing->convertToUSD($request->price, $request->currency); + + Pricing::create([ + 'service_id' => $ms_id, + 'service_type' => 5, + 'currency' => $request->currency, + 'price' => $request->price, + 'term' => $request->payment_term, + 'as_usd' => $as_usd, + 'usd_per_month' => $pricing->costAsPerMonth($as_usd, $request->payment_term), + 'next_due_date' => $request->next_due_date, + ]); + + return redirect()->route('misc.index') + ->with('success', 'Misc service created Successfully.'); + } + + public function edit(Misc $misc) + { + $misc = DB::table('misc_services as s') + ->join('pricings as p', 's.id', '=', 'p.service_id') + ->where('s.id', '=', $misc->id) + ->get(['s.*', 'p.*']); + + return view('misc.edit', compact('misc')); + } + + public function update(Request $request, Misc $misc) + { + $request->validate([ + 'name' => 'required', + 'owned_since' => 'date', + ]); + + DB::table('misc_services') + ->where('id', $misc->id) + ->update([ + 'name' => $request->name, + 'owned_since' => $request->owned_since, + 'active' => (isset($request->is_active)) ? 1 : 0 + ]); + + $pricing = new Pricing(); + + $as_usd = $pricing->convertToUSD($request->price, $request->currency); + + DB::table('pricings') + ->where('service_id', $misc->id) + ->update([ + 'currency' => $request->currency, + 'price' => $request->price, + 'term' => $request->payment_term, + 'as_usd' => $as_usd, + 'usd_per_month' => $pricing->costAsPerMonth($as_usd, $request->payment_term), + 'next_due_date' => $request->next_due_date, + 'active' => (isset($request->is_active)) ? 1 : 0 + ]); + + return redirect()->route('misc.index') + ->with('success', 'Misc service updated Successfully.'); + } + + public function destroy(Misc $misc) + { + $items = Misc::find($misc->id); + + $items->delete(); + + $p = new Pricing(); + $p->deletePricing($misc->id); + + return redirect()->route('misc.index') + ->with('success', 'Misc service was deleted Successfully.'); + } +} diff --git a/app/Http/Controllers/NetworkSpeedController.php b/app/Http/Controllers/NetworkSpeedController.php new file mode 100644 index 0000000..df8487d --- /dev/null +++ b/app/Http/Controllers/NetworkSpeedController.php @@ -0,0 +1,24 @@ +validate([ + 'provider_name' => 'required|min:2' + ]); + + Providers::create([ + 'name' => $request->provider_name + ]); + + return redirect()->route('providers.index') + ->with('success', 'Provider Created Successfully.'); + } + + public function destroy(Providers $provider) + { + $items = Providers::find($provider->id); + + $items->delete(); + + return redirect()->route('providers.index') + ->with('success', 'Provider was deleted Successfully.'); + } + + public function getProviders(Request $request) + { + if ($request->ajax()) { + $data = Providers::latest()->get(); + $dt = Datatables::of($data) + ->addIndexColumn() + ->addColumn('action', function($row){ + $actionBtn = 'Edit Delete'; + return $actionBtn; + }) + ->rawColumns(['action']) + ->make(true); + dd($dt); + } + } + +} diff --git a/app/Http/Controllers/ResellerController.php b/app/Http/Controllers/ResellerController.php new file mode 100644 index 0000000..0c79520 --- /dev/null +++ b/app/Http/Controllers/ResellerController.php @@ -0,0 +1,217 @@ +join('providers as p', 's.provider_id', '=', 'p.id') + ->join('locations as l', 's.location_id', '=', 'l.id') + ->join('pricings as pr', 's.id', '=', 'pr.service_id') + ->get(['s.*', 'p.name as provider_name', 'pr.*', 'l.name as location']); + + return view('reseller.index', compact(['resellers'])); + } + + public function create() + { + $Providers = Providers::all(); + $Locations = Locations::all(); + return view('reseller.create', compact(['Providers', 'Locations'])); + } + + public function store(Request $request) + { + + $request->validate([ + 'domain' => 'required|min:4', + 'reseller_type' => 'required', + 'dedicated_ip' => 'present', + 'accounts' => 'numeric', + 'has_dedicated_ip' => 'numeric', + 'server_type' => 'numeric', + 'ram' => 'numeric', + 'disk' => 'numeric', + 'os_id' => 'numeric', + 'provider_id' => 'numeric', + 'location_id' => 'numeric', + 'price' => 'numeric', + 'payment_term' => 'numeric', + 'was_promo' => 'numeric', + 'owned_since' => 'date', + 'domains' => 'numeric', + 'sub_domains' => 'numeric', + 'bandwidth' => 'numeric', + 'email' => 'numeric', + 'ftp' => 'numeric', + 'db' => 'numeric', + 'next_due_date' => 'required|date' + ]); + + $reseller_id = Str::random(8); + + Reseller::create([ + 'id' => $reseller_id, + 'main_domain' => $request->domain, + 'accounts' => $request->accounts, + 'reseller_type' => $request->reseller_type, + 'has_dedicated_ip' => $request->has_dedicated_ip, + 'ip' => $request->dedicated_ip, + 'provider_id' => $request->provider_id, + 'location_id' => $request->location_id, + 'disk' => $request->disk, + 'disk_type' => 'GB', + 'disk_as_gb' => $request->disk, + 'owned_since' => $request->owned_since, + 'bandwidth' => $request->bandwidth, + 'was_promo' => $request->was_promo, + 'domains_limit' => $request->domains, + 'subdomains_limit' => $request->sub_domains, + 'email_limit' => $request->email, + 'ftp_limit' => $request->ftp, + 'db_limit' => $request->db + ]); + + $pricing = new Pricing(); + + $as_usd = $pricing->convertToUSD($request->price, $request->currency); + + Pricing::create([ + 'service_id' => $reseller_id, + 'service_type' => 3, + 'currency' => $request->currency, + 'price' => $request->price, + 'term' => $request->payment_term, + 'as_usd' => $as_usd, + 'usd_per_month' => $pricing->costAsPerMonth($as_usd, $request->payment_term), + 'next_due_date' => $request->next_due_date, + ]); + + return redirect()->route('reseller.index') + ->with('success', 'Reseller hosting created Successfully.'); + } + + + public function show(Reseller $reseller) + { + $reseller_extras = DB::table('reseller_hosting as s') + ->join('pricings as pr', 's.id', '=', 'pr.service_id') + ->join('providers as p', 's.provider_id', '=', 'p.id') + ->join('locations as l', 's.location_id', '=', 'l.id') + ->where('s.id', '=', $reseller->id) + ->get(['s.*', 'p.name as provider_name', 'l.name as location', 'pr.*']); + + $labels = DB::table('labels_assigned as l') + ->join('labels', 'l.label_id', '=', 'labels.id') + ->where('l.service_id', '=', $reseller->id) + ->get(['labels.label']); + + return view('reseller.show', compact(['reseller', 'reseller_extras', 'labels'])); + } + + public function edit(Reseller $reseller) + { + $locations = DB::table('locations')->get(['*']); + $providers = json_decode(DB::table('providers')->get(['*']), true); + + $reseller = DB::table('reseller_hosting as s') + ->join('pricings as p', 's.id', '=', 'p.service_id') + ->where('s.id', '=', $reseller->id) + ->get(['s.*', 'p.*']); + + return view('reseller.edit', compact(['reseller', 'locations', 'providers'])); + } + + public function update(Request $request, Reseller $reseller) + { + $request->validate([ + 'id' => 'required|size:8', + 'domain' => 'required|min:4', + 'reseller_type' => 'required', + 'dedicated_ip' => 'present', + 'has_dedicated_ip' => 'numeric', + 'server_type' => 'numeric', + 'disk' => 'numeric', + 'os_id' => 'numeric', + 'provider_id' => 'numeric', + 'location_id' => 'numeric', + 'price' => 'numeric', + 'payment_term' => 'numeric', + 'was_promo' => 'numeric', + 'owned_since' => 'date', + 'domains' => 'numeric', + 'sub_domains' => 'numeric', + 'bandwidth' => 'numeric', + 'email' => 'numeric', + 'ftp' => 'numeric', + 'db' => 'numeric' + ]); + + DB::table('reseller_hosting') + ->where('id', $request->id) + ->update([ + 'main_domain' => $request->domain, + 'reseller_type' => $request->reseller_type, + 'has_dedicated_ip' => $request->has_dedicated_ip, + 'ip' => $request->dedicated_ip, + 'provider_id' => $request->provider_id, + 'location_id' => $request->location_id, + 'disk' => $request->disk, + 'disk_type' => 'GB', + 'disk_as_gb' => $request->disk, + 'owned_since' => $request->owned_since, + 'bandwidth' => $request->bandwidth, + 'was_promo' => $request->was_promo, + 'domains_limit' => $request->domains, + 'subdomains_limit' => $request->sub_domains, + 'email_limit' => $request->email, + 'ftp_limit' => $request->ftp, + 'db_limit' => $request->db + ]); + + $pricing = new Pricing(); + + $as_usd = $pricing->convertToUSD($request->price, $request->currency); + + DB::table('pricings') + ->where('service_id', $request->id) + ->update([ + 'currency' => $request->currency, + 'price' => $request->price, + 'term' => $request->payment_term, + 'as_usd' => $as_usd, + 'usd_per_month' => $pricing->costAsPerMonth($as_usd, $request->payment_term), + 'next_due_date' => $request->next_due_date, + ]); + + return redirect()->route('reseller.index') + ->with('success', 'Reseller hosting updated Successfully.'); + } + + public function destroy(Reseller $reseller) + { + $id = $reseller->id; + $items = Reseller::find($id); + + $items->delete(); + + $p = new Pricing(); + $p->deletePricing($reseller->id); + + Labels::deleteLabelsAssignedTo($id); + + return redirect()->route('reseller.index') + ->with('success', 'Reseller hosting was deleted Successfully.'); + } +} diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php new file mode 100644 index 0000000..8c6796c --- /dev/null +++ b/app/Http/Controllers/ServerController.php @@ -0,0 +1,306 @@ +join('pricings as pr', 's.id', '=', 'pr.service_id') + ->join('providers as p', 's.provider_id', '=', 'p.id') + ->join('locations as l', 's.location_id', '=', 'l.id') + ->join('os as o', 's.os_id', '=', 'o.id') + ->get(['s.*', 'pr.currency', 'pr.price', 'pr.term', 'pr.as_usd', 'pr.next_due_date', 'p.name as provider_name', 'l.name as location', 'o.name as os_name']); + return view('servers.index', compact(['servers'])); + } + + public function showServersPublic() + { + $settings = DB::table('settings') + ->where('id', '=', 1) + ->get(); + + Session::put('timer_version_footer', $settings[0]->show_versions_footer); + Session::put('show_servers_public', $settings[0]->show_servers_public); + Session::save(); + // dd(Session::all()); + + if (Session::has('show_servers_public') && Session::get('show_servers_public') === 1) { + $servers = DB::table('servers as s') + ->Join('pricings as pr', 's.id', '=', 'pr.service_id') + ->Join('providers as p', 's.provider_id', '=', 'p.id') + ->Join('locations as l', 's.location_id', '=', 'l.id') + ->Join('os as o', 's.os_id', '=', 'o.id') + ->LeftJoin('yabs as y', 's.id', '=', 'y.server_id') + ->LeftJoin('disk_speed as ds', 'y.id', '=', 'ds.id') + ->get(['s.*', 'pr.currency', 'pr.price', 'pr.term', 'pr.as_usd', 'pr.next_due_date', 'pr.service_id', 'p.name as provider_name', 'l.name as location', 'o.name as os_name', 'y.*', 'y.id as yabs_id', 'ds.*']); + + return view('servers.public-index', compact('servers')); + } + return response()->view('errors.404', array("status" => 404, "title" => "Page not found", "message" => ""), 404); + } + + public function create() + { + $Providers = Providers::all(); + $Locations = Locations::all(); + $Os = OS::all(); + return view('servers.create', compact(['Providers', 'Locations', 'Os'])); + } + + public function store(Request $request) + { + + $request->validate([ + 'hostname' => 'required|min:5', + 'ipv4' => 'nullable|ipv4', + 'ipv6' => 'nullable|ipv6', + 'service_type' => 'numeric', + 'server_type' => 'numeric', + 'ram' => 'numeric', + 'disk' => 'numeric', + 'os_id' => 'numeric', + 'provider_id' => 'numeric', + 'location_id' => 'numeric', + 'price' => 'numeric', + 'cpu' => 'numeric', + 'was_promo' => 'numeric', + 'next_due_date' => 'required|date' + ]); + + $server_id = Str::random(8); + + Server::create([ + 'id' => $server_id, + 'hostname' => $request->hostname, + 'ipv4' => $request->ipv4, + 'ipv6' => $request->ipv6, + 'server_type' => $request->server_type, + 'os_id' => $request->os_id, + 'ssh' => $request->ssh_port, + 'provider_id' => $request->provider_id, + 'location_id' => $request->location_id, + 'ram' => $request->ram, + 'ram_type' => $request->ram_type, + 'ram_as_mb' => ($request->ram_type === 'MB') ? $request->ram : ($request->ram / 1000), + 'disk' => $request->disk, + 'disk_type' => $request->disk_type, + 'disk_as_gb' => ($request->disk_type === 'GB') ? $request->disk : ($request->disk * 1000), + 'owned_since' => $request->owned_since, + 'ns1' => $request->ns1, + 'ns2' => $request->ns2, + 'bandwidth' => $request->bandwidth, + 'cpu' => $request->cpu, + 'was_promo' => $request->was_promo + ]); + + $pricing = new Pricing(); + + $as_usd = $pricing->convertToUSD($request->price, $request->currency); + + Pricing::create([ + 'service_id' => $server_id, + 'service_type' => 1, + 'currency' => $request->currency, + 'price' => $request->price, + 'term' => $request->payment_term, + 'as_usd' => $as_usd, + 'usd_per_month' => $pricing->costAsPerMonth($as_usd, $request->payment_term), + 'next_due_date' => $request->next_due_date, + ]); + + $labels_array = [$request->label1, $request->label2, $request->label3, $request->label4]; + + for ($i = 1; $i <= 4; $i++) { + if (!is_null($labels_array[($i - 1)])) { + DB::insert('INSERT INTO labels_assigned (label_id, service_id) values (?, ?)', [$labels_array[($i - 1)], $server_id]); + } + } + + return redirect()->route('servers.index') + ->with('success', 'Server Created Successfully.'); + } + + public function show(Server $server) + { + $server_extras = DB::table('servers as s') + ->join('pricings as pr', 's.id', '=', 'pr.service_id') + ->join('providers as p', 's.provider_id', '=', 'p.id') + ->join('locations as l', 's.location_id', '=', 'l.id') + ->join('os as o', 's.os_id', '=', 'o.id') + ->where('s.id', '=', $server->id) + ->get(['s.*', 'p.name as provider_name', 'l.name as location', 'o.name as os_name', 'pr.*']); + + $labels = DB::table('labels_assigned as l') + ->join('labels', 'l.label_id', '=', 'labels.id') + ->where('l.service_id', '=', $server->id) + ->get(['labels.label']); + + return view('servers.show', compact(['server', 'server_extras', 'labels'])); + } + + public function edit(Server $server) + { + $locations = DB::table('locations')->get(['*']); + $providers = DB::table('providers')->get(['*']); + $labels = DB::table('labels_assigned as l') + ->join('labels', 'l.label_id', '=', 'labels.id') + ->where('l.service_id', '=', $server->id) + ->get(['labels.id', 'labels.label']); + + $os = DB::table('os')->get(['*']); + $server = DB::table('servers as s') + ->join('pricings as p', 's.id', '=', 'p.service_id') + ->where('s.id', '=', $server->id) + ->get(['s.*', 'p.*']); + + return view('servers.edit', compact(['server', 'locations', 'providers', 'os', 'labels'])); + } + + public function update(Request $request, Server $server) + { + $request->validate([ + 'hostname' => 'required|min:5', + 'ram' => 'numeric', + 'disk' => 'numeric', + 'os_id' => 'numeric', + 'provider_id' => 'numeric', + 'location_id' => 'numeric', + 'price' => 'numeric', + 'cpu' => 'numeric', + 'was_promo' => 'numeric' + ]); + + + DB::table('servers') + ->where('id', $request->server_id) + ->update([ + 'hostname' => $request->hostname, + 'ipv4' => $request->ipv4, + 'ipv6' => $request->ipv6, + 'server_type' => $request->server_type, + 'os_id' => $request->os_id, + 'ssh' => $request->ssh, + 'provider_id' => $request->provider_id, + 'location_id' => $request->location_id, + 'ram' => $request->ram, + 'ram_type' => $request->ram_type, + 'ram_as_mb' => ($request->ram_type === 'MB') ? $request->ram : ($request->ram / 1000), + 'disk' => $request->disk, + 'disk_type' => $request->disk_type, + 'disk_as_gb' => ($request->disk_type === 'GB') ? $request->disk : ($request->disk * 1000), + 'owned_since' => $request->owned_since, + 'ns1' => $request->ns1, + 'ns2' => $request->ns2, + 'bandwidth' => $request->bandwidth, + 'cpu' => $request->cpu, + 'was_promo' => $request->was_promo, + 'active' => (isset($request->is_active)) ? 1 : 0 + ]); + + $pricing = new Pricing(); + + $as_usd = $pricing->convertToUSD($request->price, $request->currency); + + DB::table('pricings') + ->where('service_id', $request->server_id) + ->update([ + 'service_type' => 1, + 'currency' => $request->currency, + 'price' => $request->price, + 'term' => $request->payment_term, + 'as_usd' => $as_usd, + 'usd_per_month' => $pricing->costAsPerMonth($as_usd, $request->payment_term), + 'next_due_date' => $request->next_due_date, + 'active' => (isset($request->is_active)) ? 1 : 0 + ]); + + $deleted = DB::table('labels_assigned')->where('service_id', '=', $server->id)->delete(); + + $labels_array = [$request->label1, $request->label2, $request->label3, $request->label4]; + + for ($i = 1; $i <= 4; $i++) { + if (!is_null($labels_array[($i - 1)])) { + DB::insert('INSERT IGNORE INTO labels_assigned ( label_id, service_id) values (?, ?)', [$labels_array[($i - 1)], $request->server_id]); + } + } + + return redirect()->route('servers.index') + ->with('success', 'Server Updated Successfully.'); + } + + public function destroy(Server $server) + { + $items = Server::find($server->id); + + $items->delete(); + + $p = new Pricing(); + $p->deletePricing($server->id); + + Labels::deleteLabelsAssignedTo($server->id); + + return redirect()->route('servers.index') + ->with('success', 'Server was deleted Successfully.'); + } + + public function chooseCompare() + { + $all_servers = Server::where('has_yabs', 1)->get(); + return view('servers.choose-compare', compact('all_servers')); + } + + public function compareServers($server1, $server2) + { + $server1_data = DB::table('servers as s') + ->join('pricings as pr', 's.id', '=', 'pr.service_id') + ->join('providers as p', 's.provider_id', '=', 'p.id') + ->join('locations as l', 's.location_id', '=', 'l.id') + ->Join('yabs as y', 's.id', '=', 'y.server_id') + ->Join('disk_speed as ds', 'y.id', '=', 'ds.id') + ->where('s.id', '=', $server1) + ->get(['s.*', 'p.name as provider_name', 'l.name as location', 'pr.*', 'y.*', 'y.id as yabs_id', 'ds.*']); + + if (count($server1_data) === 0) { + return response()->view('errors.404', array("status" => 404, "title" => "Page not found", "message" => "No server with YABs data was found for id '$server1'"), 404); + } + + $server1_network = DB::table('network_speed') + ->where('id', '=', $server1_data[0]->yabs_id) + ->get(); + + $server2_data = DB::table('servers as s') + ->join('pricings as pr', 's.id', '=', 'pr.service_id') + ->join('providers as p', 's.provider_id', '=', 'p.id') + ->join('locations as l', 's.location_id', '=', 'l.id') + ->Join('yabs as y', 's.id', '=', 'y.server_id') + ->Join('disk_speed as ds', 'y.id', '=', 'ds.id') + ->where('s.id', '=', $server2) + ->get(['s.*', 'p.name as provider_name', 'l.name as location', 'pr.*', 'y.*', 'y.id as yabs_id', 'ds.*']); + + if (count($server2_data) === 0) { + return response()->view('errors.404', array("status" => 404, "title" => "Page not found", "message" => "No server with YABs data was found for id '$server2'"), 404); + } + + $server2_network = DB::table('network_speed') + ->where('id', '=', $server2_data[0]->yabs_id) + ->get(); + + return view('servers.compare', compact('server1_data', 'server2_data', 'server1_network', 'server2_network')); + } +} diff --git a/app/Http/Controllers/SettingsController.php b/app/Http/Controllers/SettingsController.php new file mode 100644 index 0000000..cbf14ab --- /dev/null +++ b/app/Http/Controllers/SettingsController.php @@ -0,0 +1,56 @@ +where('id', '=', 1) + ->get(); + + return view('settings.index', compact(['setting'])); + } + + public function update(Request $request, Settings $settings) + { + $request->validate([ + 'show_versions_footer' => 'required|boolean', + 'show_server_value_ip' => 'required|boolean', + 'show_server_value_hostname' => 'required|boolean', + 'show_server_value_provider' => 'required|boolean', + 'show_server_value_location' => 'required|boolean', + 'show_server_value_price' => 'required|boolean', + 'show_server_value_yabs' => 'required|boolean' + ]); + + DB::table('settings') + ->where('id', 1) + ->update([ + 'show_versions_footer' => $request->show_versions_footer, + 'show_servers_public' => $request->show_servers_public, + 'show_server_value_ip' => $request->show_server_value_ip, + 'show_server_value_hostname' => $request->show_server_value_hostname, + 'show_server_value_provider' => $request->show_server_value_provider, + 'show_server_value_location' => $request->show_server_value_location, + 'show_server_value_price' => $request->show_server_value_price, + 'show_server_value_yabs' => $request->show_server_value_yabs + ]); + + Session::put('timer_version_footer', $request->show_versions_footer); + Session::put('show_servers_public', $request->show_servers_public); + Session::put('show_server_value_ip', $request->show_server_value_ip); + Session::put('show_server_value_hostname', $request->show_server_value_hostname); + Session::save(); + + return redirect()->route('settings.index') + ->with('success', 'Settings Updated Successfully.'); + } + +} diff --git a/app/Http/Controllers/SharedController.php b/app/Http/Controllers/SharedController.php new file mode 100644 index 0000000..a66dca4 --- /dev/null +++ b/app/Http/Controllers/SharedController.php @@ -0,0 +1,216 @@ +join('providers as p', 's.provider_id', '=', 'p.id') + ->join('locations as l', 's.location_id', '=', 'l.id') + ->join('pricings as pr', 's.id', '=', 'pr.service_id') + ->get(['s.*', 'p.name as provider_name', 'pr.*', 'l.name as location']); + + return view('shared.index', compact(['shared'])); + } + + public function create() + { + $Providers = Providers::all(); + $Locations = Locations::all(); + return view('shared.create', compact(['Providers', 'Locations'])); + } + + public function store(Request $request) + { + + $request->validate([ + 'domain' => 'required|min:4', + 'shared_type' => 'required', + 'dedicated_ip' => 'present', + 'has_dedicated_ip' => 'numeric', + 'server_type' => 'numeric', + 'ram' => 'numeric', + 'disk' => 'numeric', + 'os_id' => 'numeric', + 'provider_id' => 'numeric', + 'location_id' => 'numeric', + 'price' => 'numeric', + 'payment_term' => 'numeric', + 'was_promo' => 'numeric', + 'owned_since' => 'date', + 'domains' => 'numeric', + 'sub_domains' => 'numeric', + 'bandwidth' => 'numeric', + 'email' => 'numeric', + 'ftp' => 'numeric', + 'db' => 'numeric', + 'next_due_date' => 'required|date' + ]); + + $shared_id = Str::random(8); + + Shared::create([ + 'id' => $shared_id, + 'main_domain' => $request->domain, + 'shared_type' => $request->shared_type, + 'has_dedicated_ip' => $request->has_dedicated_ip, + 'ip' => $request->dedicated_ip, + 'provider_id' => $request->provider_id, + 'location_id' => $request->location_id, + 'disk' => $request->disk, + 'disk_type' => 'GB', + 'disk_as_gb' => $request->disk, + 'owned_since' => $request->owned_since, + 'bandwidth' => $request->bandwidth, + 'was_promo' => $request->was_promo, + 'domains_limit' => $request->domains, + 'subdomains_limit' => $request->sub_domains, + 'email_limit' => $request->email, + 'ftp_limit' => $request->ftp, + 'db__limit' => $request->db + ]); + + $pricing = new Pricing(); + + $as_usd = $pricing->convertToUSD($request->price, $request->currency); + + Pricing::create([ + 'service_id' => $shared_id, + 'service_type' => 2, + 'currency' => $request->currency, + 'price' => $request->price, + 'term' => $request->payment_term, + 'as_usd' => $as_usd, + 'usd_per_month' => $pricing->costAsPerMonth($as_usd, $request->payment_term), + 'next_due_date' => $request->next_due_date, + ]); + + return redirect()->route('shared.index') + ->with('success', 'Shared hosting created Successfully.'); + } + + public function show(Shared $shared) + { + $shared_extras = DB::table('shared_hosting as s') + ->join('pricings as pr', 's.id', '=', 'pr.service_id') + ->join('providers as p', 's.provider_id', '=', 'p.id') + ->join('locations as l', 's.location_id', '=', 'l.id') + ->where('s.id', '=', $shared->id) + ->get(['s.*', 'p.name as provider_name', 'l.name as location', 'pr.*']); + + $labels = DB::table('labels_assigned as l') + ->join('labels', 'l.label_id', '=', 'labels.id') + ->where('l.service_id', '=', $shared->id) + ->get(['labels.label']); + + return view('shared.show', compact(['shared', 'shared_extras', 'labels'])); + } + + public function edit(Shared $shared) + { + $locations = DB::table('locations')->get(['*']); + $providers = json_decode(DB::table('providers')->get(['*']), true); + + $shared = DB::table('shared_hosting as s') + ->join('pricings as p', 's.id', '=', 'p.service_id') + ->where('s.id', '=', $shared->id) + ->get(['s.*', 'p.*']); + + + return view('shared.edit', compact(['shared', 'locations', 'providers'])); + } + + public function update(Request $request, Shared $shared) + { + $request->validate([ + 'id' => 'required|size:8', + 'domain' => 'required|min:4', + 'shared_type' => 'required', + 'dedicated_ip' => 'present', + 'has_dedicated_ip' => 'numeric', + 'server_type' => 'numeric', + 'disk' => 'numeric', + 'os_id' => 'numeric', + 'provider_id' => 'numeric', + 'location_id' => 'numeric', + 'price' => 'numeric', + 'payment_term' => 'numeric', + 'was_promo' => 'numeric', + 'owned_since' => 'date', + 'domains' => 'numeric', + 'sub_domains' => 'numeric', + 'bandwidth' => 'numeric', + 'email' => 'numeric', + 'ftp' => 'numeric', + 'db' => 'numeric' + ]); + + DB::table('shared_hosting') + ->where('id', $request->id) + ->update([ + 'main_domain' => $request->domain, + 'shared_type' => $request->shared_type, + 'has_dedicated_ip' => $request->has_dedicated_ip, + 'ip' => $request->dedicated_ip, + 'provider_id' => $request->provider_id, + 'location_id' => $request->location_id, + 'disk' => $request->disk, + 'disk_type' => 'GB', + 'disk_as_gb' => $request->disk, + 'owned_since' => $request->owned_since, + 'bandwidth' => $request->bandwidth, + 'was_promo' => $request->was_promo, + 'domains_limit' => $request->domains, + 'subdomains_limit' => $request->sub_domains, + 'email_limit' => $request->email, + 'ftp_limit' => $request->ftp, + 'db_limit' => $request->db + ]); + + $pricing = new Pricing(); + + $as_usd = $pricing->convertToUSD($request->price, $request->currency); + + DB::table('pricings') + ->where('service_id', $request->id) + ->update([ + 'currency' => $request->currency, + 'price' => $request->price, + 'term' => $request->payment_term, + 'as_usd' => $as_usd, + 'usd_per_month' => $pricing->costAsPerMonth($as_usd, $request->payment_term), + 'next_due_date' => $request->next_due_date, + ]); + + return redirect()->route('shared.index') + ->with('success', 'Shared hosting updated Successfully.'); + } + + public function destroy(Shared $shared) + { + $id = $shared->id; + $items = Shared::find($id); + + $items->delete(); + + $p = new Pricing(); + $p->deletePricing($shared->id); + + Labels::deleteLabelsAssignedTo($shared->id); + + return redirect()->route('shared.index') + ->with('success', 'Shared hosting was deleted Successfully.'); + } + +} diff --git a/app/Http/Controllers/YabsController.php b/app/Http/Controllers/YabsController.php new file mode 100644 index 0000000..8d11b39 --- /dev/null +++ b/app/Http/Controllers/YabsController.php @@ -0,0 +1,140 @@ +join('servers as s', 'y.server_id', '=', 's.id') + ->Join('disk_speed as ds', 'y.id', '=', 'ds.id') + ->get(['y.*', 's.hostname', 'ds.*']); + + return view('yabs.index', compact(['yabs'])); + } + + public function create() + { + $Servers = Server::all(); + return view('yabs.create', compact(['Servers'])); + } + + public function store(Request $request) + { + $process = new Process(); + + $yabs = $process->yabsOutputAsJson($request->server_id, $request->yabs); + + if (isset($yabs['error_id'])) { + return redirect()->route('yabs.index') + ->with('error', 'Problem inserting YABs. Error id ' . $yabs['error_id']); + } + //No errors, do insert + + $yabs_id = Str::random(8); + + Yabs::create([ + 'id' => $yabs_id, + 'server_id' => $request->server_id, + 'has_ipv6' => $yabs['has_ipv6'], + 'aes' => $yabs['aes'], + 'vm' => $yabs['vm'], + 'output_date' => $yabs['output_date'], + 'cpu_cores' => $yabs['cpu_cores'], + 'cpu_freq' => $yabs['cpu_freq'], + 'cpu' => $yabs['cpu'], + 'ram' => $yabs['ram'], + 'ram_type' => $yabs['ram_type'], + 'ram_mb' => $yabs['ram_mb'], + 'disk' => $yabs['disk'], + 'disk_type' => $yabs['disk_type'], + 'disk_gb' => $yabs['disk_gb'], + 'gb5_single' => $yabs['GB5_single'], + 'gb5_multi' => $yabs['GB5_mult'], + 'gb5_id' => $yabs['GB5_id'] + ]); + + DiskSpeed::create([ + 'id' => $yabs_id, + 'server_id' => $request->server_id, + 'd_4k' => $yabs['disk_speed']['4k_total'], + 'd_4k_type' => $yabs['disk_speed']['4k_total_type'], + 'd_4k_as_mbps' => $yabs['disk_speed']['4k_total_mbps'], + 'd_64k' => $yabs['disk_speed']['64k_total'], + 'd_64k_type' => $yabs['disk_speed']['64k_total_type'], + 'd_64k_as_mbps' => $yabs['disk_speed']['64k_total_mbps'], + 'd_512k' => $yabs['disk_speed']['512k_total'], + 'd_512k_type' => $yabs['disk_speed']['512k_total_type'], + 'd_512k_as_mbps' => $yabs['disk_speed']['512k_total_mbps'], + 'd_1m' => $yabs['disk_speed']['1m_total'], + 'd_1m_type' => $yabs['disk_speed']['1m_total_type'], + 'd_1m_as_mbps' => $yabs['disk_speed']['1m_total_mbps'] + ]); + + foreach ($yabs['network_speed'] as $y) { + NetworkSpeed::create([ + 'id' => $yabs_id, + 'server_id' => $request->server_id, + 'location' => $y['location'], + 'send' => $y['send'], + 'send_type' => $y['send_type'], + 'send_as_mbps' => $y['send_type_mbps'], + 'receive' => $y['receive'], + 'receive_type' => $y['receive_type'], + 'receive_as_mbps' => $y['receive_type_mbps'] + ]); + } + + $update_server = DB::table('servers') + ->where('id', $request->server_id) + ->update([ + 'ram' => $yabs['ram'], + 'ram_type' => $yabs['ram_type'], + 'ram_as_mb' => ($yabs['ram_type'] === 'GB') ? ($yabs['ram'] * 1000) : $yabs['ram'], + 'disk' => $yabs['disk'], + 'disk_type' => $yabs['disk_type'], + 'disk_as_gb' => ($yabs['disk_type'] === 'TB') ? ($yabs['disk'] * 1000) : $yabs['disk'], + 'cpu' => $yabs['cpu_cores'], + 'has_yabs' => 1 + ]); + + return redirect()->route('yabs.index') + ->with('success', 'Success inserting YABs'); + } + + public function show(Yabs $yab) + { + $yab = DB::table('yabs as y') + ->join('servers as s', 'y.server_id', '=', 's.id') + ->join('disk_speed as ds', 'y.id', '=', 'ds.id') + ->where('y.id', '=', $yab->id) + ->get(['y.*', 's.hostname', 'ds.*']); + + $network = DB::table('network_speed') + ->where('id', '=', $yab[0]->id) + ->get(); + + return view('yabs.show', compact(['yab', 'network'])); + } + + public function destroy(Yabs $yab) + { + $id = $yab->id; + $items = Yabs::find($id); + + $items->delete(); + + return redirect()->route('yabs.index') + ->with('success', 'YABs was deleted Successfully.'); + } +} diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php new file mode 100644 index 0000000..af01a8f --- /dev/null +++ b/app/Http/Kernel.php @@ -0,0 +1,71 @@ + [ + \App\Http\Middleware\EncryptCookies::class, + \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, + \Illuminate\Session\Middleware\StartSession::class, + // \Illuminate\Session\Middleware\AuthenticateSession::class, + \Illuminate\View\Middleware\ShareErrorsFromSession::class, + \App\Http\Middleware\VerifyCsrfToken::class, + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + + 'api' => [ + 'throttle:api', + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + ]; + + /** + * The application's route middleware. + * + * These middleware may be assigned to groups or used individually. + * + * @var array + */ + protected $routeMiddleware = [ + 'auth' => \App\Http\Middleware\Authenticate::class, + 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, + 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, + 'can' => \Illuminate\Auth\Middleware\Authorize::class, + 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, + 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, + 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, + 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, + 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, + ]; + + protected $commands = [ + CreateDatabaseCommand::class + ]; +} diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php new file mode 100644 index 0000000..704089a --- /dev/null +++ b/app/Http/Middleware/Authenticate.php @@ -0,0 +1,21 @@ +expectsJson()) { + return route('login'); + } + } +} diff --git a/app/Http/Middleware/EncryptCookies.php b/app/Http/Middleware/EncryptCookies.php new file mode 100644 index 0000000..033136a --- /dev/null +++ b/app/Http/Middleware/EncryptCookies.php @@ -0,0 +1,17 @@ +check()) { + return redirect(RouteServiceProvider::HOME); + } + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/TrimStrings.php b/app/Http/Middleware/TrimStrings.php new file mode 100644 index 0000000..5a50e7b --- /dev/null +++ b/app/Http/Middleware/TrimStrings.php @@ -0,0 +1,18 @@ +allSubdomainsOfApplicationUrl(), + ]; + } +} diff --git a/app/Http/Middleware/TrustProxies.php b/app/Http/Middleware/TrustProxies.php new file mode 100644 index 0000000..0c7d3b6 --- /dev/null +++ b/app/Http/Middleware/TrustProxies.php @@ -0,0 +1,28 @@ + ['required', 'string', 'email'], + 'password' => ['required', 'string'], + ]; + } + + /** + * Attempt to authenticate the request's credentials. + * + * @return void + * + * @throws \Illuminate\Validation\ValidationException + */ + public function authenticate() + { + $this->ensureIsNotRateLimited(); + + if (! Auth::attempt($this->only('email', 'password'), $this->boolean('remember'))) { + RateLimiter::hit($this->throttleKey()); + + throw ValidationException::withMessages([ + 'email' => __('auth.failed'), + ]); + } + + RateLimiter::clear($this->throttleKey()); + } + + /** + * Ensure the login request is not rate limited. + * + * @return void + * + * @throws \Illuminate\Validation\ValidationException + */ + public function ensureIsNotRateLimited() + { + if (! RateLimiter::tooManyAttempts($this->throttleKey(), 5)) { + return; + } + + event(new Lockout($this)); + + $seconds = RateLimiter::availableIn($this->throttleKey()); + + throw ValidationException::withMessages([ + 'email' => trans('auth.throttle', [ + 'seconds' => $seconds, + 'minutes' => ceil($seconds / 60), + ]), + ]); + } + + /** + * Get the rate limiting throttle key for the request. + * + * @return string + */ + public function throttleKey() + { + return Str::lower($this->input('email')).'|'.$this->ip(); + } +} diff --git a/app/Models/DNS.php b/app/Models/DNS.php new file mode 100644 index 0000000..3b8bff3 --- /dev/null +++ b/app/Models/DNS.php @@ -0,0 +1,17 @@ +where('service_id', '=', $service_id)->delete(); + } + + public static function deleteLabelAssignedAs($label_id) + { + DB::table('labels_assigned')->where('label_id', '=', $label_id)->delete(); + } + +} diff --git a/app/Models/Locations.php b/app/Models/Locations.php new file mode 100644 index 0000000..3151bc2 --- /dev/null +++ b/app/Models/Locations.php @@ -0,0 +1,15 @@ +where('service_id', '=', $id)->delete(); + } +} diff --git a/app/Models/Providers.php b/app/Models/Providers.php new file mode 100644 index 0000000..8a70ebd --- /dev/null +++ b/app/Models/Providers.php @@ -0,0 +1,15 @@ +"; + } else if ($os <= 3) {//Centos + return ""; + } elseif ($os > 3 && $os <= 6) {//Debain + return ""; + } elseif ($os > 6 && $os < 10) {//Fedora + return ""; + } elseif ($os > 10 && $os < 13) {//FreeBSD + return ""; + } elseif ($os > 13 && $os < 16) {//OpenBSD + return ""; + } elseif ($os > 15 && $os < 21) {//Ubuntu + return ""; + } elseif ($os > 20 && $os < 26) {//Windows + return ""; + } else {//OTHER ISO CUSTOM etc + return ""; + } + } + + public static function osIdAsString($os) + { + if ($os === "0") { + return "None"; + } elseif ($os === "1") { + return "CentOS 7"; + } elseif ($os === "2") { + return "CentOS 8"; + } elseif ($os === "3") { + return "CentOS"; + } elseif ($os === "4") { + return "Debian 9"; + } elseif ($os === "5") { + return "Debian 10"; + } elseif ($os === "6") { + return "Debian"; + } elseif ($os === "7") { + return "Fedora 32"; + } elseif ($os === "8") { + return "Fedora 33"; + } elseif ($os === "9") { + return "Fedora"; + } elseif ($os === "10") { + return "FreeBSD 11.4"; + } elseif ($os === "11") { + return "FreeBSD 12.1"; + } elseif ($os === "12") { + return "FreeBSD"; + } elseif ($os === "13") { + return "OpenBSD 6.7"; + } elseif ($os === "14") { + return "OpenBSD 6.8"; + } elseif ($os === "15") { + return "OpenBSD"; + } elseif ($os == "16") { + return "Ubuntu 16.04"; + } elseif ($os === "17") { + return "Ubuntu 18.04"; + } elseif ($os === "18") { + return "Ubuntu 20.04"; + } elseif ($os === "19") { + return "Ubuntu 20.10"; + } elseif ($os === "20") { + return "Ubuntu"; + } elseif ($os === "21") { + return "Windows Server 2008"; + } elseif ($os === "22") { + return "Windows Server 2012"; + } elseif ($os === "23") { + return "Windows Server 2016"; + } elseif ($os === "24") { + return "Windows Server 2019"; + } elseif ($os === "25") { + return "Windows 10"; + } elseif ($os === "26") { + return "Custom"; + } elseif ($os === "27") { + return "Other"; + } else { + return "Unknown"; + } + } + + public static function tableRowCompare(string $val1, string $val2, string $value_type = '', bool $is_int = true) + { + //+303MBps + $str = '' . $value_type . ''; + if ($is_int) { + $val1 = (int)$val1; + $val2 = (int)$val2; + } + if ($val1 > $val2) {//val1 is greater than val2 + $result = '+' . ($val1 - $val2); + if (!empty($value_type)) { + $result = '+' . ($val1 - $val2) . $value_append; + + } + $str .= 'plus-td">' . $result . ''; + } elseif ($val1 < $val2) {//val1 is less than val2 + $result = '-' . ($val2 - $val1); + if (!empty($value_type)) { + $result = '-' . ($val2 - $val1) . $value_append; + } + $str .= 'neg-td">' . $result . ''; + } else {//Equal + $result = 0; + if (!empty($value_type)) { + $result = '0' . $value_append; + } + $str .= 'equal-td">' . $result . ''; + } + return $str; + } + +} diff --git a/app/Models/Settings.php b/app/Models/Settings.php new file mode 100644 index 0000000..eb26f83 --- /dev/null +++ b/app/Models/Settings.php @@ -0,0 +1,13 @@ + 'datetime', + ]; +} diff --git a/app/Models/Yabs.php b/app/Models/Yabs.php new file mode 100644 index 0000000..b627d47 --- /dev/null +++ b/app/Models/Yabs.php @@ -0,0 +1,17 @@ +start_time = microtime(true); + } + + public function stopTimer(): void + { + $this->end_time = microtime(true); + } + + public function getTimeTaken(): float + {//In seconds + return ($this->end_time - $this->start_time) * 100; + } + + public static function paymentTermIntToString(int $term): string + { + if ($term === 1) { + return "p/m"; + } elseif ($term === 2) { + return "p/qtr"; + } elseif ($term === 3) { + return "p/hy"; + } elseif ($term === 4) { + return "p/y"; + } elseif ($term === 5) { + return "p/2y"; + } elseif ($term === 6) { + return "p/3y"; + } else { + return "unknown"; + } + } + + private function floatValue(string $string): float + {//Keeps only numbers and . AKA a float + return preg_replace('/[^0-9,.]/', '', trim($string)); + } + + private function intValue(string $string): int + {//Keeps only numbers AKA an int + return (int)preg_replace('/[^0-9]/', '', trim($string)); + } + + private function removeFloat(string $string): string + {//Removes float from a string + return ltrim(preg_replace('/[^A-Za-z\-,.]/', '', $string), '.'); + } + + private function trimRemoveR(string $string): string + {//Removes \r and does a trim() + return trim(str_replace("\r", '', $string)); + } + + private function datatype(string $string): string + {//Formats data type (ram and disk) + if (str_contains($string, 'M')) { + return 'MB';//Megabytes + } elseif (str_contains($string, 'G')) { + return 'GB';//Gigabytes + } elseif (str_contains($string, 'K')) { + return 'KB';//Kilobytes + } elseif (str_contains($string, 'T')) { + return 'TB';//TeraBytes + } elseif (str_contains($string, 'B')) { + return 'BT';//Bytes + } else { + return "GB"; + } + } + + private function GBtoMB(string $gb): float + {//Gigabyte to Megabyte conversion + return ($gb * 1024); + } + + private function TBtoGB(string $tb): float + {//Terabyte to Gigabyte conversion + return ($tb * 1024); + } + + private function GBpstoMBps(string $gbps, bool $format = false): float + {//Gigabits to Megabits + if ($format) { + return (float)number_format(((float)$gbps * 1000), 3); + } + return (float)$gbps * 1000; + } + + private function diskSpeedAsMbps(string $type, string $value): float + {//If value type GB/s convert to MB/s, KB/s to MB/s + if ($type === "GB/s") { + return $this->GBpstoMBps($value); + } + if ($type === "KB/s") { + return (float)($value / 1000); + } + return $value; + } + + private function networkSpeedAsMbps(string $type, string $value): float + {//If value type GBps convert to MB/s + if ($type === "GBps") { + return $this->GBpstoMBps($value); + } + return $value; + } + + private function yabsSpeedValues(array $data): array + {//Formats YABs speed test for speed value and type as array + $data = explode('|', implode($data)); + if ($data[2] === 'busy') { + $send = $send_type = NULL; + } else { + $send = (float)$data[2]; + if ($this->removeFloat($data[2]) === 'Mbitssec') { + $send_type = "MBps"; + } elseif ($this->removeFloat($data[2]) === 'Gbitssec') { + $send_type = "GBps"; + } elseif ($this->removeFloat($data[2]) === 'Kbitssec') { + $send_type = "KBps"; + } else { + $send_type = $this->removeFloat($data[2]); + } + } + if ($data[3] === 'busy') { + $receive = $receive_type = NULL; + } else { + $receive = (float)$data[3]; + if ($this->removeFloat($data[3]) === 'Mbitssec') { + $receive_type = "MBps"; + } elseif ($this->removeFloat($data[3]) === 'Gbitssec') { + $receive_type = "GBps"; + } elseif ($this->removeFloat($data[3]) === 'Kbitssec') { + $receive_type = "KBps"; + } else { + $receive_type = $this->removeFloat($data[3]); + } + } + return array('send' => $send, 'send_type' => $send_type, 'receive' => $receive, 'receive_type' => $receive_type); + } + + private function yabsSpeedLoc(array $data): array + {//Formats YABs speed test provider and location as array + if ($data[1] === '|') { + $provider = $data[0]; + } else { + $provider = $data[0] . ' ' . $data[1]; + } + if ($data[2] !== '|') { + $location = $data[2] . ' ' . str_replace(',', '', $data[3]); + } else { + $location = $data[3] . ' ' . str_replace(',', '', $data[4]); + } + return array('provider' => $provider, 'location' => $location); + } + + public function yabsOutputAsJson(string $server_id, string $data_from_form): array + { + $file_name = 'tempYabs.txt'; + + Storage::disk('local')->put($file_name, $data_from_form); + + $file = Storage::disk('local')->get($file_name); + + if ($file) { + $array = explode("\n", $file); + Storage::disk('local')->delete($file_name);//Delete file + } else { + return array('error_id' => 10, 'error_message' => 'Issue writing/reading txt file'); + } + + if (count($array) < 47) { + return array('error_id' => 9, 'error_message' => 'Less than 47 lines'); + } + + if (str_contains($array[0], "# ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #\r")) { + if ($array[1] !== "# Yet-Another-Bench-Script #\r") { + return array('error_id' => 8, 'error_message' => 'Didnt copy output correctly'); + } + + $version_array = explode(' ', preg_replace('!\s+!', ' ', $this->trimRemoveR($array[2]))); + if ($version_array[1] === 'v2021-12-28') {//YABs version + $cpu = $this->trimRemoveR(str_replace(':', '', strstr($array[10], ': '))); + $cpu_spec = explode(' ', strstr($array[11], ': '));//: 2 @ 3792.872 MHz + $cpu_cores = $cpu_spec[1]; + $cpu_freq = $cpu_spec[3]; + $ram_line = $this->trimRemoveR(str_replace(':', '', strstr($array[14], ': '))); + $ram = (float)$ram_line; + $ram_type = $this->datatype($ram_line); + $swap_line = $this->trimRemoveR(str_replace(':', '', strstr($array[15], ': '))); + $swap = (float)$swap_line; + $swap_type = $this->datatype($swap_line); + $disk_line = $this->trimRemoveR(str_replace(':', '', strstr($array[16], ': '))); + $disk = (float)$disk_line; + $disk_type = $this->datatype($disk_line); + $io_3 = explode(' ', preg_replace('!\s+!', ' ', $array[24])); + $io_6 = explode(' ', preg_replace('!\s+!', ' ', $array[30])); + (str_contains($array[12], 'Enabled')) ? $aes_ni = true : $aes_ni = false; + (str_contains($array[13], 'Enabled')) ? $vm_amd_v = true : $vm_amd_v = false; + + $d4k_as_mbps = $this->diskSpeedAsMbps($io_3[3], $this->floatValue($io_3[2])); + $d64k_as_mbps = $this->diskSpeedAsMbps($io_3[7], $this->floatValue($io_3[6])); + $d512k_as_mbps = $this->diskSpeedAsMbps($io_6[3], $this->floatValue($io_6[2])); + $d1m_as_mbps = $this->diskSpeedAsMbps($io_6[7], $this->floatValue($io_6[6])); + $disk_test_arr = array( + '4k_total' => $this->floatValue($io_3[2]), + '4k_total_type' => $io_3[3], + '4k_total_mbps' => $d4k_as_mbps, + '64k_total' => $this->floatValue($io_3[6]), + '64k_total_type' => $io_3[7], + '64k_total_mbps' => $d64k_as_mbps, + '512k_total' => $this->floatValue($io_6[2]), + '512k_total_type' => $io_6[3], + '512k_total_mbps' => $d512k_as_mbps, + '1m_total' => $this->floatValue($io_6[6]), + '1m_total_type' => $io_6[7], + '1m_total_mbps' => $d1m_as_mbps, + ); + + if (isset($array[40])) { + if ($array[45] === "Geekbench 5 Benchmark Test:\r") { + //No ipv6 + //Has short ipv4 network speed testing (-r) + $has_ipv6 = false; + $start_st = 36; + $end_st = 43; + $gb_s = 49; + $gb_m = 50; + $gb_url = 51; + } elseif ($array[45] === "Geekbench 4 Benchmark Test:\r") { + return array('error_id' => 6, 'error_message' => 'GeekBench 5 only allowed'); + } elseif ($array[45] === "Geekbench 5 test failed. Run manually to determine cause.\r") { + return array('error_id' => 7, 'error_message' => 'GeekBench test failed'); + } elseif ($array[40] === "Geekbench 5 Benchmark Test:\r") { + //No ipv6 + //Has full ipv4 network speed testing + $has_ipv6 = false; + $start_st = 36; + $end_st = 38; + $gb_s = 44; + $gb_m = 45; + $gb_url = 46; + } elseif ($array[40] === "iperf3 Network Speed Tests (IPv6):\r") { + //HAS ipv6 + //Has short ipv4 & ipv6 network speed testing + $has_ipv6 = true; + $start_st = 36; + $end_st = 38; + $gb_s = 52; + $gb_m = 53; + $gb_url = 54; + } elseif ($array[56] === "Geekbench 5 Benchmark Test:\r") { + //HAS ipv6 + //Has full ipv4 & ipv6 network speed testing + $has_ipv6 = true; + $start_st = 36; + $end_st = 43; + $gb_s = 60; + $gb_m = 61; + $gb_url = 62; + } else { + return array('error_id' => 5, 'error_message' => 'Not correct YABs command output'); + } + } else { + return array('error_id' => 4, 'error_message' => 'Not correct formatting'); + } + $geekbench_single = $this->intValue($array[$gb_s]); + $geekbench_multi = $this->intValue($array[$gb_m]); + $geek_full_url = explode(' ', preg_replace('!\s+!', ' ', $array[$gb_url])); + $gb5_id = (int)substr($geek_full_url[3], strrpos($geek_full_url[3], '/') + 1);// + $has_a_speed_test = false; + + ($ram_type === 'GB') ? $ram_mb = $this->GBtoMB($ram) : $ram_mb = $ram; + ($swap_type === 'GB') ? $swap_mb = $this->GBtoMB($swap) : $swap_mb = $swap; + ($disk_type === 'TB') ? $disk_gb = $this->TBtoGB($disk) : $disk_gb = $disk; + + $date = date_create($array[6]); + + $output = [ + 'id' => $server_id, + 'has_ipv6' => $has_ipv6, + 'output_date' => date_format($date, 'Y-m-d H:i:s'), + 'process_date' => date('Y-m-d H:i:s'), + 'cpu_cores' => (int)$cpu_cores, + 'cpu_freq' => (float)$cpu_freq, + 'cpu' => $cpu, + 'ram' => $ram, + 'ram_type' => $ram_type, + 'ram_mb' => $ram_mb, + 'swap' => $swap, + 'swap_type' => $swap_type, + 'swap_mb' => $swap_mb, + 'disk' => $disk, + 'disk_type' => $disk_type, + 'disk_gb' => $disk_gb, + 'aes' => $aes_ni, + 'vm' => $vm_amd_v, + 'GB5_single' => $geekbench_single, + 'GB5_mult' => $geekbench_multi, + 'GB5_id' => $gb5_id + ]; + + $output['disk_speed'] = $disk_test_arr; + + $speed_test_arr = array(); + + for ($i = $start_st; $i <= $end_st; $i++) { + if (str_contains($array[$i], 'busy')) { + //Has a "busy" result, No insert + } else { + $data = explode(' ', preg_replace('!\s+!', ' ', $array[$i])); + $send_as_mbps = $this->networkSpeedAsMbps($this->yabsSpeedValues($data)['send_type'], $this->yabsSpeedValues($data)['send']); + $recieve_as_mbps = $this->networkSpeedAsMbps($this->yabsSpeedValues($data)['receive_type'], $this->yabsSpeedValues($data)['receive']); + $speed_test_arr[] = array( + 'location' => $this->yabsSpeedLoc($data)['location'], + 'send' => $this->yabsSpeedValues($data)['send'], + 'send_type' => $this->yabsSpeedValues($data)['send_type'], + 'send_type_mbps' => $send_as_mbps, + 'receive' => $this->yabsSpeedValues($data)['receive'], + 'receive_type' => $this->yabsSpeedValues($data)['receive_type'], + 'receive_type_mbps' => $recieve_as_mbps + ); + $has_a_speed_test = true; + } + } + + if ($has_a_speed_test) { + $output['network_speed'] = $speed_test_arr; + } + return $output; + } else { + return array('error_id' => 4, 'error_message' => 'Wrong YABs version'); + } + } else { + return array('error_id' => 3, 'error_message' => 'Didnt start at right spot'); + } + } + + +} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php new file mode 100644 index 0000000..ee8ca5b --- /dev/null +++ b/app/Providers/AppServiceProvider.php @@ -0,0 +1,28 @@ + 'App\Policies\ModelPolicy', + ]; + + /** + * Register any authentication / authorization services. + * + * @return void + */ + public function boot() + { + $this->registerPolicies(); + + // + } +} diff --git a/app/Providers/BroadcastServiceProvider.php b/app/Providers/BroadcastServiceProvider.php new file mode 100644 index 0000000..395c518 --- /dev/null +++ b/app/Providers/BroadcastServiceProvider.php @@ -0,0 +1,21 @@ + [ + SendEmailVerificationNotification::class, + ], + ]; + + /** + * Register any events for your application. + * + * @return void + */ + public function boot() + { + // + } +} diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php new file mode 100644 index 0000000..ca027ea --- /dev/null +++ b/app/Providers/RouteServiceProvider.php @@ -0,0 +1,63 @@ +configureRateLimiting(); + + $this->routes(function () { + Route::prefix('api') + ->middleware('api') + ->namespace($this->namespace) + ->group(base_path('routes/api.php')); + + Route::middleware('web') + ->namespace($this->namespace) + ->group(base_path('routes/web.php')); + }); + } + + /** + * Configure the rate limiters for the application. + * + * @return void + */ + protected function configureRateLimiting() + { + RateLimiter::for('api', function (Request $request) { + return Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip()); + }); + } +} diff --git a/app/View/Components/AppLayout.php b/app/View/Components/AppLayout.php new file mode 100644 index 0000000..b45d342 --- /dev/null +++ b/app/View/Components/AppLayout.php @@ -0,0 +1,18 @@ + Labels::all() + ]); + } +} diff --git a/app/View/Components/LocationsSelect.php b/app/View/Components/LocationsSelect.php new file mode 100644 index 0000000..ba460ab --- /dev/null +++ b/app/View/Components/LocationsSelect.php @@ -0,0 +1,21 @@ + Locations::all() + ]); + } +} diff --git a/app/View/Components/PricingSelect.php b/app/View/Components/PricingSelect.php new file mode 100644 index 0000000..0ee1553 --- /dev/null +++ b/app/View/Components/PricingSelect.php @@ -0,0 +1,28 @@ + Providers::all() + ]); + } +} diff --git a/app/View/Components/TermSelect.php b/app/View/Components/TermSelect.php new file mode 100644 index 0000000..6451fba --- /dev/null +++ b/app/View/Components/TermSelect.php @@ -0,0 +1,28 @@ +make(Illuminate\Contracts\Console\Kernel::class); + +$status = $kernel->handle( + $input = new Symfony\Component\Console\Input\ArgvInput, + new Symfony\Component\Console\Output\ConsoleOutput +); + +/* +|-------------------------------------------------------------------------- +| Shutdown The Application +|-------------------------------------------------------------------------- +| +| Once Artisan has finished running, we will fire off the shutdown events +| so that any final work may be done by the application before we shut +| down the process. This is the last thing to happen to the request. +| +*/ + +$kernel->terminate($input, $status); + +exit($status); diff --git a/assets/css/all.min.css b/assets/css/all.min.css deleted file mode 100644 index 084eda0..0000000 --- a/assets/css/all.min.css +++ /dev/null @@ -1,5 +0,0 @@ -/*! - * Font Awesome Free 5.15.1 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - */ -.fa,.fas,.far,.fal,.fad,.fab{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fas.fa-pull-left,.far.fa-pull-left,.fal.fa-pull-left,.fab.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fas.fa-pull-right,.far.fa-pull-right,.fal.fa-pull-right,.fab.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1,-1);transform:scale(1,-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(-1,-1);transform:scale(-1,-1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-flip-both{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-centos:before{content:"\f789"}.fa-box:before{content:"\f466"}.fa-compact-disc:before{content:"\f51f"}.fa-fedora:before{content:"\f798"}.fa-hdd:before{content:"\f0a0"}.fa-linux:before{content:"\f17c"}.fa-memory:before{content:"\f538"}.fa-microchip:before{content:"\f2db"}.fa-search:before{content:"\f002"}.fa-table:before{content:"\f0ce"}.fa-th:before{content:"\f00a"}.fa-ubuntu:before{content:"\f7df"}.fa-windows:before{content:"\f17a"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:'Font Awesome 5 Brands';font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.eot);src:url("../webfonts/fa-brands-400.eot?#iefix") format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url("../webfonts/fa-brands-400.svg#fontawesome") format("svg")}.fab{font-family:'Font Awesome 5 Brands';font-weight:400}@font-face{font-family:'Font Awesome 5 Free';font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.eot);src:url("../webfonts/fa-regular-400.eot?#iefix") format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url("../webfonts/fa-regular-400.svg#fontawesome") format("svg")}.far{font-family:'Font Awesome 5 Free';font-weight:400}@font-face{font-family:'Font Awesome 5 Free';font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.eot);src:url("../webfonts/fa-solid-900.eot?#iefix") format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url("../webfonts/fa-solid-900.svg#fontawesome") format("svg")}.fa,.fas{font-family:'Font Awesome 5 Free';font-weight:900;margin-right: 0.15rem;} \ No newline at end of file diff --git a/assets/css/style.css b/assets/css/style.css deleted file mode 100644 index fea7246..0000000 --- a/assets/css/style.css +++ /dev/null @@ -1,1569 +0,0 @@ -:root { - --breakpoint-xs: 0; - --breakpoint-sm: 576px; - --breakpoint-md: 768px; - --breakpoint-lg: 992px; - --breakpoint-xl: 1200px; - --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace -} - -*, ::after, ::before { - box-sizing: border-box -} - -html { - font-family: sans-serif; - line-height: 1.15; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; - -ms-overflow-style: scrollbar; - -webkit-tap-highlight-color: transparent -} - -body { - margin: 0; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: #212529; - text-align: left; - background-color: #00000003 -} - - -.container { - width: 100%; - padding-right: 15px; - padding-left: 15px; - margin-right: auto; - margin-left: auto -} - -@media (min-width: 576px) { - .container { - max-width: 540px - } -} - -@media (min-width: 768px) { - .container { - max-width: 720px - } - .nav-link { - padding: .5rem 0.45rem; - } -} - -@media (min-width: 992px) { - .container { - max-width: 960px - } -} - -@media (min-width: 1200px) { - .container { - max-width: 1140px - } -} - -.row { - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - margin-right: -15px; - margin-left: -15px -} - -.col-12, .col-2, .col-3, .col-4, .col-6, .col-8, .col-9, .col-lg-12, .col-md-12, .col-md-2, .col-md-3, .col-md-4, .col-md-6, .col-sm-6, .col-xl-10, .col-xl-2, .col-xl-3 { - position: relative; - width: 100%; - min-height: 1px; - padding-right: 15px; - padding-left: 15px -} - -.col-2 { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667% -} - -.col-3 { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25% -} - -.col-4 { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333% -} - -.col-6 { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50% -} - -.col-8 { - -ms-flex: 0 0 66.666667%; - flex: 0 0 66.666667%; - max-width: 66.666667% -} - -.col-9 { - -ms-flex: 0 0 75%; - flex: 0 0 75%; - max-width: 75% -} - -.col-12 { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100% -} - -@media (min-width: 576px) { - .col-sm-6 { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50% - } -} - -@media (min-width: 768px) { - .col-md-2 { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667% - } - - .col-md-3 { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25% - } - - .col-md-4 { - -ms-flex: 0 0 33.333333%; - flex: 0 0 33.333333%; - max-width: 33.333333% - } - - .col-md-6 { - -ms-flex: 0 0 50%; - flex: 0 0 50%; - max-width: 50% - } - - .col-md-12 { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100% - } -} - -@media (min-width: 992px) { - .col-lg-12 { - -ms-flex: 0 0 100%; - flex: 0 0 100%; - max-width: 100% - } -} - -@media (min-width: 1200px) { - .col-xl-2 { - -ms-flex: 0 0 16.666667%; - flex: 0 0 16.666667%; - max-width: 16.666667% - } - - .col-xl-3 { - -ms-flex: 0 0 25%; - flex: 0 0 25%; - max-width: 25% - } - - .col-xl-10 { - -ms-flex: 0 0 83.333333%; - flex: 0 0 83.333333%; - max-width: 83.333333% - } -} - -.mm-col { - margin-bottom: 0.2rem; -} - -[tabindex="-1"]:focus { - outline: 0 !important -} - -h2, h4, h6 { - margin-top: 0; - margin-bottom: .5rem; - font-family: inherit; - font-weight: 500; - line-height: 1.2; - color: inherit -} - -h2 { - font-size: 2rem -} - -h4 { - font-size: 1.5rem -} - -h6 { - font-size: 1rem -} - -p { - margin-top: 0; - margin-bottom: 1rem -} - -ul { - margin-top: 0; - margin-bottom: 1rem -} - -b { - font-weight: bolder -} - -a { - color: #007bff; - text-decoration: none; - background-color: transparent; - -webkit-text-decoration-skip: objects -} - -a:hover { - color: #0056b3; - text-decoration: underline -} - -code { - font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; - font-size: 82%; - color: #e83e8c; - word-break: break-word -} - -table { - border-collapse: collapse -} - -th { - text-align: inherit -} - -label { - display: inline-block; - margin-bottom: .5rem -} - -button { - border-radius: 0 -} - -button:focus { - outline: 1px dotted; - outline: 5px auto -webkit-focus-ring-color -} - -button, input, select, textarea { - margin: 0; - font-family: inherit; - font-size: inherit; - line-height: inherit -} - -button, input { - overflow: visible -} - -button, select { - text-transform: none -} - -[type=submit], button, html [type=button] { - -webkit-appearance: button -} - -[type=button]::-moz-focus-inner, [type=submit]::-moz-focus-inner, button::-moz-focus-inner { - padding: 0; - border-style: none -} - -input[type=checkbox] { - box-sizing: border-box; - padding: 0 -} - -input[type=date] { - -webkit-appearance: listbox -} - -textarea { - overflow: auto; - resize: vertical -} - -[type=number]::-webkit-inner-spin-button, [type=number]::-webkit-outer-spin-button { - height: auto -} - -::-webkit-file-upload-button { - font: inherit; - -webkit-appearance: button -} - -.table { - width: 100%; - margin-bottom: 1rem; - background-color: transparent -} - -.table td, .table th { - padding: .75rem; - border-top: 1px solid #dee2e6 -} - -.table thead th { - vertical-align: bottom; - border-bottom: 2px solid #dee2e6; - font-weight: 600; -} - -.table-sm td, .table-sm th { - padding: .3rem -} - -.table-bordered { - border: 1px solid #dee2e6 -} - -.table-bordered td, .table-bordered th { - border: 1px solid #dee2e6 -} - -.table-bordered thead th { - border-bottom-width: 2px -} - -.table-striped tbody tr:nth-of-type(odd) { - background-color: rgba(0, 0, 0, .05) -} - -.table-responsive { - display: block; - width: 100%; - overflow-x: auto; - -webkit-overflow-scrolling: touch; - -ms-overflow-style: -ms-autohiding-scrollbar -} - -.table-responsive > .table-bordered { - border: 0 -} - -.form-control { - display: block; - width: 100%; - height: calc(2.25rem + 2px); - padding: .375rem .75rem; - font-size: 1rem; - line-height: 1.5; - color: #495057; - background-color: #fff; - background-clip: padding-box; - border: 1px solid #ced4da; - border-radius: .25rem; - transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out -} - -@media screen and (prefers-reduced-motion: reduce) { - .form-control { - transition: none - } -} - -.form-control::-ms-expand { - background-color: transparent; - border: 0 -} - -.form-control:focus { - color: #495057; - background-color: #fff; - border-color: #80bdff; - outline: 0; - box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.form-control::-webkit-input-placeholder { - color: #6c757d; - opacity: 1 -} - -.form-control::-moz-placeholder { - color: #6c757d; - opacity: 1 -} - -.form-control:-ms-input-placeholder { - color: #6c757d; - opacity: 1 -} - -.form-control::-ms-input-placeholder { - color: #6c757d; - opacity: 1 -} - -.form-control:disabled { - background-color: #e9ecef; - opacity: 1 -} - -select.form-control:focus::-ms-value { - color: #495057; - background-color: #fff -} - -textarea.form-control { - height: auto -} - -.form-group { - margin-bottom: 1rem -} - -.form-row { - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - margin-right: -5px; - margin-left: -5px -} - -.form-row > [class*=col-] { - padding-right: 5px; - padding-left: 5px -} - -.form-check { - position: relative; - display: block; - padding-left: 1.25rem -} - -.form-check-input { - position: absolute; - margin-top: .3rem; - margin-left: -1.25rem -} - -.form-check-input:disabled ~ .form-check-label { - color: #6c757d -} - -.form-check-label { - margin-bottom: 0 -} - -.btn { - display: inline-block; - font-weight: 400; - text-align: center; - white-space: nowrap; - vertical-align: middle; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - border: 1px solid transparent; - padding: .375rem .75rem; - font-size: 1rem; - line-height: 1.5; - border-radius: 0.2rem; - transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out -} - -@media screen and (prefers-reduced-motion: reduce) { - .btn { - transition: none - } -} - -.btn:focus, .btn:hover { - text-decoration: none -} - -.btn:focus { - outline: 0; - box-shadow: 0 0 0 .2rem rgba(0, 123, 255, .25) -} - -.btn:disabled { - opacity: .65 -} - -.btn:not(:disabled):not(.disabled) { - cursor: pointer -} - -.btn-block { - display: block; - width: 100% -} - -input[type=submit].btn-block { - width: 100% -} - -.fade { - transition: opacity .15s linear -} - -@media screen and (prefers-reduced-motion: reduce) { - .fade { - transition: none - } -} - -.fade:not(.show) { - opacity: 0 -} - -.input-group { - position: relative; - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - -ms-flex-align: stretch; - align-items: stretch; - width: 100% -} - -.input-group > .form-control { - position: relative; - -ms-flex: 1 1 auto; - flex: 1 1 auto; - width: 1%; - margin-bottom: 0 -} - -.input-group > .form-control:focus { - z-index: 3 -} - -.input-group > .form-control:not(:last-child) { - border-top-right-radius: 0; - border-bottom-right-radius: 0 -} - -.input-group > .form-control:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0 -} - -.input-group-append, .input-group-prepend { - display: -ms-flexbox; - display: flex -} - -.input-group-prepend { - margin-right: -1px -} - -.input-group-append { - margin-left: -1px -} - -.input-group-text { - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - padding: .375rem .75rem; - margin-bottom: 0; - font-size: 1rem; - font-weight: 400; - line-height: 1.5; - color: #495057; - text-align: center; - white-space: nowrap; - background-color: #e9ecef; - border: 1px solid #ced4da; - border-radius: .25rem -} - -.input-group > .input-group-prepend > .input-group-text { - border-top-right-radius: 0; - border-bottom-right-radius: 0 -} - -.input-group > .input-group-append > .input-group-text { - border-top-left-radius: 0; - border-bottom-left-radius: 0 -} - -.nav { - display: -ms-flexbox; - display: flex; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - padding-left: 0; - margin-bottom: 0; - list-style: none -} - -.nav-link { - display: block; - padding: .5rem 1rem -} - -.nav-link:focus, .nav-link:hover { - text-decoration: none -} - -.nav-tabs { - border-bottom: 1px solid #dee2e6 -} - -.nav-tabs .nav-item { - margin-bottom: -1px -} - -.nav-tabs .nav-link { - border: 1px solid transparent; - border-top-left-radius: .25rem; - border-top-right-radius: .25rem -} - -.nav-tabs .nav-link:focus, .nav-tabs .nav-link:hover { - border-color: #e9ecef #e9ecef #dee2e6 -} - -.nav-tabs .nav-link.active { - color: #495057; - background-color: #fff; - border-color: #dee2e6 #dee2e6 #fff -} - -.tab-content > .tab-pane { - display: none -} - -.tab-content > .active { - display: block -} - -.navbar-toggler:not(:disabled):not(.disabled) { - cursor: pointer -} - -.card { - position: relative; - display: -ms-flexbox; - display: flex; - -ms-flex-direction: column; - flex-direction: column; - min-width: 0; - word-wrap: break-word; - background-color: #fff; - background-clip: border-box; - border: 1px solid rgba(0, 0, 0, .125); - border-radius: .25rem -} - -.card-body { - -ms-flex: 1 1 auto; - flex: 1 1 auto; - padding: 1.25rem -} - -.card-header { - padding: .75rem 1.25rem; - margin-bottom: 0; - background-color: rgba(0, 0, 0, .03); - border-bottom: 1px solid rgba(0, 0, 0, .125) -} - -.card-header:first-child { - border-radius: calc(.25rem - 1px) calc(.25rem - 1px) 0 0 -} - -.page-link:not(:disabled):not(.disabled) { - cursor: pointer -} - -.close { - float: right; - font-size: 1.5rem; - font-weight: 700; - line-height: 1; - color: #000; - text-shadow: 0 1px 0 #fff; - opacity: .5 -} - -.close:not(:disabled):not(.disabled) { - cursor: pointer -} - -.close:not(:disabled):not(.disabled):focus, .close:not(:disabled):not(.disabled):hover { - color: #000; - text-decoration: none; - opacity: .75 -} - -button.close { - padding: 0; - background-color: transparent; - border: 0; - -webkit-appearance: none -} - -.modal-open .modal { - overflow-x: hidden; - overflow-y: auto -} - -.modal { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1050; - display: none; - overflow: hidden; - outline: 0 -} - -.modal-dialog { - position: relative; - width: auto; - margin: .5rem; - pointer-events: none -} - -.modal.fade .modal-dialog { - transition: -webkit-transform .3s ease-out; - transition: transform .3s ease-out; - transition: transform .3s ease-out, -webkit-transform .3s ease-out; - -webkit-transform: translate(0, -25%); - transform: translate(0, -25%) -} - -@media screen and (prefers-reduced-motion: reduce) { - .modal.fade .modal-dialog { - transition: none - } -} - -.modal.show .modal-dialog { - -webkit-transform: translate(0, 0); - transform: translate(0, 0) -} - -.modal-content { - position: relative; - display: -ms-flexbox; - display: flex; - -ms-flex-direction: column; - flex-direction: column; - width: 100%; - pointer-events: auto; - background-color: #fff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, .2); - border-radius: .3rem; - outline: 0 -} - -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000 -} - -.modal-backdrop.fade { - opacity: 0 -} - -.modal-backdrop.show { - opacity: .5 -} - -.modal-header { - display: -ms-flexbox; - display: flex; - -ms-flex-align: start; - align-items: flex-start; - -ms-flex-pack: justify; - justify-content: space-between; - padding: 1rem; - border-bottom: 1px solid #e9ecef; - border-top-left-radius: .3rem; - border-top-right-radius: .3rem -} - -.modal-header .close { - padding: 1rem; - margin: -1rem -1rem -1rem auto -} - -.modal-title { - margin-bottom: 0; - line-height: 1.5 -} - -.modal-body { - position: relative; - -ms-flex: 1 1 auto; - flex: 1 1 auto; - padding: 1rem -} - -@media (min-width: 576px) { - .modal-dialog { - max-width: 500px; - margin: 1.75rem auto - } -} - -.w-100 { - width: 100% !important -} - -.text-center { - text-align: center !important -} - -@media print { - *, ::after, ::before { - text-shadow: none !important; - box-shadow: none !important - } - - a:not(.btn) { - text-decoration: underline - } - - thead { - display: table-header-group - } - - tr { - page-break-inside: avoid - } - - h2, p { - orphans: 3; - widows: 3 - } - - h2 { - page-break-after: avoid - } - - @page { - size: a3 - } - - body { - min-width: 992px !important - } - - .container { - min-width: 992px !important - } - - .table { - border-collapse: collapse !important - } - - .table td, .table th { - background-color: #fff !important - } - - .table-bordered td, .table-bordered th { - border: 1px solid #dee2e6 !important - } -} - -.form-row { - margin: .8rem 0 -} - -.nav-tabs .nav-link.active { - color: #495057; - background-color: #ecf0f5; - border-color: #dee2e6 #dee2e6 #ecf0f5 -} - -.card { - box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.10), 2px 2px 16px rgba(0, 0, 0, 0.10) -} - -.card-header { - padding: .65rem 1rem -} - -.card-body { - padding: 1rem .8rem .4rem -} - -.os-col { - margin-top: .3rem -} - -.btn { - padding: .08rem 1.5rem -} - -.order-btn { - padding: .4rem 2rem -} - -.dd-text { - margin-bottom: .5rem; - color: #1c2f6abf -} - -.no-dd { - margin-bottom: .5rem; - visibility: hidden -} - -.no-loc, .no-prov { - visibility: hidden -} - -.form-control:focus { - color: #495057; - background-color: #fff; - border-color: #80bdffb8; - outline: 0; - box-shadow: 0 0 0 .2rem rgba(0, 123, 255, 0.07) -} - -.value { - display: inline; - margin-bottom: .4rem; - font-size: 0.91rem; -} - -.price { - color: #000000a1; - text-align: center; - font-style: italic -} - -.obj-card { - padding: 0 0 .1rem; - margin: 0 .2rem 1.6rem; - border: 1px solid #4562684d; - box-shadow: 2px 2px 6px rgba(0, 0, 0, 0.15), 3px 3px 12px rgba(0, 0, 0, 0.20); - transition: .5s ease-in-out -} - -.obj-card:hover { - padding: 0 0 .1rem; - margin: 0 .2rem 1.6rem; - border: 1px solid rgba(36, 36, 36, 0.25) -} - -.footer-row { - margin-top: 1rem; - text-align: center -} - -.footer-text { - color: #525252c9; - font-size: .85rem -} - -.footer-text:hover { - color: #5d8ecb; - text-decoration: none -} - -.special-card { - border-left: 1px solid #eab22d59 -} - -.form-or { - margin: 1rem 0; - text-align: center -} - -.hostname-header { - font-size: 1.1rem; - margin-bottom: 0; - text-align: center -} - -.m-desc { - color: #000000a1; - margin-bottom: .4rem; - display: inline -} - -.m-value { - display: inline; - margin-bottom: .4rem -} - -.m-row { - margin-bottom: .2rem -} - -.m-section-row { - margin-top: .6rem -} - -.m-section-text { - color: #5e66b5; - font-weight: 500; - margin: .4rem 0; - font-size: 1.1rem -} - -.object-count { - color: #00000061; - font-size: .9rem; - margin-left: 1.2rem -} - -.card-section-header { - color: #4f4f64; - letter-spacing: .05rem; - margin-bottom: 1.2rem; - padding-left: 1rem -} - -.modal-header { - text-align: center -} - -.info-desc { - color: #000000a1; - margin-bottom: .4rem; - display: inline -} - -.info-val { - color: #000000d1 -} - -.info-row { - margin-bottom: .6rem -} - -.collapse:not(.show) { - display: none -} - -.collapse { - margin: .2rem 0 -} - -.collapse-btn { - padding: .2rem .6rem; - margin: .5rem 0 -} - -.table-val-type { - color: #000000d1; - font-size: 80%; - margin-left: .05rem -} - -.data-type { - color: #212529b3; - padding-left: .05rem; - font-size: 85% -} - -.location { - margin-bottom: .4rem -} - -.mem-disk-row, .cpu-row { - text-align: center; - margin-bottom: .6rem -} - -.modal-header { - padding: .8rem; - background-color: #2d446708 -} - -.form-check { - position: relative; - display: block; - padding-left: 1.25rem; - margin-top: .3rem -} - -.fas { - font-weight: 900; - color: #00000096 -} - -.fa-search { - color: #537cf7; -} - -.os-icon { - color: #6f6b6b; -} - -.green-fa { - color: #51bf51; -} - -.red-fa { - color: #bf5151; -} - -.fa-th, .fa-table { - color: #8787ff; - font-size: 1.2rem; -} - -.os-td { - text-align: center; - vertical-align: middle; -} - -.objects-table td, .objects-table th { - padding: 0.6rem 0.4rem; -} - -.objects-table tr { - transition: ease-in-out 0.4s; -} - -.objects-table tr:hover { - background: #f2f7fb; -} - -.td-text-sml { - font-size: 86%; -} - -.td-text-med { - font-size: 90%; -} - -.td-special-price { - background: #ffd70014; -} - -.td-due-soon { - background: #ff00000f; -} - -.td-not-due-soon { - background: #00ff340f; -} - -.objects-table th:first-child, .objects-table td:first-child, .compare-table th:first-child, .compare-table td:first-child { - position: sticky; - left: 0; - background-color: #f6f6f6; - text-align: left; -} - -.compare-table td, .compare-table th { - text-align: center; -} - -.plus-td { - background: #71ed7136; -} - -.neg-td { - background: #ed827136; -} - -.equal-td { - background: #6189ff26; -} - -.table-btn { - font-size: 0.8rem; - padding: .01rem 0.6rem; -} - -.td-nowrap { - white-space: nowrap; -} - -.tab-pane { - margin-top: .8rem -} - -.mt-1 { - margin-top: 1rem; -} - -.input-group-text { - color: #2d3032; - background-color: #dbe4ee; - border: 1px solid #8598ac2b -} - -.nav-tabs .nav-link.active { - color: #494f55; - background-color: #ecf0f5; - border-color: #b6b7b7 #dee2e6 #76787b; - transition: .3s ease-in-out -} - -.nav-tabs .nav-link { - color: #4077b2 -} - -.btn-main { - color: #f7f7f7; - background-color: #5a95f5; - border-color: #3a73cf6b -} - -.btn-main:hover, .btn-main:focus, .btn-main:active { - color: #f7f7f7; - background-color: #4984e3; - border-color: #3a73cf -} - -.btn-main:active, .btn-second:active, .btn-third:active { - background-image: none -} - -.btn-second { - color: #f7f7f7; - background-color: #30cfc0; - border-color: #2ea69a75 -} - -.btn-second:hover, .btn-second:focus, .btn-second:active { - color: #f7f7f7; - background-color: #26bdae; - border-color: #2ea69a; -} - -.btn-third { - color: #f7f7f7; - background-color: #f06f6f; - border-color: #df4b4b66; -} - -.btn-third:hover, .btn-third:focus, .btn-third:active { - color: #f7f7f7; - background-color: #e95656; - border-color: #a62e2e8f; -} - -.view-yabs-btn { - margin-bottom: 1rem -} - -.tags-list { - color: #4f8665; - list-style: none -} - -.tags-list::before { - display: inline-block; - width: 1em; - margin-left: -1em; - content: "#" -} - -.bootstrap-tagsinput { - background-color: #fff; - border: 1px solid #ccc; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - display: inline-block; - padding: .6rem .2rem; - color: #555; - vertical-align: middle; - border-radius: 4px; - max-width: 100%; - line-height: 22px; - cursor: text -} - -.bootstrap-tagsinput input { - border: 0; - box-shadow: none; - outline: 0; - background-color: transparent; - padding: 0 6px; - margin: 0; - width: auto; - max-width: inherit -} - -.bootstrap-tagsinput input:focus { - border: 0; - box-shadow: none -} - -.bootstrap-tagsinput .tag { - margin-right: .05rem; - color: #f6f6f6; - background: #83a1fa; - padding: .1rem; - border-radius: .18rem -} - -.bootstrap-tagsinput .tag [data-role="remove"] { - margin-left: 8px; - cursor: pointer -} - -.bootstrap-tagsinput .tag [data-role="remove"]:after { - content: "x"; - padding: 0 2px -} - -.bootstrap-tagsinput .tag [data-role="remove"]:hover { - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05) -} - -.bootstrap-tagsinput .tag [data-role="remove"]:hover:active { - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125) -} - -.ui-helper-hidden-accessible { - border: 0; - clip: rect(0 0 0 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - width: 1px -} - -.ui-front { - z-index: 100 -} - -.ui-autocomplete { - position: absolute; - top: 0; - left: 0; - cursor: default -} - -.ui-menu { - list-style: none; - padding: 0; - margin: 0; - display: block; - outline: 0 -} - -.ui-menu .ui-menu-item { - margin: 0; - cursor: pointer; - list-style-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7) -} - -.ui-menu .ui-menu-item-wrapper { - position: relative; - padding: 3px 1em 3px .4em -} - -.ui-menu-item:hover { - background: #b6b6b61f -} - -.ui-widget { - font-family: Arial, Helvetica, sans-serif; - font-size: 1em -} - -.ui-widget.ui-widget-content { - border: 1px solid #c5c5c5 -} - -.ui-widget-content { - border: 1px solid #ddd; - background: #fff; - color: #333 -} - -.switch { - position: relative; - display: block; - width: 3.8rem; - height: 1.9rem -} - -.switch input { - opacity: 0; - width: 0; - height: 0 -} - -input[type="checkbox"], input[type="radio"] { - box-sizing: border-box; - padding: 0; - margin-right: .2rem -} - -.slider { - position: absolute; - cursor: pointer; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-color: #747ba463; - -webkit-transition: .2s; - transition: .2s -} - -.slider::before { - position: absolute; - content: ""; - height: 18px; - width: 18px; - left: 10px; - bottom: 6px; - background-color: #ececec; - -webkit-transition: .2s; - transition: .2s -} - -input:checked + .slider { - background-color: #649fca -} - -input:focus + .slider { - box-shadow: 0 0 1px #2196f3 -} - -input:checked + .slider:before { - -webkit-transform: translateX(26px); - -ms-transform: translateX(26px); - transform: translateX(26px) -} - -.slider.round { - border-radius: 1rem -} - -.slider.round:before { - border-radius: 50% -} - -.form-control:disabled, .form-control[readonly] { - background-color: #f0f0f0; -} - -.search-result { - padding: .6rem 0; - border: 1px #0000001c solid; - border-radius: .2rem; - margin: .4rem 0; - background: #fafafa; - box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.10), 2px 2px 12px rgba(0, 0, 0, 0.10); - transition: ease-in-out .5s -} - -.search-result:hover { - background: #f4f4f4 -} - -.btn-group-toggle > .btn input[type="checkbox"], .btn-group-toggle > .btn input[type="radio"], .btn-group-toggle > .btn-group > .btn input[type="checkbox"], .btn-group-toggle > .btn-group > .btn input[type="radio"] { - position: absolute; - clip: rect(0, 0, 0, 0); - pointer-events: none -} - -.btn-bar:not(:disabled):not(.disabled).active, .btn-bar:not(:disabled):not(.disabled):active { - color: #fff; - background-color: #1f6ec2; - border-color: #4b72ae -} - -.btn-bar:not(:disabled):not(.disabled).active:focus, .btn-bar:not(:disabled):not(.disabled):active:focus, .show > .btn-bar.dropdown-toggle:focus { - box-shadow: 0 0 0 .2rem rgba(108, 117, 125, .5) -} - -.btn:not(:disabled):not(.disabled) { - cursor: pointer -} - -.bd-example > .btn-group { - margin-top: .25rem; - margin-bottom: .25rem -} - -.btn-group, .btn-group-vertical { - position: relative; - display: -webkit-inline-box; - display: -ms-inline-flexbox; - display: inline-flex; - vertical-align: middle -} - -.btn-bar { - padding: .3rem .8rem; - border-bottom-right-radius: 0; - border-top-right-radius: 0; - border-bottom-left-radius: .2rem; - border-top-left-radius: .2rem -} - -.btn-group > .btn-group:not(:first-child) > .btn, .btn-group > .btn:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0 -} - -.btn-group > .btn-bar:last-child { - border-top-right-radius: .2rem; - border-bottom-right-radius: .2rem -} - -@media only screen and (max-width: 620px) { - .btn-bar-col { - overflow-x: scroll - } -} - -@media (min-width: 992px) { - .modal-lg { - max-width: 800px; - } -} - -@media (max-width: 700px) { - .nav-link { - padding: 0.5rem 0.45rem; - } -} \ No newline at end of file diff --git a/assets/favicon.ico b/assets/favicon.ico deleted file mode 100644 index 8ffe9385fb273d23b334a50e5b672316e88d196e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12862 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 Bmbw4{ diff --git a/assets/js/bootstrap.min.js b/assets/js/bootstrap.min.js deleted file mode 100644 index b633370..0000000 --- a/assets/js/bootstrap.min.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery"),require("popper.js")):"function"==typeof define&&define.amd?define(["exports","jquery","popper.js"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap={},t.jQuery,t.Popper)}(this,(function(t,e,n){"use strict";function i(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var o=i(e),a=i(n);function s(t,e){for(var n=0;n=4)throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}};d.jQueryDetection(),o.default.fn.emulateTransitionEnd=u,o.default.event.special[d.TRANSITION_END]={bindType:"transitionend",delegateType:"transitionend",handle:function(t){if(o.default(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}};var f="alert",c=o.default.fn[f],h=function(){function t(t){this._element=t}var e=t.prototype;return e.close=function(t){var e=this._element;t&&(e=this._getRootElement(t)),this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},e.dispose=function(){o.default.removeData(this._element,"bs.alert"),this._element=null},e._getRootElement=function(t){var e=d.getSelectorFromElement(t),n=!1;return e&&(n=document.querySelector(e)),n||(n=o.default(t).closest(".alert")[0]),n},e._triggerCloseEvent=function(t){var e=o.default.Event("close.bs.alert");return o.default(t).trigger(e),e},e._removeElement=function(t){var e=this;if(o.default(t).removeClass("show"),o.default(t).hasClass("fade")){var n=d.getTransitionDurationFromElement(t);o.default(t).one(d.TRANSITION_END,(function(n){return e._destroyElement(t,n)})).emulateTransitionEnd(n)}else this._destroyElement(t)},e._destroyElement=function(t){o.default(t).detach().trigger("closed.bs.alert").remove()},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this),i=n.data("bs.alert");i||(i=new t(this),n.data("bs.alert",i)),"close"===e&&i[e](this)}))},t._handleDismiss=function(t){return function(e){e&&e.preventDefault(),t.close(this)}},l(t,null,[{key:"VERSION",get:function(){return"4.5.3"}}]),t}();o.default(document).on("click.bs.alert.data-api",'[data-dismiss="alert"]',h._handleDismiss(new h)),o.default.fn[f]=h._jQueryInterface,o.default.fn[f].Constructor=h,o.default.fn[f].noConflict=function(){return o.default.fn[f]=c,h._jQueryInterface};var g=o.default.fn.button,m=function(){function t(t){this._element=t,this.shouldAvoidTriggerChange=!1}var e=t.prototype;return e.toggle=function(){var t=!0,e=!0,n=o.default(this._element).closest('[data-toggle="buttons"]')[0];if(n){var i=this._element.querySelector('input:not([type="hidden"])');if(i){if("radio"===i.type)if(i.checked&&this._element.classList.contains("active"))t=!1;else{var a=n.querySelector(".active");a&&o.default(a).removeClass("active")}t&&("checkbox"!==i.type&&"radio"!==i.type||(i.checked=!this._element.classList.contains("active")),this.shouldAvoidTriggerChange||o.default(i).trigger("change")),i.focus(),e=!1}}this._element.hasAttribute("disabled")||this._element.classList.contains("disabled")||(e&&this._element.setAttribute("aria-pressed",!this._element.classList.contains("active")),t&&o.default(this._element).toggleClass("active"))},e.dispose=function(){o.default.removeData(this._element,"bs.button"),this._element=null},t._jQueryInterface=function(e,n){return this.each((function(){var i=o.default(this),a=i.data("bs.button");a||(a=new t(this),i.data("bs.button",a)),a.shouldAvoidTriggerChange=n,"toggle"===e&&a[e]()}))},l(t,null,[{key:"VERSION",get:function(){return"4.5.3"}}]),t}();o.default(document).on("click.bs.button.data-api",'[data-toggle^="button"]',(function(t){var e=t.target,n=e;if(o.default(e).hasClass("btn")||(e=o.default(e).closest(".btn")[0]),!e||e.hasAttribute("disabled")||e.classList.contains("disabled"))t.preventDefault();else{var i=e.querySelector('input:not([type="hidden"])');if(i&&(i.hasAttribute("disabled")||i.classList.contains("disabled")))return void t.preventDefault();"INPUT"!==n.tagName&&"LABEL"===e.tagName||m._jQueryInterface.call(o.default(e),"toggle","INPUT"===n.tagName)}})).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',(function(t){var e=o.default(t.target).closest(".btn")[0];o.default(e).toggleClass("focus",/^focus(in)?$/.test(t.type))})),o.default(window).on("load.bs.button.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-toggle="buttons"] .btn')),e=0,n=t.length;e0,this._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent),this._addEventListeners()}var e=t.prototype;return e.next=function(){this._isSliding||this._slide("next")},e.nextWhenVisible=function(){var t=o.default(this._element);!document.hidden&&t.is(":visible")&&"hidden"!==t.css("visibility")&&this.next()},e.prev=function(){this._isSliding||this._slide("prev")},e.pause=function(t){t||(this._isPaused=!0),this._element.querySelector(".carousel-item-next, .carousel-item-prev")&&(d.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},e.cycle=function(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},e.to=function(t){var e=this;this._activeElement=this._element.querySelector(".active.carousel-item");var n=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)o.default(this._element).one("slid.bs.carousel",(function(){return e.to(t)}));else{if(n===t)return this.pause(),void this.cycle();var i=t>n?"next":"prev";this._slide(i,this._items[t])}},e.dispose=function(){o.default(this._element).off(_),o.default.removeData(this._element,"bs.carousel"),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},e._getConfig=function(t){return t=r({},b,t),d.typeCheckConfig(p,t,y),t},e._handleSwipe=function(){var t=Math.abs(this.touchDeltaX);if(!(t<=40)){var e=t/this.touchDeltaX;this.touchDeltaX=0,e>0&&this.prev(),e<0&&this.next()}},e._addEventListeners=function(){var t=this;this._config.keyboard&&o.default(this._element).on("keydown.bs.carousel",(function(e){return t._keydown(e)})),"hover"===this._config.pause&&o.default(this._element).on("mouseenter.bs.carousel",(function(e){return t.pause(e)})).on("mouseleave.bs.carousel",(function(e){return t.cycle(e)})),this._config.touch&&this._addTouchEventListeners()},e._addTouchEventListeners=function(){var t=this;if(this._touchSupported){var e=function(e){t._pointerEvent&&E[e.originalEvent.pointerType.toUpperCase()]?t.touchStartX=e.originalEvent.clientX:t._pointerEvent||(t.touchStartX=e.originalEvent.touches[0].clientX)},n=function(e){t._pointerEvent&&E[e.originalEvent.pointerType.toUpperCase()]&&(t.touchDeltaX=e.originalEvent.clientX-t.touchStartX),t._handleSwipe(),"hover"===t._config.pause&&(t.pause(),t.touchTimeout&&clearTimeout(t.touchTimeout),t.touchTimeout=setTimeout((function(e){return t.cycle(e)}),500+t._config.interval))};o.default(this._element.querySelectorAll(".carousel-item img")).on("dragstart.bs.carousel",(function(t){return t.preventDefault()})),this._pointerEvent?(o.default(this._element).on("pointerdown.bs.carousel",(function(t){return e(t)})),o.default(this._element).on("pointerup.bs.carousel",(function(t){return n(t)})),this._element.classList.add("pointer-event")):(o.default(this._element).on("touchstart.bs.carousel",(function(t){return e(t)})),o.default(this._element).on("touchmove.bs.carousel",(function(e){return function(e){e.originalEvent.touches&&e.originalEvent.touches.length>1?t.touchDeltaX=0:t.touchDeltaX=e.originalEvent.touches[0].clientX-t.touchStartX}(e)})),o.default(this._element).on("touchend.bs.carousel",(function(t){return n(t)})))}},e._keydown=function(t){if(!/input|textarea/i.test(t.target.tagName))switch(t.which){case 37:t.preventDefault(),this.prev();break;case 39:t.preventDefault(),this.next()}},e._getItemIndex=function(t){return this._items=t&&t.parentNode?[].slice.call(t.parentNode.querySelectorAll(".carousel-item")):[],this._items.indexOf(t)},e._getItemByDirection=function(t,e){var n="next"===t,i="prev"===t,o=this._getItemIndex(e),a=this._items.length-1;if((i&&0===o||n&&o===a)&&!this._config.wrap)return e;var s=(o+("prev"===t?-1:1))%this._items.length;return-1===s?this._items[this._items.length-1]:this._items[s]},e._triggerSlideEvent=function(t,e){var n=this._getItemIndex(t),i=this._getItemIndex(this._element.querySelector(".active.carousel-item")),a=o.default.Event("slide.bs.carousel",{relatedTarget:t,direction:e,from:i,to:n});return o.default(this._element).trigger(a),a},e._setActiveIndicatorElement=function(t){if(this._indicatorsElement){var e=[].slice.call(this._indicatorsElement.querySelectorAll(".active"));o.default(e).removeClass("active");var n=this._indicatorsElement.children[this._getItemIndex(t)];n&&o.default(n).addClass("active")}},e._slide=function(t,e){var n,i,a,s=this,l=this._element.querySelector(".active.carousel-item"),r=this._getItemIndex(l),u=e||l&&this._getItemByDirection(t,l),f=this._getItemIndex(u),c=Boolean(this._interval);if("next"===t?(n="carousel-item-left",i="carousel-item-next",a="left"):(n="carousel-item-right",i="carousel-item-prev",a="right"),u&&o.default(u).hasClass("active"))this._isSliding=!1;else if(!this._triggerSlideEvent(u,a).isDefaultPrevented()&&l&&u){this._isSliding=!0,c&&this.pause(),this._setActiveIndicatorElement(u);var h=o.default.Event("slid.bs.carousel",{relatedTarget:u,direction:a,from:r,to:f});if(o.default(this._element).hasClass("slide")){o.default(u).addClass(i),d.reflow(u),o.default(l).addClass(n),o.default(u).addClass(n);var g=parseInt(u.getAttribute("data-interval"),10);g?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=g):this._config.interval=this._config.defaultInterval||this._config.interval;var m=d.getTransitionDurationFromElement(l);o.default(l).one(d.TRANSITION_END,(function(){o.default(u).removeClass(n+" "+i).addClass("active"),o.default(l).removeClass("active "+i+" "+n),s._isSliding=!1,setTimeout((function(){return o.default(s._element).trigger(h)}),0)})).emulateTransitionEnd(m)}else o.default(l).removeClass("active"),o.default(u).addClass("active"),this._isSliding=!1,o.default(this._element).trigger(h);c&&this.cycle()}},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this).data("bs.carousel"),i=r({},b,o.default(this).data());"object"==typeof e&&(i=r({},i,e));var a="string"==typeof e?e:i.slide;if(n||(n=new t(this,i),o.default(this).data("bs.carousel",n)),"number"==typeof e)n.to(e);else if("string"==typeof a){if("undefined"==typeof n[a])throw new TypeError('No method named "'+a+'"');n[a]()}else i.interval&&i.ride&&(n.pause(),n.cycle())}))},t._dataApiClickHandler=function(e){var n=d.getSelectorFromElement(this);if(n){var i=o.default(n)[0];if(i&&o.default(i).hasClass("carousel")){var a=r({},o.default(i).data(),o.default(this).data()),s=this.getAttribute("data-slide-to");s&&(a.interval=!1),t._jQueryInterface.call(o.default(i),a),s&&o.default(i).data("bs.carousel").to(s),e.preventDefault()}}},l(t,null,[{key:"VERSION",get:function(){return"4.5.3"}},{key:"Default",get:function(){return b}}]),t}();o.default(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",w._dataApiClickHandler),o.default(window).on("load.bs.carousel.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-ride="carousel"]')),e=0,n=t.length;e0&&(this._selector=s,this._triggerArray.push(a))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var e=t.prototype;return e.toggle=function(){o.default(this._element).hasClass("show")?this.hide():this.show()},e.show=function(){var e,n,i=this;if(!this._isTransitioning&&!o.default(this._element).hasClass("show")&&(this._parent&&0===(e=[].slice.call(this._parent.querySelectorAll(".show, .collapsing")).filter((function(t){return"string"==typeof i._config.parent?t.getAttribute("data-parent")===i._config.parent:t.classList.contains("collapse")}))).length&&(e=null),!(e&&(n=o.default(e).not(this._selector).data("bs.collapse"))&&n._isTransitioning))){var a=o.default.Event("show.bs.collapse");if(o.default(this._element).trigger(a),!a.isDefaultPrevented()){e&&(t._jQueryInterface.call(o.default(e).not(this._selector),"hide"),n||o.default(e).data("bs.collapse",null));var s=this._getDimension();o.default(this._element).removeClass("collapse").addClass("collapsing"),this._element.style[s]=0,this._triggerArray.length&&o.default(this._triggerArray).removeClass("collapsed").attr("aria-expanded",!0),this.setTransitioning(!0);var l="scroll"+(s[0].toUpperCase()+s.slice(1)),r=d.getTransitionDurationFromElement(this._element);o.default(this._element).one(d.TRANSITION_END,(function(){o.default(i._element).removeClass("collapsing").addClass("collapse show"),i._element.style[s]="",i.setTransitioning(!1),o.default(i._element).trigger("shown.bs.collapse")})).emulateTransitionEnd(r),this._element.style[s]=this._element[l]+"px"}}},e.hide=function(){var t=this;if(!this._isTransitioning&&o.default(this._element).hasClass("show")){var e=o.default.Event("hide.bs.collapse");if(o.default(this._element).trigger(e),!e.isDefaultPrevented()){var n=this._getDimension();this._element.style[n]=this._element.getBoundingClientRect()[n]+"px",d.reflow(this._element),o.default(this._element).addClass("collapsing").removeClass("collapse show");var i=this._triggerArray.length;if(i>0)for(var a=0;a0},e._getOffset=function(){var t=this,e={};return"function"==typeof this._config.offset?e.fn=function(e){return e.offsets=r({},e.offsets,t._config.offset(e.offsets,t._element)||{}),e}:e.offset=this._config.offset,e},e._getPopperConfig=function(){var t={placement:this._getPlacement(),modifiers:{offset:this._getOffset(),flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(t.modifiers.applyStyle={enabled:!1}),r({},t,this._config.popperConfig)},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this).data("bs.dropdown");if(n||(n=new t(this,"object"==typeof e?e:null),o.default(this).data("bs.dropdown",n)),"string"==typeof e){if("undefined"==typeof n[e])throw new TypeError('No method named "'+e+'"');n[e]()}}))},t._clearMenus=function(e){if(!e||3!==e.which&&("keyup"!==e.type||9===e.which))for(var n=[].slice.call(document.querySelectorAll('[data-toggle="dropdown"]')),i=0,a=n.length;i0&&s--,40===e.which&&sdocument.documentElement.clientHeight;n||(this._element.style.overflowY="hidden"),this._element.classList.add("modal-static");var i=d.getTransitionDurationFromElement(this._dialog);o.default(this._element).off(d.TRANSITION_END),o.default(this._element).one(d.TRANSITION_END,(function(){t._element.classList.remove("modal-static"),n||o.default(t._element).one(d.TRANSITION_END,(function(){t._element.style.overflowY=""})).emulateTransitionEnd(t._element,i)})).emulateTransitionEnd(i),this._element.focus()}else this.hide()},e._showElement=function(t){var e=this,n=o.default(this._element).hasClass("fade"),i=this._dialog?this._dialog.querySelector(".modal-body"):null;this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),o.default(this._dialog).hasClass("modal-dialog-scrollable")&&i?i.scrollTop=0:this._element.scrollTop=0,n&&d.reflow(this._element),o.default(this._element).addClass("show"),this._config.focus&&this._enforceFocus();var a=o.default.Event("shown.bs.modal",{relatedTarget:t}),s=function(){e._config.focus&&e._element.focus(),e._isTransitioning=!1,o.default(e._element).trigger(a)};if(n){var l=d.getTransitionDurationFromElement(this._dialog);o.default(this._dialog).one(d.TRANSITION_END,s).emulateTransitionEnd(l)}else s()},e._enforceFocus=function(){var t=this;o.default(document).off("focusin.bs.modal").on("focusin.bs.modal",(function(e){document!==e.target&&t._element!==e.target&&0===o.default(t._element).has(e.target).length&&t._element.focus()}))},e._setEscapeEvent=function(){var t=this;this._isShown?o.default(this._element).on("keydown.dismiss.bs.modal",(function(e){t._config.keyboard&&27===e.which?(e.preventDefault(),t.hide()):t._config.keyboard||27!==e.which||t._triggerBackdropTransition()})):this._isShown||o.default(this._element).off("keydown.dismiss.bs.modal")},e._setResizeEvent=function(){var t=this;this._isShown?o.default(window).on("resize.bs.modal",(function(e){return t.handleUpdate(e)})):o.default(window).off("resize.bs.modal")},e._hideModal=function(){var t=this;this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._showBackdrop((function(){o.default(document.body).removeClass("modal-open"),t._resetAdjustments(),t._resetScrollbar(),o.default(t._element).trigger("hidden.bs.modal")}))},e._removeBackdrop=function(){this._backdrop&&(o.default(this._backdrop).remove(),this._backdrop=null)},e._showBackdrop=function(t){var e=this,n=o.default(this._element).hasClass("fade")?"fade":"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className="modal-backdrop",n&&this._backdrop.classList.add(n),o.default(this._backdrop).appendTo(document.body),o.default(this._element).on("click.dismiss.bs.modal",(function(t){e._ignoreBackdropClick?e._ignoreBackdropClick=!1:t.target===t.currentTarget&&e._triggerBackdropTransition()})),n&&d.reflow(this._backdrop),o.default(this._backdrop).addClass("show"),!t)return;if(!n)return void t();var i=d.getTransitionDurationFromElement(this._backdrop);o.default(this._backdrop).one(d.TRANSITION_END,t).emulateTransitionEnd(i)}else if(!this._isShown&&this._backdrop){o.default(this._backdrop).removeClass("show");var a=function(){e._removeBackdrop(),t&&t()};if(o.default(this._element).hasClass("fade")){var s=d.getTransitionDurationFromElement(this._backdrop);o.default(this._backdrop).one(d.TRANSITION_END,a).emulateTransitionEnd(s)}else a()}else t&&t()},e._adjustDialog=function(){var t=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},e._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},e._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=Math.round(t.left+t.right)
',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:Q,popperConfig:null},$={HIDE:"hide.bs.tooltip",HIDDEN:"hidden.bs.tooltip",SHOW:"show.bs.tooltip",SHOWN:"shown.bs.tooltip",INSERTED:"inserted.bs.tooltip",CLICK:"click.bs.tooltip",FOCUSIN:"focusin.bs.tooltip",FOCUSOUT:"focusout.bs.tooltip",MOUSEENTER:"mouseenter.bs.tooltip",MOUSELEAVE:"mouseleave.bs.tooltip"},J=function(){function t(t,e){if("undefined"==typeof a.default)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var e=t.prototype;return e.enable=function(){this._isEnabled=!0},e.disable=function(){this._isEnabled=!1},e.toggleEnabled=function(){this._isEnabled=!this._isEnabled},e.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=o.default(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),o.default(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(o.default(this.getTipElement()).hasClass("show"))return void this._leave(null,this);this._enter(null,this)}},e.dispose=function(){clearTimeout(this._timeout),o.default.removeData(this.element,this.constructor.DATA_KEY),o.default(this.element).off(this.constructor.EVENT_KEY),o.default(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&o.default(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},e.show=function(){var t=this;if("none"===o.default(this.element).css("display"))throw new Error("Please use show on visible elements");var e=o.default.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){o.default(this.element).trigger(e);var n=d.findShadowRoot(this.element),i=o.default.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(e.isDefaultPrevented()||!i)return;var s=this.getTipElement(),l=d.getUID(this.constructor.NAME);s.setAttribute("id",l),this.element.setAttribute("aria-describedby",l),this.setContent(),this.config.animation&&o.default(s).addClass("fade");var r="function"==typeof this.config.placement?this.config.placement.call(this,s,this.element):this.config.placement,u=this._getAttachment(r);this.addAttachmentClass(u);var f=this._getContainer();o.default(s).data(this.constructor.DATA_KEY,this),o.default.contains(this.element.ownerDocument.documentElement,this.tip)||o.default(s).appendTo(f),o.default(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new a.default(this.element,s,this._getPopperConfig(u)),o.default(s).addClass("show"),"ontouchstart"in document.documentElement&&o.default(document.body).children().on("mouseover",null,o.default.noop);var c=function(){t.config.animation&&t._fixTransition();var e=t._hoverState;t._hoverState=null,o.default(t.element).trigger(t.constructor.Event.SHOWN),"out"===e&&t._leave(null,t)};if(o.default(this.tip).hasClass("fade")){var h=d.getTransitionDurationFromElement(this.tip);o.default(this.tip).one(d.TRANSITION_END,c).emulateTransitionEnd(h)}else c()}},e.hide=function(t){var e=this,n=this.getTipElement(),i=o.default.Event(this.constructor.Event.HIDE),a=function(){"show"!==e._hoverState&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),o.default(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(o.default(this.element).trigger(i),!i.isDefaultPrevented()){if(o.default(n).removeClass("show"),"ontouchstart"in document.documentElement&&o.default(document.body).children().off("mouseover",null,o.default.noop),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,o.default(this.tip).hasClass("fade")){var s=d.getTransitionDurationFromElement(n);o.default(n).one(d.TRANSITION_END,a).emulateTransitionEnd(s)}else a();this._hoverState=""}},e.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},e.isWithContent=function(){return Boolean(this.getTitle())},e.addAttachmentClass=function(t){o.default(this.getTipElement()).addClass("bs-tooltip-"+t)},e.getTipElement=function(){return this.tip=this.tip||o.default(this.config.template)[0],this.tip},e.setContent=function(){var t=this.getTipElement();this.setElementContent(o.default(t.querySelectorAll(".tooltip-inner")),this.getTitle()),o.default(t).removeClass("fade show")},e.setElementContent=function(t,e){"object"!=typeof e||!e.nodeType&&!e.jquery?this.config.html?(this.config.sanitize&&(e=U(e,this.config.whiteList,this.config.sanitizeFn)),t.html(e)):t.text(e):this.config.html?o.default(e).parent().is(t)||t.empty().append(e):t.text(o.default(e).text())},e.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},e._getPopperConfig=function(t){var e=this;return r({},{placement:t,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:".arrow"},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}},this.config.popperConfig)},e._getOffset=function(){var t=this,e={};return"function"==typeof this.config.offset?e.fn=function(e){return e.offsets=r({},e.offsets,t.config.offset(e.offsets,t.element)||{}),e}:e.offset=this.config.offset,e},e._getContainer=function(){return!1===this.config.container?document.body:d.isElement(this.config.container)?o.default(this.config.container):o.default(document).find(this.config.container)},e._getAttachment=function(t){return X[t.toUpperCase()]},e._setListeners=function(){var t=this;this.config.trigger.split(" ").forEach((function(e){if("click"===e)o.default(t.element).on(t.constructor.Event.CLICK,t.config.selector,(function(e){return t.toggle(e)}));else if("manual"!==e){var n="hover"===e?t.constructor.Event.MOUSEENTER:t.constructor.Event.FOCUSIN,i="hover"===e?t.constructor.Event.MOUSELEAVE:t.constructor.Event.FOCUSOUT;o.default(t.element).on(n,t.config.selector,(function(e){return t._enter(e)})).on(i,t.config.selector,(function(e){return t._leave(e)}))}})),this._hideModalHandler=function(){t.element&&t.hide()},o.default(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=r({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},e._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},e._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||o.default(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),o.default(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?"focus":"hover"]=!0),o.default(e.getTipElement()).hasClass("show")||"show"===e._hoverState?e._hoverState="show":(clearTimeout(e._timeout),e._hoverState="show",e.config.delay&&e.config.delay.show?e._timeout=setTimeout((function(){"show"===e._hoverState&&e.show()}),e.config.delay.show):e.show())},e._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||o.default(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),o.default(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?"focus":"hover"]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState="out",e.config.delay&&e.config.delay.hide?e._timeout=setTimeout((function(){"out"===e._hoverState&&e.hide()}),e.config.delay.hide):e.hide())},e._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},e._getConfig=function(t){var e=o.default(this.element).data();return Object.keys(e).forEach((function(t){-1!==z.indexOf(t)&&delete e[t]})),"number"==typeof(t=r({},this.constructor.Default,e,"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),d.typeCheckConfig(M,t,this.constructor.DefaultType),t.sanitize&&(t.template=U(t.template,t.whiteList,t.sanitizeFn)),t},e._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},e._cleanTipClass=function(){var t=o.default(this.getTipElement()),e=t.attr("class").match(V);null!==e&&e.length&&t.removeClass(e.join(""))},e._handlePopperPlacementChange=function(t){this.tip=t.instance.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},e._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(o.default(t).removeClass("fade"),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this),i=n.data("bs.tooltip"),a="object"==typeof e&&e;if((i||!/dispose|hide/.test(e))&&(i||(i=new t(this,a),n.data("bs.tooltip",i)),"string"==typeof e)){if("undefined"==typeof i[e])throw new TypeError('No method named "'+e+'"');i[e]()}}))},l(t,null,[{key:"VERSION",get:function(){return"4.5.3"}},{key:"Default",get:function(){return Y}},{key:"NAME",get:function(){return M}},{key:"DATA_KEY",get:function(){return"bs.tooltip"}},{key:"Event",get:function(){return $}},{key:"EVENT_KEY",get:function(){return".bs.tooltip"}},{key:"DefaultType",get:function(){return K}}]),t}();o.default.fn[M]=J._jQueryInterface,o.default.fn[M].Constructor=J,o.default.fn[M].noConflict=function(){return o.default.fn[M]=W,J._jQueryInterface};var G="popover",Z=o.default.fn[G],tt=new RegExp("(^|\\s)bs-popover\\S+","g"),et=r({},J.Default,{placement:"right",trigger:"click",content:"",template:''}),nt=r({},J.DefaultType,{content:"(string|element|function)"}),it={HIDE:"hide.bs.popover",HIDDEN:"hidden.bs.popover",SHOW:"show.bs.popover",SHOWN:"shown.bs.popover",INSERTED:"inserted.bs.popover",CLICK:"click.bs.popover",FOCUSIN:"focusin.bs.popover",FOCUSOUT:"focusout.bs.popover",MOUSEENTER:"mouseenter.bs.popover",MOUSELEAVE:"mouseleave.bs.popover"},ot=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),e.prototype.constructor=e,e.__proto__=n;var a=i.prototype;return a.isWithContent=function(){return this.getTitle()||this._getContent()},a.addAttachmentClass=function(t){o.default(this.getTipElement()).addClass("bs-popover-"+t)},a.getTipElement=function(){return this.tip=this.tip||o.default(this.config.template)[0],this.tip},a.setContent=function(){var t=o.default(this.getTipElement());this.setElementContent(t.find(".popover-header"),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(".popover-body"),e),t.removeClass("fade show")},a._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},a._cleanTipClass=function(){var t=o.default(this.getTipElement()),e=t.attr("class").match(tt);null!==e&&e.length>0&&t.removeClass(e.join(""))},i._jQueryInterface=function(t){return this.each((function(){var e=o.default(this).data("bs.popover"),n="object"==typeof t?t:null;if((e||!/dispose|hide/.test(t))&&(e||(e=new i(this,n),o.default(this).data("bs.popover",e)),"string"==typeof t)){if("undefined"==typeof e[t])throw new TypeError('No method named "'+t+'"');e[t]()}}))},l(i,null,[{key:"VERSION",get:function(){return"4.5.3"}},{key:"Default",get:function(){return et}},{key:"NAME",get:function(){return G}},{key:"DATA_KEY",get:function(){return"bs.popover"}},{key:"Event",get:function(){return it}},{key:"EVENT_KEY",get:function(){return".bs.popover"}},{key:"DefaultType",get:function(){return nt}}]),i}(J);o.default.fn[G]=ot._jQueryInterface,o.default.fn[G].Constructor=ot,o.default.fn[G].noConflict=function(){return o.default.fn[G]=Z,ot._jQueryInterface};var at="scrollspy",st=o.default.fn[at],lt={offset:10,method:"auto",target:""},rt={offset:"number",method:"string",target:"(string|element)"},ut=function(){function t(t,e){var n=this;this._element=t,this._scrollElement="BODY"===t.tagName?window:t,this._config=this._getConfig(e),this._selector=this._config.target+" .nav-link,"+this._config.target+" .list-group-item,"+this._config.target+" .dropdown-item",this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,o.default(this._scrollElement).on("scroll.bs.scrollspy",(function(t){return n._process(t)})),this.refresh(),this._process()}var e=t.prototype;return e.refresh=function(){var t=this,e=this._scrollElement===this._scrollElement.window?"offset":"position",n="auto"===this._config.method?e:this._config.method,i="position"===n?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map((function(t){var e,a=d.getSelectorFromElement(t);if(a&&(e=document.querySelector(a)),e){var s=e.getBoundingClientRect();if(s.width||s.height)return[o.default(e)[n]().top+i,a]}return null})).filter((function(t){return t})).sort((function(t,e){return t[0]-e[0]})).forEach((function(e){t._offsets.push(e[0]),t._targets.push(e[1])}))},e.dispose=function(){o.default.removeData(this._element,"bs.scrollspy"),o.default(this._scrollElement).off(".bs.scrollspy"),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},e._getConfig=function(t){if("string"!=typeof(t=r({},lt,"object"==typeof t&&t?t:{})).target&&d.isElement(t.target)){var e=o.default(t.target).attr("id");e||(e=d.getUID(at),o.default(t.target).attr("id",e)),t.target="#"+e}return d.typeCheckConfig(at,t,rt),t},e._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},e._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},e._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},e._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=n){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&t0)return this._activeTarget=null,void this._clear();for(var o=this._offsets.length;o--;){this._activeTarget!==this._targets[o]&&t>=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t li > .active":".active";n=(n=o.default.makeArray(o.default(i).find(s)))[n.length-1]}var l=o.default.Event("hide.bs.tab",{relatedTarget:this._element}),r=o.default.Event("show.bs.tab",{relatedTarget:n});if(n&&o.default(n).trigger(l),o.default(this._element).trigger(r),!r.isDefaultPrevented()&&!l.isDefaultPrevented()){a&&(e=document.querySelector(a)),this._activate(this._element,i);var u=function(){var e=o.default.Event("hidden.bs.tab",{relatedTarget:t._element}),i=o.default.Event("shown.bs.tab",{relatedTarget:n});o.default(n).trigger(e),o.default(t._element).trigger(i)};e?this._activate(e,e.parentNode,u):u()}}},e.dispose=function(){o.default.removeData(this._element,"bs.tab"),this._element=null},e._activate=function(t,e,n){var i=this,a=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?o.default(e).children(".active"):o.default(e).find("> li > .active"))[0],s=n&&a&&o.default(a).hasClass("fade"),l=function(){return i._transitionComplete(t,a,n)};if(a&&s){var r=d.getTransitionDurationFromElement(a);o.default(a).removeClass("show").one(d.TRANSITION_END,l).emulateTransitionEnd(r)}else l()},e._transitionComplete=function(t,e,n){if(e){o.default(e).removeClass("active");var i=o.default(e.parentNode).find("> .dropdown-menu .active")[0];i&&o.default(i).removeClass("active"),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}if(o.default(t).addClass("active"),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),d.reflow(t),t.classList.contains("fade")&&t.classList.add("show"),t.parentNode&&o.default(t.parentNode).hasClass("dropdown-menu")){var a=o.default(t).closest(".dropdown")[0];if(a){var s=[].slice.call(a.querySelectorAll(".dropdown-toggle"));o.default(s).addClass("active")}t.setAttribute("aria-expanded",!0)}n&&n()},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this),i=n.data("bs.tab");if(i||(i=new t(this),n.data("bs.tab",i)),"string"==typeof e){if("undefined"==typeof i[e])throw new TypeError('No method named "'+e+'"');i[e]()}}))},l(t,null,[{key:"VERSION",get:function(){return"4.5.3"}}]),t}();o.default(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',(function(t){t.preventDefault(),ft._jQueryInterface.call(o.default(this),"show")})),o.default.fn.tab=ft._jQueryInterface,o.default.fn.tab.Constructor=ft,o.default.fn.tab.noConflict=function(){return o.default.fn.tab=dt,ft._jQueryInterface};var ct=o.default.fn.toast,ht={animation:"boolean",autohide:"boolean",delay:"number"},gt={animation:!0,autohide:!0,delay:500},mt=function(){function t(t,e){this._element=t,this._config=this._getConfig(e),this._timeout=null,this._setListeners()}var e=t.prototype;return e.show=function(){var t=this,e=o.default.Event("show.bs.toast");if(o.default(this._element).trigger(e),!e.isDefaultPrevented()){this._clearTimeout(),this._config.animation&&this._element.classList.add("fade");var n=function(){t._element.classList.remove("showing"),t._element.classList.add("show"),o.default(t._element).trigger("shown.bs.toast"),t._config.autohide&&(t._timeout=setTimeout((function(){t.hide()}),t._config.delay))};if(this._element.classList.remove("hide"),d.reflow(this._element),this._element.classList.add("showing"),this._config.animation){var i=d.getTransitionDurationFromElement(this._element);o.default(this._element).one(d.TRANSITION_END,n).emulateTransitionEnd(i)}else n()}},e.hide=function(){if(this._element.classList.contains("show")){var t=o.default.Event("hide.bs.toast");o.default(this._element).trigger(t),t.isDefaultPrevented()||this._close()}},e.dispose=function(){this._clearTimeout(),this._element.classList.contains("show")&&this._element.classList.remove("show"),o.default(this._element).off("click.dismiss.bs.toast"),o.default.removeData(this._element,"bs.toast"),this._element=null,this._config=null},e._getConfig=function(t){return t=r({},gt,o.default(this._element).data(),"object"==typeof t&&t?t:{}),d.typeCheckConfig("toast",t,this.constructor.DefaultType),t},e._setListeners=function(){var t=this;o.default(this._element).on("click.dismiss.bs.toast",'[data-dismiss="toast"]',(function(){return t.hide()}))},e._close=function(){var t=this,e=function(){t._element.classList.add("hide"),o.default(t._element).trigger("hidden.bs.toast")};if(this._element.classList.remove("show"),this._config.animation){var n=d.getTransitionDurationFromElement(this._element);o.default(this._element).one(d.TRANSITION_END,e).emulateTransitionEnd(n)}else e()},e._clearTimeout=function(){clearTimeout(this._timeout),this._timeout=null},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this),i=n.data("bs.toast");if(i||(i=new t(this,"object"==typeof e&&e),n.data("bs.toast",i)),"string"==typeof e){if("undefined"==typeof i[e])throw new TypeError('No method named "'+e+'"');i[e](this)}}))},l(t,null,[{key:"VERSION",get:function(){return"4.5.3"}},{key:"DefaultType",get:function(){return ht}},{key:"Default",get:function(){return gt}}]),t}();o.default.fn.toast=mt._jQueryInterface,o.default.fn.toast.Constructor=mt,o.default.fn.toast.noConflict=function(){return o.default.fn.toast=ct,mt._jQueryInterface},t.Alert=h,t.Button=m,t.Carousel=w,t.Collapse=D,t.Dropdown=x,t.Modal=q,t.Popover=ot,t.Scrollspy=ut,t.Tab=ft,t.Toast=mt,t.Tooltip=J,t.Util=d,Object.defineProperty(t,"__esModule",{value:!0})})); -//# sourceMappingURL=bootstrap.min.js.map \ No newline at end of file diff --git a/assets/js/jquery.min.js b/assets/js/jquery.min.js deleted file mode 100644 index bd4dc0e..0000000 --- a/assets/js/jquery.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0"))}function n(e){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return e.on("mouseout",i,function(){t(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).removeClass("ui-datepicker-next-hover")}).on("mouseover",i,o)}function o(){t.datepicker._isDisabledDatepicker(m.inline?m.dpDiv.parent()[0]:m.input[0])||(t(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),t(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).addClass("ui-datepicker-next-hover"))}function a(e,i){t.extend(e,i);for(var s in i)null==i[s]&&(e[s]=i[s]);return e}function r(t){return function(){var e=this.element.val();t.apply(this,arguments),this._refresh(),e!==this.element.val()&&this._trigger("change")}}t.ui=t.ui||{},t.ui.version="1.12.1";var h=0,l=Array.prototype.slice;t.cleanData=function(e){return function(i){var s,n,o;for(o=0;null!=(n=i[o]);o++)try{s=t._data(n,"events"),s&&s.remove&&t(n).triggerHandler("remove")}catch(a){}e(i)}}(t.cleanData),t.widget=function(e,i,s){var n,o,a,r={},h=e.split(".")[0];e=e.split(".")[1];var l=h+"-"+e;return s||(s=i,i=t.Widget),t.isArray(s)&&(s=t.extend.apply(null,[{}].concat(s))),t.expr[":"][l.toLowerCase()]=function(e){return!!t.data(e,l)},t[h]=t[h]||{},n=t[h][e],o=t[h][e]=function(t,e){return this._createWidget?(arguments.length&&this._createWidget(t,e),void 0):new o(t,e)},t.extend(o,n,{version:s.version,_proto:t.extend({},s),_childConstructors:[]}),a=new i,a.options=t.widget.extend({},a.options),t.each(s,function(e,s){return t.isFunction(s)?(r[e]=function(){function t(){return i.prototype[e].apply(this,arguments)}function n(t){return i.prototype[e].apply(this,t)}return function(){var e,i=this._super,o=this._superApply;return this._super=t,this._superApply=n,e=s.apply(this,arguments),this._super=i,this._superApply=o,e}}(),void 0):(r[e]=s,void 0)}),o.prototype=t.widget.extend(a,{widgetEventPrefix:n?a.widgetEventPrefix||e:e},r,{constructor:o,namespace:h,widgetName:e,widgetFullName:l}),n?(t.each(n._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete n._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o},t.widget.extend=function(e){for(var i,s,n=l.call(arguments,1),o=0,a=n.length;a>o;o++)for(i in n[o])s=n[o][i],n[o].hasOwnProperty(i)&&void 0!==s&&(e[i]=t.isPlainObject(s)?t.isPlainObject(e[i])?t.widget.extend({},e[i],s):t.widget.extend({},s):s);return e},t.widget.bridge=function(e,i){var s=i.prototype.widgetFullName||e;t.fn[e]=function(n){var o="string"==typeof n,a=l.call(arguments,1),r=this;return o?this.length||"instance"!==n?this.each(function(){var i,o=t.data(this,s);return"instance"===n?(r=o,!1):o?t.isFunction(o[n])&&"_"!==n.charAt(0)?(i=o[n].apply(o,a),i!==o&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+n+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+n+"'")}):r=void 0:(a.length&&(n=t.widget.extend.apply(null,[n].concat(a))),this.each(function(){var e=t.data(this,s);e?(e.option(n||{}),e._init&&e._init()):t.data(this,s,new i(n,this))})),r}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,i){i=t(i||this.defaultElement||this)[0],this.element=t(i),this.uuid=h++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},i!==this&&(t.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===i&&this.destroy()}}),this.document=t(i.style?i.ownerDocument:i.document||i),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,g=-2*e.offset[1];0>c?(s=t.top+p+f+g+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+g)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+g-h,(i>0||u>a(i))&&(t.top+=p+f+g))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}});var c="ui-effects-",u="ui-effects-style",d="ui-effects-animated",p=t;t.effects={effect:{}},function(t,e){function i(t,e,i){var s=u[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:0>t?0:t>s.max?s.max:t)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(t,o){var a,r=o.re.exec(i),h=r&&o.parse(r),l=o.space||"rgba";return h?(a=s[l](h),s[c[l].cache]=a[c[l].cache],n=s._rgba=a._rgba,!1):e}),n.length?("0,0,0,0"===n.join()&&t.extend(n,o.transparent),s):o[i]}function n(t,e,i){return i=(i+1)%1,1>6*i?t+6*(e-t)*i:1>2*i?e:2>3*i?t+6*(e-t)*(2/3-i):t}var o,a="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[t[1],t[2],t[3],t[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[2.55*t[1],2.55*t[2],2.55*t[3],t[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(t){return[t[1],t[2]/100,t[3]/100,t[4]]}}],l=t.Color=function(e,i,s,n){return new t.Color.fn.parse(e,i,s,n)},c={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},u={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},d=l.support={},p=t("

")[0],f=t.each;p.style.cssText="background-color:rgba(1,1,1,.5)",d.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(c,function(t,e){e.cache="_"+t,e.props.alpha={idx:3,type:"percent",def:1}}),l.fn=t.extend(l.prototype,{parse:function(n,a,r,h){if(n===e)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=t(n).css(a),a=e);var u=this,d=t.type(n),p=this._rgba=[];return a!==e&&(n=[n,a,r,h],d="array"),"string"===d?this.parse(s(n)||o._default):"array"===d?(f(c.rgba.props,function(t,e){p[e.idx]=i(n[e.idx],e)}),this):"object"===d?(n instanceof l?f(c,function(t,e){n[e.cache]&&(u[e.cache]=n[e.cache].slice())}):f(c,function(e,s){var o=s.cache;f(s.props,function(t,e){if(!u[o]&&s.to){if("alpha"===t||null==n[t])return;u[o]=s.to(u._rgba)}u[o][e.idx]=i(n[t],e,!0)}),u[o]&&0>t.inArray(null,u[o].slice(0,3))&&(u[o][3]=1,s.from&&(u._rgba=s.from(u[o])))}),this):e},is:function(t){var i=l(t),s=!0,n=this;return f(c,function(t,o){var a,r=i[o.cache];return r&&(a=n[o.cache]||o.to&&o.to(n._rgba)||[],f(o.props,function(t,i){return null!=r[i.idx]?s=r[i.idx]===a[i.idx]:e})),s}),s},_space:function(){var t=[],e=this;return f(c,function(i,s){e[s.cache]&&t.push(i)}),t.pop()},transition:function(t,e){var s=l(t),n=s._space(),o=c[n],a=0===this.alpha()?l("transparent"):this,r=a[o.cache]||o.to(a._rgba),h=r.slice();return s=s[o.cache],f(o.props,function(t,n){var o=n.idx,a=r[o],l=s[o],c=u[n.type]||{};null!==l&&(null===a?h[o]=l:(c.mod&&(l-a>c.mod/2?a+=c.mod:a-l>c.mod/2&&(a-=c.mod)),h[o]=i((l-a)*e+a,n)))}),this[n](h)},blend:function(e){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(e)._rgba;return l(t.map(i,function(t,e){return(1-s)*n[e]+s*t}))},toRgbaString:function(){var e="rgba(",i=t.map(this._rgba,function(t,e){return null==t?e>2?1:0:t});return 1===i[3]&&(i.pop(),e="rgb("),e+i.join()+")"},toHslaString:function(){var e="hsla(",i=t.map(this.hsla(),function(t,e){return null==t&&(t=e>2?1:0),e&&3>e&&(t=Math.round(100*t)+"%"),t});return 1===i[3]&&(i.pop(),e="hsl("),e+i.join()+")"},toHexString:function(e){var i=this._rgba.slice(),s=i.pop();return e&&i.push(~~(255*s)),"#"+t.map(i,function(t){return t=(t||0).toString(16),1===t.length?"0"+t:t}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,c.hsla.to=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e,i,s=t[0]/255,n=t[1]/255,o=t[2]/255,a=t[3],r=Math.max(s,n,o),h=Math.min(s,n,o),l=r-h,c=r+h,u=.5*c;return e=h===r?0:s===r?60*(n-o)/l+360:n===r?60*(o-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=u?l/c:l/(2-c),[Math.round(e)%360,i,u,null==a?1:a]},c.hsla.from=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/360,i=t[1],s=t[2],o=t[3],a=.5>=s?s*(1+i):s+i-s*i,r=2*s-a;return[Math.round(255*n(r,a,e+1/3)),Math.round(255*n(r,a,e)),Math.round(255*n(r,a,e-1/3)),o]},f(c,function(s,n){var o=n.props,a=n.cache,h=n.to,c=n.from;l.fn[s]=function(s){if(h&&!this[a]&&(this[a]=h(this._rgba)),s===e)return this[a].slice();var n,r=t.type(s),u="array"===r||"object"===r?s:arguments,d=this[a].slice();return f(o,function(t,e){var s=u["object"===r?t:e.idx];null==s&&(s=d[e.idx]),d[e.idx]=i(s,e)}),c?(n=l(c(d)),n[a]=d,n):l(d)},f(o,function(e,i){l.fn[e]||(l.fn[e]=function(n){var o,a=t.type(n),h="alpha"===e?this._hsla?"hsla":"rgba":s,l=this[h](),c=l[i.idx];return"undefined"===a?c:("function"===a&&(n=n.call(this,c),a=t.type(n)),null==n&&i.empty?this:("string"===a&&(o=r.exec(n),o&&(n=c+parseFloat(o[2])*("+"===o[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(e){var i=e.split(" ");f(i,function(e,i){t.cssHooks[i]={set:function(e,n){var o,a,r="";if("transparent"!==n&&("string"!==t.type(n)||(o=s(n)))){if(n=l(o||n),!d.rgba&&1!==n._rgba[3]){for(a="backgroundColor"===i?e.parentNode:e;(""===r||"transparent"===r)&&a&&a.style;)try{r=t.css(a,"backgroundColor"),a=a.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{e.style[i]=n}catch(h){}}},t.fx.step[i]=function(e){e.colorInit||(e.start=l(e.elem,i),e.end=l(e.end),e.colorInit=!0),t.cssHooks[i].set(e.elem,e.start.transition(e.end,e.pos))}})},l.hook(a),t.cssHooks.borderColor={expand:function(t){var e={};return f(["Top","Right","Bottom","Left"],function(i,s){e["border"+s+"Color"]=t}),e}},o=t.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(p),function(){function e(e){var i,s,n=e.ownerDocument.defaultView?e.ownerDocument.defaultView.getComputedStyle(e,null):e.currentStyle,o={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(o[t.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(o[i]=n[i]);return o}function i(e,i){var s,o,a={};for(s in i)o=i[s],e[s]!==o&&(n[s]||(t.fx.step[s]||!isNaN(parseFloat(o)))&&(a[s]=o));return a}var s=["add","remove","toggle"],n={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};t.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(e,i){t.fx.step[i]=function(t){("none"!==t.end&&!t.setAttr||1===t.pos&&!t.setAttr)&&(p.style(t.elem,i,t.end),t.setAttr=!0)}}),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.effects.animateClass=function(n,o,a,r){var h=t.speed(o,a,r);return this.queue(function(){var o,a=t(this),r=a.attr("class")||"",l=h.children?a.find("*").addBack():a;l=l.map(function(){var i=t(this);return{el:i,start:e(this)}}),o=function(){t.each(s,function(t,e){n[e]&&a[e+"Class"](n[e])})},o(),l=l.map(function(){return this.end=e(this.el[0]),this.diff=i(this.start,this.end),this}),a.attr("class",r),l=l.map(function(){var e=this,i=t.Deferred(),s=t.extend({},h,{queue:!1,complete:function(){i.resolve(e)}});return this.el.animate(this.diff,s),i.promise()}),t.when.apply(t,l.get()).done(function(){o(),t.each(arguments,function(){var e=this.el;t.each(this.diff,function(t){e.css(t,"")})}),h.complete.call(a[0])})})},t.fn.extend({addClass:function(e){return function(i,s,n,o){return s?t.effects.animateClass.call(this,{add:i},s,n,o):e.apply(this,arguments)}}(t.fn.addClass),removeClass:function(e){return function(i,s,n,o){return arguments.length>1?t.effects.animateClass.call(this,{remove:i},s,n,o):e.apply(this,arguments)}}(t.fn.removeClass),toggleClass:function(e){return function(i,s,n,o,a){return"boolean"==typeof s||void 0===s?n?t.effects.animateClass.call(this,s?{add:i}:{remove:i},n,o,a):e.apply(this,arguments):t.effects.animateClass.call(this,{toggle:i},s,n,o)}}(t.fn.toggleClass),switchClass:function(e,i,s,n,o){return t.effects.animateClass.call(this,{add:i,remove:e},s,n,o)}})}(),function(){function e(e,i,s,n){return t.isPlainObject(e)&&(i=e,e=e.effect),e={effect:e},null==i&&(i={}),t.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||t.fx.speeds[i])&&(n=s,s=i,i={}),t.isFunction(s)&&(n=s,s=null),i&&t.extend(e,i),s=s||i.duration,e.duration=t.fx.off?0:"number"==typeof s?s:s in t.fx.speeds?t.fx.speeds[s]:t.fx.speeds._default,e.complete=n||i.complete,e}function i(e){return!e||"number"==typeof e||t.fx.speeds[e]?!0:"string"!=typeof e||t.effects.effect[e]?t.isFunction(e)?!0:"object"!=typeof e||e.effect?!1:!0:!0}function s(t,e){var i=e.outerWidth(),s=e.outerHeight(),n=/^rect\((-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto)\)$/,o=n.exec(t)||["",0,i,s,0];return{top:parseFloat(o[1])||0,right:"auto"===o[2]?i:parseFloat(o[2]),bottom:"auto"===o[3]?s:parseFloat(o[3]),left:parseFloat(o[4])||0}}t.expr&&t.expr.filters&&t.expr.filters.animated&&(t.expr.filters.animated=function(e){return function(i){return!!t(i).data(d)||e(i)}}(t.expr.filters.animated)),t.uiBackCompat!==!1&&t.extend(t.effects,{save:function(t,e){for(var i=0,s=e.length;s>i;i++)null!==e[i]&&t.data(c+e[i],t[0].style[e[i]])},restore:function(t,e){for(var i,s=0,n=e.length;n>s;s++)null!==e[s]&&(i=t.data(c+e[s]),t.css(e[s],i))},setMode:function(t,e){return"toggle"===e&&(e=t.is(":hidden")?"show":"hide"),e},createWrapper:function(e){if(e.parent().is(".ui-effects-wrapper"))return e.parent();var i={width:e.outerWidth(!0),height:e.outerHeight(!0),"float":e.css("float")},s=t("

").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:e.width(),height:e.height()},o=document.activeElement;try{o.id}catch(a){o=document.body}return e.wrap(s),(e[0]===o||t.contains(e[0],o))&&t(o).trigger("focus"),s=e.parent(),"static"===e.css("position")?(s.css({position:"relative"}),e.css({position:"relative"})):(t.extend(i,{position:e.css("position"),zIndex:e.css("z-index")}),t.each(["top","left","bottom","right"],function(t,s){i[s]=e.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),e.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),e.css(n),s.css(i).show()},removeWrapper:function(e){var i=document.activeElement;return e.parent().is(".ui-effects-wrapper")&&(e.parent().replaceWith(e),(e[0]===i||t.contains(e[0],i))&&t(i).trigger("focus")),e}}),t.extend(t.effects,{version:"1.12.1",define:function(e,i,s){return s||(s=i,i="effect"),t.effects.effect[e]=s,t.effects.effect[e].mode=i,s},scaledDimensions:function(t,e,i){if(0===e)return{height:0,width:0,outerHeight:0,outerWidth:0};var s="horizontal"!==i?(e||100)/100:1,n="vertical"!==i?(e||100)/100:1;return{height:t.height()*n,width:t.width()*s,outerHeight:t.outerHeight()*n,outerWidth:t.outerWidth()*s}},clipToBox:function(t){return{width:t.clip.right-t.clip.left,height:t.clip.bottom-t.clip.top,left:t.clip.left,top:t.clip.top}},unshift:function(t,e,i){var s=t.queue();e>1&&s.splice.apply(s,[1,0].concat(s.splice(e,i))),t.dequeue()},saveStyle:function(t){t.data(u,t[0].style.cssText)},restoreStyle:function(t){t[0].style.cssText=t.data(u)||"",t.removeData(u)},mode:function(t,e){var i=t.is(":hidden");return"toggle"===e&&(e=i?"show":"hide"),(i?"hide"===e:"show"===e)&&(e="none"),e},getBaseline:function(t,e){var i,s;switch(t[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=t[0]/e.height}switch(t[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=t[1]/e.width}return{x:s,y:i}},createPlaceholder:function(e){var i,s=e.css("position"),n=e.position();return e.css({marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()),/^(static|relative)/.test(s)&&(s="absolute",i=t("<"+e[0].nodeName+">").insertAfter(e).css({display:/^(inline|ruby)/.test(e.css("display"))?"inline-block":"block",visibility:"hidden",marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight"),"float":e.css("float")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).addClass("ui-effects-placeholder"),e.data(c+"placeholder",i)),e.css({position:s,left:n.left,top:n.top}),i},removePlaceholder:function(t){var e=c+"placeholder",i=t.data(e);i&&(i.remove(),t.removeData(e))},cleanUp:function(e){t.effects.restoreStyle(e),t.effects.removePlaceholder(e)},setTransition:function(e,i,s,n){return n=n||{},t.each(i,function(t,i){var o=e.cssUnit(i);o[0]>0&&(n[i]=o[0]*s+o[1])}),n}}),t.fn.extend({effect:function(){function i(e){function i(){r.removeData(d),t.effects.cleanUp(r),"hide"===s.mode&&r.hide(),a()}function a(){t.isFunction(h)&&h.call(r[0]),t.isFunction(e)&&e()}var r=t(this);s.mode=c.shift(),t.uiBackCompat===!1||o?"none"===s.mode?(r[l](),a()):n.call(r[0],s,i):(r.is(":hidden")?"hide"===l:"show"===l)?(r[l](),a()):n.call(r[0],s,a)}var s=e.apply(this,arguments),n=t.effects.effect[s.effect],o=n.mode,a=s.queue,r=a||"fx",h=s.complete,l=s.mode,c=[],u=function(e){var i=t(this),s=t.effects.mode(i,l)||o;i.data(d,!0),c.push(s),o&&("show"===s||s===o&&"hide"===s)&&i.show(),o&&"none"===s||t.effects.saveStyle(i),t.isFunction(e)&&e()};return t.fx.off||!n?l?this[l](s.duration,h):this.each(function(){h&&h.call(this)}):a===!1?this.each(u).each(i):this.queue(r,u).queue(r,i)},show:function(t){return function(s){if(i(s))return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="show",this.effect.call(this,n) - }}(t.fn.show),hide:function(t){return function(s){if(i(s))return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="hide",this.effect.call(this,n)}}(t.fn.hide),toggle:function(t){return function(s){if(i(s)||"boolean"==typeof s)return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)}}(t.fn.toggle),cssUnit:function(e){var i=this.css(e),s=[];return t.each(["em","px","%","pt"],function(t,e){i.indexOf(e)>0&&(s=[parseFloat(i),e])}),s},cssClip:function(t){return t?this.css("clip","rect("+t.top+"px "+t.right+"px "+t.bottom+"px "+t.left+"px)"):s(this.css("clip"),this)},transfer:function(e,i){var s=t(this),n=t(e.to),o="fixed"===n.css("position"),a=t("body"),r=o?a.scrollTop():0,h=o?a.scrollLeft():0,l=n.offset(),c={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},u=s.offset(),d=t("
").appendTo("body").addClass(e.className).css({top:u.top-r,left:u.left-h,height:s.innerHeight(),width:s.innerWidth(),position:o?"fixed":"absolute"}).animate(c,e.duration,e.easing,function(){d.remove(),t.isFunction(i)&&i()})}}),t.fx.step.clip=function(e){e.clipInit||(e.start=t(e.elem).cssClip(),"string"==typeof e.end&&(e.end=s(e.end,e.elem)),e.clipInit=!0),t(e.elem).cssClip({top:e.pos*(e.end.top-e.start.top)+e.start.top,right:e.pos*(e.end.right-e.start.right)+e.start.right,bottom:e.pos*(e.end.bottom-e.start.bottom)+e.start.bottom,left:e.pos*(e.end.left-e.start.left)+e.start.left})}}(),function(){var e={};t.each(["Quad","Cubic","Quart","Quint","Expo"],function(t,i){e[i]=function(e){return Math.pow(e,t+2)}}),t.extend(e,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;((e=Math.pow(2,--i))-1)/11>t;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),t.each(e,function(e,i){t.easing["easeIn"+e]=i,t.easing["easeOut"+e]=function(t){return 1-i(1-t)},t.easing["easeInOut"+e]=function(t){return.5>t?i(2*t)/2:1-i(-2*t+2)/2}})}();var f=t.effects;t.effects.define("blind","hide",function(e,i){var s={up:["bottom","top"],vertical:["bottom","top"],down:["top","bottom"],left:["right","left"],horizontal:["right","left"],right:["left","right"]},n=t(this),o=e.direction||"up",a=n.cssClip(),r={clip:t.extend({},a)},h=t.effects.createPlaceholder(n);r.clip[s[o][0]]=r.clip[s[o][1]],"show"===e.mode&&(n.cssClip(r.clip),h&&h.css(t.effects.clipToBox(r)),r.clip=a),h&&h.animate(t.effects.clipToBox(r),e.duration,e.easing),n.animate(r,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("bounce",function(e,i){var s,n,o,a=t(this),r=e.mode,h="hide"===r,l="show"===r,c=e.direction||"up",u=e.distance,d=e.times||5,p=2*d+(l||h?1:0),f=e.duration/p,g=e.easing,m="up"===c||"down"===c?"top":"left",_="up"===c||"left"===c,v=0,b=a.queue().length;for(t.effects.createPlaceholder(a),o=a.css(m),u||(u=a["top"===m?"outerHeight":"outerWidth"]()/3),l&&(n={opacity:1},n[m]=o,a.css("opacity",0).css(m,_?2*-u:2*u).animate(n,f,g)),h&&(u/=Math.pow(2,d-1)),n={},n[m]=o;d>v;v++)s={},s[m]=(_?"-=":"+=")+u,a.animate(s,f,g).animate(n,f,g),u=h?2*u:u/2;h&&(s={opacity:0},s[m]=(_?"-=":"+=")+u,a.animate(s,f,g)),a.queue(i),t.effects.unshift(a,b,p+1)}),t.effects.define("clip","hide",function(e,i){var s,n={},o=t(this),a=e.direction||"vertical",r="both"===a,h=r||"horizontal"===a,l=r||"vertical"===a;s=o.cssClip(),n.clip={top:l?(s.bottom-s.top)/2:s.top,right:h?(s.right-s.left)/2:s.right,bottom:l?(s.bottom-s.top)/2:s.bottom,left:h?(s.right-s.left)/2:s.left},t.effects.createPlaceholder(o),"show"===e.mode&&(o.cssClip(n.clip),n.clip=s),o.animate(n,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("drop","hide",function(e,i){var s,n=t(this),o=e.mode,a="show"===o,r=e.direction||"left",h="up"===r||"down"===r?"top":"left",l="up"===r||"left"===r?"-=":"+=",c="+="===l?"-=":"+=",u={opacity:0};t.effects.createPlaceholder(n),s=e.distance||n["top"===h?"outerHeight":"outerWidth"](!0)/2,u[h]=l+s,a&&(n.css(u),u[h]=c+s,u.opacity=1),n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("explode","hide",function(e,i){function s(){b.push(this),b.length===u*d&&n()}function n(){p.css({visibility:"visible"}),t(b).remove(),i()}var o,a,r,h,l,c,u=e.pieces?Math.round(Math.sqrt(e.pieces)):3,d=u,p=t(this),f=e.mode,g="show"===f,m=p.show().css("visibility","hidden").offset(),_=Math.ceil(p.outerWidth()/d),v=Math.ceil(p.outerHeight()/u),b=[];for(o=0;u>o;o++)for(h=m.top+o*v,c=o-(u-1)/2,a=0;d>a;a++)r=m.left+a*_,l=a-(d-1)/2,p.clone().appendTo("body").wrap("
").css({position:"absolute",visibility:"visible",left:-a*_,top:-o*v}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:_,height:v,left:r+(g?l*_:0),top:h+(g?c*v:0),opacity:g?0:1}).animate({left:r+(g?0:l*_),top:h+(g?0:c*v),opacity:g?1:0},e.duration||500,e.easing,s)}),t.effects.define("fade","toggle",function(e,i){var s="show"===e.mode;t(this).css("opacity",s?0:1).animate({opacity:s?1:0},{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("fold","hide",function(e,i){var s=t(this),n=e.mode,o="show"===n,a="hide"===n,r=e.size||15,h=/([0-9]+)%/.exec(r),l=!!e.horizFirst,c=l?["right","bottom"]:["bottom","right"],u=e.duration/2,d=t.effects.createPlaceholder(s),p=s.cssClip(),f={clip:t.extend({},p)},g={clip:t.extend({},p)},m=[p[c[0]],p[c[1]]],_=s.queue().length;h&&(r=parseInt(h[1],10)/100*m[a?0:1]),f.clip[c[0]]=r,g.clip[c[0]]=r,g.clip[c[1]]=0,o&&(s.cssClip(g.clip),d&&d.css(t.effects.clipToBox(g)),g.clip=p),s.queue(function(i){d&&d.animate(t.effects.clipToBox(f),u,e.easing).animate(t.effects.clipToBox(g),u,e.easing),i()}).animate(f,u,e.easing).animate(g,u,e.easing).queue(i),t.effects.unshift(s,_,4)}),t.effects.define("highlight","show",function(e,i){var s=t(this),n={backgroundColor:s.css("backgroundColor")};"hide"===e.mode&&(n.opacity=0),t.effects.saveStyle(s),s.css({backgroundImage:"none",backgroundColor:e.color||"#ffff99"}).animate(n,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("size",function(e,i){var s,n,o,a=t(this),r=["fontSize"],h=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],l=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],c=e.mode,u="effect"!==c,d=e.scale||"both",p=e.origin||["middle","center"],f=a.css("position"),g=a.position(),m=t.effects.scaledDimensions(a),_=e.from||m,v=e.to||t.effects.scaledDimensions(a,0);t.effects.createPlaceholder(a),"show"===c&&(o=_,_=v,v=o),n={from:{y:_.height/m.height,x:_.width/m.width},to:{y:v.height/m.height,x:v.width/m.width}},("box"===d||"both"===d)&&(n.from.y!==n.to.y&&(_=t.effects.setTransition(a,h,n.from.y,_),v=t.effects.setTransition(a,h,n.to.y,v)),n.from.x!==n.to.x&&(_=t.effects.setTransition(a,l,n.from.x,_),v=t.effects.setTransition(a,l,n.to.x,v))),("content"===d||"both"===d)&&n.from.y!==n.to.y&&(_=t.effects.setTransition(a,r,n.from.y,_),v=t.effects.setTransition(a,r,n.to.y,v)),p&&(s=t.effects.getBaseline(p,m),_.top=(m.outerHeight-_.outerHeight)*s.y+g.top,_.left=(m.outerWidth-_.outerWidth)*s.x+g.left,v.top=(m.outerHeight-v.outerHeight)*s.y+g.top,v.left=(m.outerWidth-v.outerWidth)*s.x+g.left),a.css(_),("content"===d||"both"===d)&&(h=h.concat(["marginTop","marginBottom"]).concat(r),l=l.concat(["marginLeft","marginRight"]),a.find("*[width]").each(function(){var i=t(this),s=t.effects.scaledDimensions(i),o={height:s.height*n.from.y,width:s.width*n.from.x,outerHeight:s.outerHeight*n.from.y,outerWidth:s.outerWidth*n.from.x},a={height:s.height*n.to.y,width:s.width*n.to.x,outerHeight:s.height*n.to.y,outerWidth:s.width*n.to.x};n.from.y!==n.to.y&&(o=t.effects.setTransition(i,h,n.from.y,o),a=t.effects.setTransition(i,h,n.to.y,a)),n.from.x!==n.to.x&&(o=t.effects.setTransition(i,l,n.from.x,o),a=t.effects.setTransition(i,l,n.to.x,a)),u&&t.effects.saveStyle(i),i.css(o),i.animate(a,e.duration,e.easing,function(){u&&t.effects.restoreStyle(i)})})),a.animate(v,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){var e=a.offset();0===v.opacity&&a.css("opacity",_.opacity),u||(a.css("position","static"===f?"relative":f).offset(e),t.effects.saveStyle(a)),i()}})}),t.effects.define("scale",function(e,i){var s=t(this),n=e.mode,o=parseInt(e.percent,10)||(0===parseInt(e.percent,10)?0:"effect"!==n?0:100),a=t.extend(!0,{from:t.effects.scaledDimensions(s),to:t.effects.scaledDimensions(s,o,e.direction||"both"),origin:e.origin||["middle","center"]},e);e.fade&&(a.from.opacity=1,a.to.opacity=0),t.effects.effect.size.call(this,a,i)}),t.effects.define("puff","hide",function(e,i){var s=t.extend(!0,{},e,{fade:!0,percent:parseInt(e.percent,10)||150});t.effects.effect.scale.call(this,s,i)}),t.effects.define("pulsate","show",function(e,i){var s=t(this),n=e.mode,o="show"===n,a="hide"===n,r=o||a,h=2*(e.times||5)+(r?1:0),l=e.duration/h,c=0,u=1,d=s.queue().length;for((o||!s.is(":visible"))&&(s.css("opacity",0).show(),c=1);h>u;u++)s.animate({opacity:c},l,e.easing),c=1-c;s.animate({opacity:c},l,e.easing),s.queue(i),t.effects.unshift(s,d,h+1)}),t.effects.define("shake",function(e,i){var s=1,n=t(this),o=e.direction||"left",a=e.distance||20,r=e.times||3,h=2*r+1,l=Math.round(e.duration/h),c="up"===o||"down"===o?"top":"left",u="up"===o||"left"===o,d={},p={},f={},g=n.queue().length;for(t.effects.createPlaceholder(n),d[c]=(u?"-=":"+=")+a,p[c]=(u?"+=":"-=")+2*a,f[c]=(u?"-=":"+=")+2*a,n.animate(d,l,e.easing);r>s;s++)n.animate(p,l,e.easing).animate(f,l,e.easing);n.animate(p,l,e.easing).animate(d,l/2,e.easing).queue(i),t.effects.unshift(n,g,h+1)}),t.effects.define("slide","show",function(e,i){var s,n,o=t(this),a={up:["bottom","top"],down:["top","bottom"],left:["right","left"],right:["left","right"]},r=e.mode,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h,u=e.distance||o["top"===l?"outerHeight":"outerWidth"](!0),d={};t.effects.createPlaceholder(o),s=o.cssClip(),n=o.position()[l],d[l]=(c?-1:1)*u+n,d.clip=o.cssClip(),d.clip[a[h][1]]=d.clip[a[h][0]],"show"===r&&(o.cssClip(d.clip),o.css(l,d[l]),d.clip=s,d[l]=n),o.animate(d,{queue:!1,duration:e.duration,easing:e.easing,complete:i})});var f;t.uiBackCompat!==!1&&(f=t.effects.define("transfer",function(e,i){t(this).transfer(e,i)})),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,.\/:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.widget("ui.accordion",{version:"1.12.1",options:{active:0,animate:{},classes:{"ui-accordion-header":"ui-corner-top","ui-accordion-header-collapsed":"ui-corner-all","ui-accordion-content":"ui-corner-bottom"},collapsible:!1,event:"click",header:"> li > :first-child, > :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var e=this.options;this.prevShow=this.prevHide=t(),this._addClass("ui-accordion","ui-widget ui-helper-reset"),this.element.attr("role","tablist"),e.collapsible||e.active!==!1&&null!=e.active||(e.active=0),this._processPanels(),0>e.active&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t()}},_createIcons:function(){var e,i,s=this.options.icons;s&&(e=t(""),this._addClass(e,"ui-accordion-header-icon","ui-icon "+s.header),e.prependTo(this.headers),i=this.active.children(".ui-accordion-header-icon"),this._removeClass(i,s.header)._addClass(i,null,s.activeHeader)._addClass(this.headers,"ui-accordion-icons"))},_destroyIcons:function(){this._removeClass(this.headers,"ui-accordion-icons"),this.headers.children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeAttr("role"),this.headers.removeAttr("role aria-expanded aria-selected aria-controls tabIndex").removeUniqueId(),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role aria-hidden aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){return"active"===t?(this._activate(e),void 0):("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||this.options.active!==!1||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons()),void 0)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t),this._toggleClass(this.headers.add(this.headers.next()),null,"ui-state-disabled",!!t)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,s=this.headers.length,n=this.headers.index(e.target),o=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:o=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:o=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:o=this.headers[0];break;case i.END:o=this.headers[s-1]}o&&(t(e.target).attr("tabIndex",-1),t(o).attr("tabIndex",0),t(o).trigger("focus"),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().trigger("focus")},refresh:function(){var e=this.options;this._processPanels(),e.active===!1&&e.collapsible===!0||!this.headers.length?(e.active=!1,this.active=t()):e.active===!1?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var t=this.headers,e=this.panels;this.headers=this.element.find(this.options.header),this._addClass(this.headers,"ui-accordion-header ui-accordion-header-collapsed","ui-state-default"),this.panels=this.headers.next().filter(":not(.ui-accordion-content-active)").hide(),this._addClass(this.panels,"ui-accordion-content","ui-helper-reset ui-widget-content"),e&&(this._off(t.not(this.headers)),this._off(e.not(this.panels)))},_refresh:function(){var e,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active),this._addClass(this.active,"ui-accordion-header-active","ui-state-active")._removeClass(this.active,"ui-accordion-header-collapsed"),this._addClass(this.active.next(),"ui-accordion-content-active"),this.active.next().show(),this.headers.attr("role","tab").each(function(){var e=t(this),i=e.uniqueId().attr("id"),s=e.next(),n=s.uniqueId().attr("id");e.attr("aria-controls",n),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(e=n.height(),this.element.siblings(":visible").each(function(){var i=t(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(e-=i.outerHeight(!0))}),this.headers.each(function(){e-=t(this).outerHeight(!0)}),this.headers.next().each(function(){t(this).height(Math.max(0,e-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===s&&(e=0,this.headers.next().each(function(){var i=t(this).is(":visible");i||t(this).show(),e=Math.max(e,t(this).css("height","").height()),i||t(this).hide()}).height(e))},_activate:function(e){var i=this._findActive(e)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var i,s,n=this.options,o=this.active,a=t(e.currentTarget),r=a[0]===o[0],h=r&&n.collapsible,l=h?t():a.next(),c=o.next(),u={oldHeader:o,oldPanel:c,newHeader:h?t():a,newPanel:l};e.preventDefault(),r&&!n.collapsible||this._trigger("beforeActivate",e,u)===!1||(n.active=h?!1:this.headers.index(a),this.active=r?t():a,this._toggle(u),this._removeClass(o,"ui-accordion-header-active","ui-state-active"),n.icons&&(i=o.children(".ui-accordion-header-icon"),this._removeClass(i,null,n.icons.activeHeader)._addClass(i,null,n.icons.header)),r||(this._removeClass(a,"ui-accordion-header-collapsed")._addClass(a,"ui-accordion-header-active","ui-state-active"),n.icons&&(s=a.children(".ui-accordion-header-icon"),this._removeClass(s,null,n.icons.header)._addClass(s,null,n.icons.activeHeader)),this._addClass(a.next(),"ui-accordion-content-active")))},_toggle:function(e){var i=e.newPanel,s=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,e):(s.hide(),i.show(),this._toggleComplete(e)),s.attr({"aria-hidden":"true"}),s.prev().attr({"aria-selected":"false","aria-expanded":"false"}),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===parseInt(t(this).attr("tabIndex"),10)}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(t,e,i){var s,n,o,a=this,r=0,h=t.css("box-sizing"),l=t.length&&(!e.length||t.index()",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault()},"click .ui-menu-item":function(e){var i=t(e.target),s=t(t.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(e),e.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(e):!this.element.is(":focus")&&s.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){if(!this.previousFilter){var i=t(e.target).closest(".ui-menu-item"),s=t(e.currentTarget);i[0]===s[0]&&(this._removeClass(s.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(e,s))}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.find(this.options.items).eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){var i=!t.contains(this.element[0],t.ui.safeActiveElement(this.document[0]));i&&this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t),this.mouseHandled=!1}})},_destroy:function(){var e=this.element.find(".ui-menu-item").removeAttr("role aria-disabled"),i=e.children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),i.children().each(function(){var e=t(this);e.data("ui-menu-submenu-caret")&&e.remove()})},_keydown:function(e){var i,s,n,o,a=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:a=!1,s=this.previousFilter||"",o=!1,n=e.keyCode>=96&&105>=e.keyCode?""+(e.keyCode-96):String.fromCharCode(e.keyCode),clearTimeout(this.filterTimer),n===s?o=!0:n=s+n,i=this._filterMenuItems(n),i=o&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i,i.length||(n=String.fromCharCode(e.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(e,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}a&&e.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i,s,n,o,a=this,r=this.options.icons.submenu,h=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),s=h.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),i=e.prev(),s=t("").data("ui-menu-submenu-caret",!0);a._addClass(s,"ui-menu-icon","ui-icon "+r),i.attr("aria-haspopup","true").prepend(s),e.attr("aria-labelledby",i.attr("id"))}),this._addClass(s,"ui-menu","ui-widget ui-widget-content ui-front"),e=h.add(this.element),i=e.find(this.options.items),i.not(".ui-menu-item").each(function(){var e=t(this);a._isDivider(e)&&a._addClass(e,"ui-menu-divider","ui-widget-content")}),n=i.not(".ui-menu-item, .ui-menu-divider"),o=n.children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(n,"ui-menu-item")._addClass(o,"ui-menu-item-wrapper"),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){if("icons"===t){var i=this.element.find(".ui-menu-icon");this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)}this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t+""),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i,s,n;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),s=this.active.children(".ui-menu-item-wrapper"),this._addClass(s,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),n=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(n,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=e.children(".ui-menu"),i.length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,s,n,o,a,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,n=e.offset().top-this.activeMenu.offset().top-i-s,o=this.activeMenu.scrollTop(),a=this.activeMenu.height(),r=e.outerHeight(),0>n?this.activeMenu.scrollTop(o+n):n+r>a&&this.activeMenu.scrollTop(o+n-a+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this._removeClass(this.active.children(".ui-menu-item-wrapper"),null,"ui-state-active"),this._trigger("blur",t,{item:this.active}),this.active=null)},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(e),this._removeClass(s.find(".ui-state-active"),null,"ui-state-active"),this.activeMenu=s},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false")},_closeOnDocumentClick:function(e){return!t(e.target).closest(".ui-menu").length},_isDivider:function(t){return!/[^\-\u2014\u2013\s]/.test(t.text())},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var s;this.active&&(s="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=t(this),0>i.offset().top-s-n}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(e),void 0)},previousPage:function(e){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=t(this),i.offset().top-s+n>0}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items).first())),void 0):(this.next(e),void 0)},_hasScroll:function(){return this.element.outerHeight()",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var e,i,s,n=this.element[0].nodeName.toLowerCase(),o="textarea"===n,a="input"===n; - this.isMultiLine=o||!a&&this._isContentEditable(this.element),this.valueMethod=this.element[o||a?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return e=!0,s=!0,i=!0,void 0;e=!1,s=!1,i=!1;var o=t.ui.keyCode;switch(n.keyCode){case o.PAGE_UP:e=!0,this._move("previousPage",n);break;case o.PAGE_DOWN:e=!0,this._move("nextPage",n);break;case o.UP:e=!0,this._keyEvent("previous",n);break;case o.DOWN:e=!0,this._keyEvent("next",n);break;case o.ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case o.TAB:this.menu.active&&this.menu.select(n);break;case o.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(e)return e=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(t){return s?(s=!1,t.preventDefault(),void 0):(this._searchTimeout(t),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(t),this._change(t),void 0)}}),this._initSource(),this.menu=t("
    ").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(e){e.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,this.element[0]!==t.ui.safeActiveElement(this.document[0])&&this.element.trigger("focus")})},menufocus:function(e,i){var s,n;return this.isNewMenu&&(this.isNewMenu=!1,e.originalEvent&&/^mouse/.test(e.originalEvent.type))?(this.menu.blur(),this.document.one("mousemove",function(){t(e.target).trigger(e.originalEvent)}),void 0):(n=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",e,{item:n})&&e.originalEvent&&/^key/.test(e.originalEvent.type)&&this._value(n.value),s=i.item.attr("aria-label")||n.value,s&&t.trim(s).length&&(this.liveRegion.children().hide(),t("
    ").text(s).appendTo(this.liveRegion)),void 0)},menuselect:function(e,i){var s=i.item.data("ui-autocomplete-item"),n=this.previous;this.element[0]!==t.ui.safeActiveElement(this.document[0])&&(this.element.trigger("focus"),this.previous=n,this._delay(function(){this.previous=n,this.selectedItem=s})),!1!==this._trigger("select",e,{item:s})&&this._value(s.value),this.term=this._value(),this.close(e),this.selectedItem=s}}),this.liveRegion=t("
    ",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(e){var i=this.menu.element[0];return e.target===this.element[0]||e.target===i||t.contains(i,e.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e&&e[0]||(e=this.element.closest(".ui-front, dialog")),e.length||(e=this.document[0].body),e},_initSource:function(){var e,i,s=this;t.isArray(this.options.source)?(e=this.options.source,this.source=function(i,s){s(t.ui.autocomplete.filter(e,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(e,n){s.xhr&&s.xhr.abort(),s.xhr=t.ajax({url:i,data:e,dataType:"json",success:function(t){n(t)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(t){clearTimeout(this.searching),this.searching=this._delay(function(){var e=this.term===this._value(),i=this.menu.element.is(":visible"),s=t.altKey||t.ctrlKey||t.metaKey||t.shiftKey;(!e||e&&!i&&!s)&&(this.selectedItem=null,this.search(null,t))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length").append(t("
    ").text(i.label)).appendTo(e)},_move:function(t,e){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),this.menu.blur(),void 0):(this.menu[t](e),void 0):(this.search(null,e),void 0)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(t,e),e.preventDefault())},_isContentEditable:function(t){if(!t.length)return!1;var e=t.prop("contentEditable");return"inherit"===e?this._isContentEditable(t.parent()):"true"===e}}),t.extend(t.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(e,i){var s=RegExp(t.ui.autocomplete.escapeRegex(i),"i");return t.grep(e,function(t){return s.test(t.label||t.value||t)})}}),t.widget("ui.autocomplete",t.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(t>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(e){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=e&&e.length?this.options.messages.results(e.length):this.options.messages.noResults,this.liveRegion.children().hide(),t("
    ").text(i).appendTo(this.liveRegion))}}),t.ui.autocomplete;var g=/ui-corner-([a-z]){2,6}/g;t.widget("ui.controlgroup",{version:"1.12.1",defaultElement:"
    ",options:{direction:"horizontal",disabled:null,onlyVisible:!0,items:{button:"input[type=button], input[type=submit], input[type=reset], button, a",controlgroupLabel:".ui-controlgroup-label",checkboxradio:"input[type='checkbox'], input[type='radio']",selectmenu:"select",spinner:".ui-spinner-input"}},_create:function(){this._enhance()},_enhance:function(){this.element.attr("role","toolbar"),this.refresh()},_destroy:function(){this._callChildMethod("destroy"),this.childWidgets.removeData("ui-controlgroup-data"),this.element.removeAttr("role"),this.options.items.controlgroupLabel&&this.element.find(this.options.items.controlgroupLabel).find(".ui-controlgroup-label-contents").contents().unwrap()},_initWidgets:function(){var e=this,i=[];t.each(this.options.items,function(s,n){var o,a={};return n?"controlgroupLabel"===s?(o=e.element.find(n),o.each(function(){var e=t(this);e.children(".ui-controlgroup-label-contents").length||e.contents().wrapAll("")}),e._addClass(o,null,"ui-widget ui-widget-content ui-state-default"),i=i.concat(o.get()),void 0):(t.fn[s]&&(a=e["_"+s+"Options"]?e["_"+s+"Options"]("middle"):{classes:{}},e.element.find(n).each(function(){var n=t(this),o=n[s]("instance"),r=t.widget.extend({},a);if("button"!==s||!n.parent(".ui-spinner").length){o||(o=n[s]()[s]("instance")),o&&(r.classes=e._resolveClassesValues(r.classes,o)),n[s](r);var h=n[s]("widget");t.data(h[0],"ui-controlgroup-data",o?o:n[s]("instance")),i.push(h[0])}})),void 0):void 0}),this.childWidgets=t(t.unique(i)),this._addClass(this.childWidgets,"ui-controlgroup-item")},_callChildMethod:function(e){this.childWidgets.each(function(){var i=t(this),s=i.data("ui-controlgroup-data");s&&s[e]&&s[e]()})},_updateCornerClass:function(t,e){var i="ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all",s=this._buildSimpleOptions(e,"label").classes.label;this._removeClass(t,null,i),this._addClass(t,null,s)},_buildSimpleOptions:function(t,e){var i="vertical"===this.options.direction,s={classes:{}};return s.classes[e]={middle:"",first:"ui-corner-"+(i?"top":"left"),last:"ui-corner-"+(i?"bottom":"right"),only:"ui-corner-all"}[t],s},_spinnerOptions:function(t){var e=this._buildSimpleOptions(t,"ui-spinner");return e.classes["ui-spinner-up"]="",e.classes["ui-spinner-down"]="",e},_buttonOptions:function(t){return this._buildSimpleOptions(t,"ui-button")},_checkboxradioOptions:function(t){return this._buildSimpleOptions(t,"ui-checkboxradio-label")},_selectmenuOptions:function(t){var e="vertical"===this.options.direction;return{width:e?"auto":!1,classes:{middle:{"ui-selectmenu-button-open":"","ui-selectmenu-button-closed":""},first:{"ui-selectmenu-button-open":"ui-corner-"+(e?"top":"tl"),"ui-selectmenu-button-closed":"ui-corner-"+(e?"top":"left")},last:{"ui-selectmenu-button-open":e?"":"ui-corner-tr","ui-selectmenu-button-closed":"ui-corner-"+(e?"bottom":"right")},only:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"}}[t]}},_resolveClassesValues:function(e,i){var s={};return t.each(e,function(n){var o=i.options.classes[n]||"";o=t.trim(o.replace(g,"")),s[n]=(o+" "+e[n]).replace(/\s+/g," ")}),s},_setOption:function(t,e){return"direction"===t&&this._removeClass("ui-controlgroup-"+this.options.direction),this._super(t,e),"disabled"===t?(this._callChildMethod(e?"disable":"enable"),void 0):(this.refresh(),void 0)},refresh:function(){var e,i=this;this._addClass("ui-controlgroup ui-controlgroup-"+this.options.direction),"horizontal"===this.options.direction&&this._addClass(null,"ui-helper-clearfix"),this._initWidgets(),e=this.childWidgets,this.options.onlyVisible&&(e=e.filter(":visible")),e.length&&(t.each(["first","last"],function(t,s){var n=e[s]().data("ui-controlgroup-data");if(n&&i["_"+n.widgetName+"Options"]){var o=i["_"+n.widgetName+"Options"](1===e.length?"only":s);o.classes=i._resolveClassesValues(o.classes,n),n.element[n.widgetName](o)}else i._updateCornerClass(e[s](),s)}),this._callChildMethod("refresh"))}}),t.widget("ui.checkboxradio",[t.ui.formResetMixin,{version:"1.12.1",options:{disabled:null,label:null,icon:!0,classes:{"ui-checkboxradio-label":"ui-corner-all","ui-checkboxradio-icon":"ui-corner-all"}},_getCreateOptions:function(){var e,i,s=this,n=this._super()||{};return this._readType(),i=this.element.labels(),this.label=t(i[i.length-1]),this.label.length||t.error("No label found for checkboxradio widget"),this.originalLabel="",this.label.contents().not(this.element[0]).each(function(){s.originalLabel+=3===this.nodeType?t(this).text():this.outerHTML}),this.originalLabel&&(n.label=this.originalLabel),e=this.element[0].disabled,null!=e&&(n.disabled=e),n},_create:function(){var t=this.element[0].checked;this._bindFormResetHandler(),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled),this._setOption("disabled",this.options.disabled),this._addClass("ui-checkboxradio","ui-helper-hidden-accessible"),this._addClass(this.label,"ui-checkboxradio-label","ui-button ui-widget"),"radio"===this.type&&this._addClass(this.label,"ui-checkboxradio-radio-label"),this.options.label&&this.options.label!==this.originalLabel?this._updateLabel():this.originalLabel&&(this.options.label=this.originalLabel),this._enhance(),t&&(this._addClass(this.label,"ui-checkboxradio-checked","ui-state-active"),this.icon&&this._addClass(this.icon,null,"ui-state-hover")),this._on({change:"_toggleClasses",focus:function(){this._addClass(this.label,null,"ui-state-focus ui-visual-focus")},blur:function(){this._removeClass(this.label,null,"ui-state-focus ui-visual-focus")}})},_readType:function(){var e=this.element[0].nodeName.toLowerCase();this.type=this.element[0].type,"input"===e&&/radio|checkbox/.test(this.type)||t.error("Can't create checkboxradio on element.nodeName="+e+" and element.type="+this.type)},_enhance:function(){this._updateIcon(this.element[0].checked)},widget:function(){return this.label},_getRadioGroup:function(){var e,i=this.element[0].name,s="input[name='"+t.ui.escapeSelector(i)+"']";return i?(e=this.form.length?t(this.form[0].elements).filter(s):t(s).filter(function(){return 0===t(this).form().length}),e.not(this.element)):t([])},_toggleClasses:function(){var e=this.element[0].checked;this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",e),this.options.icon&&"checkbox"===this.type&&this._toggleClass(this.icon,null,"ui-icon-check ui-state-checked",e)._toggleClass(this.icon,null,"ui-icon-blank",!e),"radio"===this.type&&this._getRadioGroup().each(function(){var e=t(this).checkboxradio("instance");e&&e._removeClass(e.label,"ui-checkboxradio-checked","ui-state-active")})},_destroy:function(){this._unbindFormResetHandler(),this.icon&&(this.icon.remove(),this.iconSpace.remove())},_setOption:function(t,e){return"label"!==t||e?(this._super(t,e),"disabled"===t?(this._toggleClass(this.label,null,"ui-state-disabled",e),this.element[0].disabled=e,void 0):(this.refresh(),void 0)):void 0},_updateIcon:function(e){var i="ui-icon ui-icon-background ";this.options.icon?(this.icon||(this.icon=t(""),this.iconSpace=t(" "),this._addClass(this.iconSpace,"ui-checkboxradio-icon-space")),"checkbox"===this.type?(i+=e?"ui-icon-check ui-state-checked":"ui-icon-blank",this._removeClass(this.icon,null,e?"ui-icon-blank":"ui-icon-check")):i+="ui-icon-blank",this._addClass(this.icon,"ui-checkboxradio-icon",i),e||this._removeClass(this.icon,null,"ui-icon-check ui-state-checked"),this.icon.prependTo(this.label).after(this.iconSpace)):void 0!==this.icon&&(this.icon.remove(),this.iconSpace.remove(),delete this.icon)},_updateLabel:function(){var t=this.label.contents().not(this.element[0]);this.icon&&(t=t.not(this.icon[0])),this.iconSpace&&(t=t.not(this.iconSpace[0])),t.remove(),this.label.append(this.options.label)},refresh:function(){var t=this.element[0].checked,e=this.element[0].disabled;this._updateIcon(t),this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",t),null!==this.options.label&&this._updateLabel(),e!==this.options.disabled&&this._setOptions({disabled:e})}}]),t.ui.checkboxradio,t.widget("ui.button",{version:"1.12.1",defaultElement:"").addClass(this._triggerClass).html(o?t("").attr({src:o,alt:n,title:n}):n)),e[r?"before":"after"](i.trigger),i.trigger.on("click",function(){return t.datepicker._datepickerShowing&&t.datepicker._lastInput===e[0]?t.datepicker._hideDatepicker():t.datepicker._datepickerShowing&&t.datepicker._lastInput!==e[0]?(t.datepicker._hideDatepicker(),t.datepicker._showDatepicker(e[0])):t.datepicker._showDatepicker(e[0]),!1}))},_autoSize:function(t){if(this._get(t,"autoSize")&&!t.inline){var e,i,s,n,o=new Date(2009,11,20),a=this._get(t,"dateFormat");a.match(/[DM]/)&&(e=function(t){for(i=0,s=0,n=0;t.length>n;n++)t[n].length>i&&(i=t[n].length,s=n);return s},o.setMonth(e(this._get(t,a.match(/MM/)?"monthNames":"monthNamesShort"))),o.setDate(e(this._get(t,a.match(/DD/)?"dayNames":"dayNamesShort"))+20-o.getDay())),t.input.attr("size",this._formatDate(t,o).length)}},_inlineDatepicker:function(e,i){var s=t(e);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),t.data(e,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(e),i.dpDiv.css("display","block"))},_dialogDatepicker:function(e,i,s,n,o){var r,h,l,c,u,d=this._dialogInst;return d||(this.uuid+=1,r="dp"+this.uuid,this._dialogInput=t(""),this._dialogInput.on("keydown",this._doKeyDown),t("body").append(this._dialogInput),d=this._dialogInst=this._newInst(this._dialogInput,!1),d.settings={},t.data(this._dialogInput[0],"datepicker",d)),a(d.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(d,i):i,this._dialogInput.val(i),this._pos=o?o.length?o:[o.pageX,o.pageY]:null,this._pos||(h=document.documentElement.clientWidth,l=document.documentElement.clientHeight,c=document.documentElement.scrollLeft||document.body.scrollLeft,u=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[h/2-100+c,l/2-150+u]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),d.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),t.blockUI&&t.blockUI(this.dpDiv),t.data(this._dialogInput[0],"datepicker",d),this},_destroyDatepicker:function(e){var i,s=t(e),n=t.data(e,"datepicker");s.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),t.removeData(e,"datepicker"),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).off("focus",this._showDatepicker).off("keydown",this._doKeyDown).off("keypress",this._doKeyPress).off("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty(),m===n&&(m=null))},_enableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!1,o.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!0,o.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;this._disabledInputs.length>e;e++)if(this._disabledInputs[e]===t)return!0;return!1},_getInst:function(e){try{return t.data(e,"datepicker")}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(e,i,s){var n,o,r,h,l=this._getInst(e);return 2===arguments.length&&"string"==typeof i?"defaults"===i?t.extend({},t.datepicker._defaults):l?"all"===i?t.extend({},l.settings):this._get(l,i):null:(n=i||{},"string"==typeof i&&(n={},n[i]=s),l&&(this._curInst===l&&this._hideDatepicker(),o=this._getDateDatepicker(e,!0),r=this._getMinMaxDate(l,"min"),h=this._getMinMaxDate(l,"max"),a(l.settings,n),null!==r&&void 0!==n.dateFormat&&void 0===n.minDate&&(l.settings.minDate=this._formatDate(l,r)),null!==h&&void 0!==n.dateFormat&&void 0===n.maxDate&&(l.settings.maxDate=this._formatDate(l,h)),"disabled"in n&&(n.disabled?this._disableDatepicker(e):this._enableDatepicker(e)),this._attachments(t(e),l),this._autoSize(l),this._setDate(l,o),this._updateAlternate(l),this._updateDatepicker(l)),void 0)},_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){var e=this._getInst(t);e&&this._updateDatepicker(e)},_setDateDatepicker:function(t,e){var i=this._getInst(t);i&&(this._setDate(i,e),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(t,e){var i=this._getInst(t);return i&&!i.inline&&this._setDateFromField(i,e),i?this._getDate(i):null},_doKeyDown:function(e){var i,s,n,o=t.datepicker._getInst(e.target),a=!0,r=o.dpDiv.is(".ui-datepicker-rtl");if(o._keyEvent=!0,t.datepicker._datepickerShowing)switch(e.keyCode){case 9:t.datepicker._hideDatepicker(),a=!1;break;case 13:return n=t("td."+t.datepicker._dayOverClass+":not(."+t.datepicker._currentClass+")",o.dpDiv),n[0]&&t.datepicker._selectDay(e.target,o.selectedMonth,o.selectedYear,n[0]),i=t.datepicker._get(o,"onSelect"),i?(s=t.datepicker._formatDate(o),i.apply(o.input?o.input[0]:null,[s,o])):t.datepicker._hideDatepicker(),!1;case 27:t.datepicker._hideDatepicker();break;case 33:t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 34:t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 35:(e.ctrlKey||e.metaKey)&&t.datepicker._clearDate(e.target),a=e.ctrlKey||e.metaKey;break;case 36:(e.ctrlKey||e.metaKey)&&t.datepicker._gotoToday(e.target),a=e.ctrlKey||e.metaKey;break;case 37:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?1:-1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 38:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,-7,"D"),a=e.ctrlKey||e.metaKey;break;case 39:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?-1:1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 40:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,7,"D"),a=e.ctrlKey||e.metaKey;break;default:a=!1}else 36===e.keyCode&&e.ctrlKey?t.datepicker._showDatepicker(this):a=!1;a&&(e.preventDefault(),e.stopPropagation())},_doKeyPress:function(e){var i,s,n=t.datepicker._getInst(e.target);return t.datepicker._get(n,"constrainInput")?(i=t.datepicker._possibleChars(t.datepicker._get(n,"dateFormat")),s=String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),e.ctrlKey||e.metaKey||" ">s||!i||i.indexOf(s)>-1):void 0},_doKeyUp:function(e){var i,s=t.datepicker._getInst(e.target);if(s.input.val()!==s.lastVal)try{i=t.datepicker.parseDate(t.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,t.datepicker._getFormatConfig(s)),i&&(t.datepicker._setDateFromField(s),t.datepicker._updateAlternate(s),t.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(e){if(e=e.target||e,"input"!==e.nodeName.toLowerCase()&&(e=t("input",e.parentNode)[0]),!t.datepicker._isDisabledDatepicker(e)&&t.datepicker._lastInput!==e){var s,n,o,r,h,l,c;s=t.datepicker._getInst(e),t.datepicker._curInst&&t.datepicker._curInst!==s&&(t.datepicker._curInst.dpDiv.stop(!0,!0),s&&t.datepicker._datepickerShowing&&t.datepicker._hideDatepicker(t.datepicker._curInst.input[0])),n=t.datepicker._get(s,"beforeShow"),o=n?n.apply(e,[e,s]):{},o!==!1&&(a(s.settings,o),s.lastVal=null,t.datepicker._lastInput=e,t.datepicker._setDateFromField(s),t.datepicker._inDialog&&(e.value=""),t.datepicker._pos||(t.datepicker._pos=t.datepicker._findPos(e),t.datepicker._pos[1]+=e.offsetHeight),r=!1,t(e).parents().each(function(){return r|="fixed"===t(this).css("position"),!r}),h={left:t.datepicker._pos[0],top:t.datepicker._pos[1]},t.datepicker._pos=null,s.dpDiv.empty(),s.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),t.datepicker._updateDatepicker(s),h=t.datepicker._checkOffset(s,h,r),s.dpDiv.css({position:t.datepicker._inDialog&&t.blockUI?"static":r?"fixed":"absolute",display:"none",left:h.left+"px",top:h.top+"px"}),s.inline||(l=t.datepicker._get(s,"showAnim"),c=t.datepicker._get(s,"duration"),s.dpDiv.css("z-index",i(t(e))+1),t.datepicker._datepickerShowing=!0,t.effects&&t.effects.effect[l]?s.dpDiv.show(l,t.datepicker._get(s,"showOptions"),c):s.dpDiv[l||"show"](l?c:null),t.datepicker._shouldFocusInput(s)&&s.input.trigger("focus"),t.datepicker._curInst=s)) - }},_updateDatepicker:function(e){this.maxRows=4,m=e,e.dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(e);var i,s=this._getNumberOfMonths(e),n=s[1],a=17,r=e.dpDiv.find("."+this._dayOverClass+" a");r.length>0&&o.apply(r.get(0)),e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&e.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",a*n+"em"),e.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),e.dpDiv[(this._get(e,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),e===t.datepicker._curInst&&t.datepicker._datepickerShowing&&t.datepicker._shouldFocusInput(e)&&e.input.trigger("focus"),e.yearshtml&&(i=e.yearshtml,setTimeout(function(){i===e.yearshtml&&e.yearshtml&&e.dpDiv.find("select.ui-datepicker-year:first").replaceWith(e.yearshtml),i=e.yearshtml=null},0))},_shouldFocusInput:function(t){return t.input&&t.input.is(":visible")&&!t.input.is(":disabled")&&!t.input.is(":focus")},_checkOffset:function(e,i,s){var n=e.dpDiv.outerWidth(),o=e.dpDiv.outerHeight(),a=e.input?e.input.outerWidth():0,r=e.input?e.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:t(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:t(document).scrollTop());return i.left-=this._get(e,"isRTL")?n-a:0,i.left-=s&&i.left===e.input.offset().left?t(document).scrollLeft():0,i.top-=s&&i.top===e.input.offset().top+r?t(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+o>l&&l>o?Math.abs(o+r):0),i},_findPos:function(e){for(var i,s=this._getInst(e),n=this._get(s,"isRTL");e&&("hidden"===e.type||1!==e.nodeType||t.expr.filters.hidden(e));)e=e[n?"previousSibling":"nextSibling"];return i=t(e).offset(),[i.left,i.top]},_hideDatepicker:function(e){var i,s,n,o,a=this._curInst;!a||e&&a!==t.data(e,"datepicker")||this._datepickerShowing&&(i=this._get(a,"showAnim"),s=this._get(a,"duration"),n=function(){t.datepicker._tidyDialog(a)},t.effects&&(t.effects.effect[i]||t.effects[i])?a.dpDiv.hide(i,t.datepicker._get(a,"showOptions"),s,n):a.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,o=this._get(a,"onClose"),o&&o.apply(a.input?a.input[0]:null,[a.input?a.input.val():"",a]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),t.blockUI&&(t.unblockUI(),t("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).off(".ui-datepicker-calendar")},_checkExternalClick:function(e){if(t.datepicker._curInst){var i=t(e.target),s=t.datepicker._getInst(i[0]);(i[0].id!==t.datepicker._mainDivId&&0===i.parents("#"+t.datepicker._mainDivId).length&&!i.hasClass(t.datepicker.markerClassName)&&!i.closest("."+t.datepicker._triggerClass).length&&t.datepicker._datepickerShowing&&(!t.datepicker._inDialog||!t.blockUI)||i.hasClass(t.datepicker.markerClassName)&&t.datepicker._curInst!==s)&&t.datepicker._hideDatepicker()}},_adjustDate:function(e,i,s){var n=t(e),o=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(o,i+("M"===s?this._get(o,"showCurrentAtPos"):0),s),this._updateDatepicker(o))},_gotoToday:function(e){var i,s=t(e),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(e,i,s){var n=t(e),o=this._getInst(n[0]);o["selected"+("M"===s?"Month":"Year")]=o["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(o),this._adjustDate(n)},_selectDay:function(e,i,s,n){var o,a=t(e);t(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(a[0])||(o=this._getInst(a[0]),o.selectedDay=o.currentDay=t("a",n).html(),o.selectedMonth=o.currentMonth=i,o.selectedYear=o.currentYear=s,this._selectDate(e,this._formatDate(o,o.currentDay,o.currentMonth,o.currentYear)))},_clearDate:function(e){var i=t(e);this._selectDate(i,"")},_selectDate:function(e,i){var s,n=t(e),o=this._getInst(n[0]);i=null!=i?i:this._formatDate(o),o.input&&o.input.val(i),this._updateAlternate(o),s=this._get(o,"onSelect"),s?s.apply(o.input?o.input[0]:null,[i,o]):o.input&&o.input.trigger("change"),o.inline?this._updateDatepicker(o):(this._hideDatepicker(),this._lastInput=o.input[0],"object"!=typeof o.input[0]&&o.input.trigger("focus"),this._lastInput=null)},_updateAlternate:function(e){var i,s,n,o=this._get(e,"altField");o&&(i=this._get(e,"altFormat")||this._get(e,"dateFormat"),s=this._getDate(e),n=this.formatDate(i,s,this._getFormatConfig(e)),t(o).val(n))},noWeekends:function(t){var e=t.getDay();return[e>0&&6>e,""]},iso8601Week:function(t){var e,i=new Date(t.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),e=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((e-i)/864e5)/7)+1},parseDate:function(e,i,s){if(null==e||null==i)throw"Invalid arguments";if(i="object"==typeof i?""+i:i+"",""===i)return null;var n,o,a,r,h=0,l=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff,c="string"!=typeof l?l:(new Date).getFullYear()%100+parseInt(l,10),u=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,d=(s?s.dayNames:null)||this._defaults.dayNames,p=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,f=(s?s.monthNames:null)||this._defaults.monthNames,g=-1,m=-1,_=-1,v=-1,b=!1,y=function(t){var i=e.length>n+1&&e.charAt(n+1)===t;return i&&n++,i},w=function(t){var e=y(t),s="@"===t?14:"!"===t?20:"y"===t&&e?4:"o"===t?3:2,n="y"===t?s:1,o=RegExp("^\\d{"+n+","+s+"}"),a=i.substring(h).match(o);if(!a)throw"Missing number at position "+h;return h+=a[0].length,parseInt(a[0],10)},k=function(e,s,n){var o=-1,a=t.map(y(e)?n:s,function(t,e){return[[e,t]]}).sort(function(t,e){return-(t[1].length-e[1].length)});if(t.each(a,function(t,e){var s=e[1];return i.substr(h,s.length).toLowerCase()===s.toLowerCase()?(o=e[0],h+=s.length,!1):void 0}),-1!==o)return o+1;throw"Unknown name at position "+h},x=function(){if(i.charAt(h)!==e.charAt(n))throw"Unexpected literal at position "+h;h++};for(n=0;e.length>n;n++)if(b)"'"!==e.charAt(n)||y("'")?x():b=!1;else switch(e.charAt(n)){case"d":_=w("d");break;case"D":k("D",u,d);break;case"o":v=w("o");break;case"m":m=w("m");break;case"M":m=k("M",p,f);break;case"y":g=w("y");break;case"@":r=new Date(w("@")),g=r.getFullYear(),m=r.getMonth()+1,_=r.getDate();break;case"!":r=new Date((w("!")-this._ticksTo1970)/1e4),g=r.getFullYear(),m=r.getMonth()+1,_=r.getDate();break;case"'":y("'")?x():b=!0;break;default:x()}if(i.length>h&&(a=i.substr(h),!/^\s+/.test(a)))throw"Extra/unparsed characters found in date: "+a;if(-1===g?g=(new Date).getFullYear():100>g&&(g+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c>=g?0:-100)),v>-1)for(m=1,_=v;;){if(o=this._getDaysInMonth(g,m-1),o>=_)break;m++,_-=o}if(r=this._daylightSavingAdjust(new Date(g,m-1,_)),r.getFullYear()!==g||r.getMonth()+1!==m||r.getDate()!==_)throw"Invalid date";return r},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(t,e,i){if(!e)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,o=(i?i.dayNames:null)||this._defaults.dayNames,a=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,h=function(e){var i=t.length>s+1&&t.charAt(s+1)===e;return i&&s++,i},l=function(t,e,i){var s=""+e;if(h(t))for(;i>s.length;)s="0"+s;return s},c=function(t,e,i,s){return h(t)?s[e]:i[e]},u="",d=!1;if(e)for(s=0;t.length>s;s++)if(d)"'"!==t.charAt(s)||h("'")?u+=t.charAt(s):d=!1;else switch(t.charAt(s)){case"d":u+=l("d",e.getDate(),2);break;case"D":u+=c("D",e.getDay(),n,o);break;case"o":u+=l("o",Math.round((new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()-new Date(e.getFullYear(),0,0).getTime())/864e5),3);break;case"m":u+=l("m",e.getMonth()+1,2);break;case"M":u+=c("M",e.getMonth(),a,r);break;case"y":u+=h("y")?e.getFullYear():(10>e.getFullYear()%100?"0":"")+e.getFullYear()%100;break;case"@":u+=e.getTime();break;case"!":u+=1e4*e.getTime()+this._ticksTo1970;break;case"'":h("'")?u+="'":d=!0;break;default:u+=t.charAt(s)}return u},_possibleChars:function(t){var e,i="",s=!1,n=function(i){var s=t.length>e+1&&t.charAt(e+1)===i;return s&&e++,s};for(e=0;t.length>e;e++)if(s)"'"!==t.charAt(e)||n("'")?i+=t.charAt(e):s=!1;else switch(t.charAt(e)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=t.charAt(e)}return i},_get:function(t,e){return void 0!==t.settings[e]?t.settings[e]:this._defaults[e]},_setDateFromField:function(t,e){if(t.input.val()!==t.lastVal){var i=this._get(t,"dateFormat"),s=t.lastVal=t.input?t.input.val():null,n=this._getDefaultDate(t),o=n,a=this._getFormatConfig(t);try{o=this.parseDate(i,s,a)||n}catch(r){s=e?"":s}t.selectedDay=o.getDate(),t.drawMonth=t.selectedMonth=o.getMonth(),t.drawYear=t.selectedYear=o.getFullYear(),t.currentDay=s?o.getDate():0,t.currentMonth=s?o.getMonth():0,t.currentYear=s?o.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,"defaultDate"),new Date))},_determineDate:function(e,i,s){var n=function(t){var e=new Date;return e.setDate(e.getDate()+t),e},o=function(i){try{return t.datepicker.parseDate(t.datepicker._get(e,"dateFormat"),i,t.datepicker._getFormatConfig(e))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?t.datepicker._getDate(e):null)||new Date,o=n.getFullYear(),a=n.getMonth(),r=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":r+=parseInt(l[1],10);break;case"w":case"W":r+=7*parseInt(l[1],10);break;case"m":case"M":a+=parseInt(l[1],10),r=Math.min(r,t.datepicker._getDaysInMonth(o,a));break;case"y":case"Y":o+=parseInt(l[1],10),r=Math.min(r,t.datepicker._getDaysInMonth(o,a))}l=h.exec(i)}return new Date(o,a,r)},a=null==i||""===i?s:"string"==typeof i?o(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return a=a&&"Invalid Date"==""+a?s:a,a&&(a.setHours(0),a.setMinutes(0),a.setSeconds(0),a.setMilliseconds(0)),this._daylightSavingAdjust(a)},_daylightSavingAdjust:function(t){return t?(t.setHours(t.getHours()>12?t.getHours()+2:0),t):null},_setDate:function(t,e,i){var s=!e,n=t.selectedMonth,o=t.selectedYear,a=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=a.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=a.getMonth(),t.drawYear=t.selectedYear=t.currentYear=a.getFullYear(),n===t.selectedMonth&&o===t.selectedYear||i||this._notifyChange(t),this._adjustInstDate(t),t.input&&t.input.val(s?"":this._formatDate(t))},_getDate:function(t){var e=!t.currentYear||t.input&&""===t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return e},_attachHandlers:function(e){var i=this._get(e,"stepMonths"),s="#"+e.id.replace(/\\\\/g,"\\");e.dpDiv.find("[data-handler]").map(function(){var e={prev:function(){t.datepicker._adjustDate(s,-i,"M")},next:function(){t.datepicker._adjustDate(s,+i,"M")},hide:function(){t.datepicker._hideDatepicker()},today:function(){t.datepicker._gotoToday(s)},selectDay:function(){return t.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return t.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return t.datepicker._selectMonthYear(s,this,"Y"),!1}};t(this).on(this.getAttribute("data-event"),e[this.getAttribute("data-handler")])})},_generateHTML:function(t){var e,i,s,n,o,a,r,h,l,c,u,d,p,f,g,m,_,v,b,y,w,k,x,C,D,I,T,P,M,S,H,z,O,A,N,W,E,F,L,R=new Date,B=this._daylightSavingAdjust(new Date(R.getFullYear(),R.getMonth(),R.getDate())),Y=this._get(t,"isRTL"),j=this._get(t,"showButtonPanel"),q=this._get(t,"hideIfNoPrevNext"),K=this._get(t,"navigationAsDateFormat"),U=this._getNumberOfMonths(t),V=this._get(t,"showCurrentAtPos"),$=this._get(t,"stepMonths"),X=1!==U[0]||1!==U[1],G=this._daylightSavingAdjust(t.currentDay?new Date(t.currentYear,t.currentMonth,t.currentDay):new Date(9999,9,9)),Q=this._getMinMaxDate(t,"min"),J=this._getMinMaxDate(t,"max"),Z=t.drawMonth-V,te=t.drawYear;if(0>Z&&(Z+=12,te--),J)for(e=this._daylightSavingAdjust(new Date(J.getFullYear(),J.getMonth()-U[0]*U[1]+1,J.getDate())),e=Q&&Q>e?Q:e;this._daylightSavingAdjust(new Date(te,Z,1))>e;)Z--,0>Z&&(Z=11,te--);for(t.drawMonth=Z,t.drawYear=te,i=this._get(t,"prevText"),i=K?this.formatDate(i,this._daylightSavingAdjust(new Date(te,Z-$,1)),this._getFormatConfig(t)):i,s=this._canAdjustMonth(t,-1,te,Z)?""+i+"":q?"":""+i+"",n=this._get(t,"nextText"),n=K?this.formatDate(n,this._daylightSavingAdjust(new Date(te,Z+$,1)),this._getFormatConfig(t)):n,o=this._canAdjustMonth(t,1,te,Z)?""+n+"":q?"":""+n+"",a=this._get(t,"currentText"),r=this._get(t,"gotoCurrent")&&t.currentDay?G:B,a=K?this.formatDate(a,r,this._getFormatConfig(t)):a,h=t.inline?"":"",l=j?"
    "+(Y?h:"")+(this._isInRange(t,r)?"":"")+(Y?"":h)+"
    ":"",c=parseInt(this._get(t,"firstDay"),10),c=isNaN(c)?0:c,u=this._get(t,"showWeek"),d=this._get(t,"dayNames"),p=this._get(t,"dayNamesMin"),f=this._get(t,"monthNames"),g=this._get(t,"monthNamesShort"),m=this._get(t,"beforeShowDay"),_=this._get(t,"showOtherMonths"),v=this._get(t,"selectOtherMonths"),b=this._getDefaultDate(t),y="",k=0;U[0]>k;k++){for(x="",this.maxRows=4,C=0;U[1]>C;C++){if(D=this._daylightSavingAdjust(new Date(te,Z,t.selectedDay)),I=" ui-corner-all",T="",X){if(T+="
    "}for(T+="
    "+(/all|left/.test(I)&&0===k?Y?o:s:"")+(/all|right/.test(I)&&0===k?Y?s:o:"")+this._generateMonthYearHeader(t,Z,te,Q,J,k>0||C>0,f,g)+"
    "+"",P=u?"":"",w=0;7>w;w++)M=(w+c)%7,P+="";for(T+=P+"",S=this._getDaysInMonth(te,Z),te===t.selectedYear&&Z===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,S)),H=(this._getFirstDayOfMonth(te,Z)-c+7)%7,z=Math.ceil((H+S)/7),O=X?this.maxRows>z?this.maxRows:z:z,this.maxRows=O,A=this._daylightSavingAdjust(new Date(te,Z,1-H)),N=0;O>N;N++){for(T+="",W=u?"":"",w=0;7>w;w++)E=m?m.apply(t.input?t.input[0]:null,[A]):[!0,""],F=A.getMonth()!==Z,L=F&&!v||!E[0]||Q&&Q>A||J&&A>J,W+="",A.setDate(A.getDate()+1),A=this._daylightSavingAdjust(A);T+=W+""}Z++,Z>11&&(Z=0,te++),T+="
    "+this._get(t,"weekHeader")+"=5?" class='ui-datepicker-week-end'":"")+">"+""+p[M]+"
    "+this._get(t,"calculateWeek")(A)+""+(F&&!_?" ":L?""+A.getDate()+"":""+A.getDate()+"")+"
    "+(X?"
    "+(U[0]>0&&C===U[1]-1?"
    ":""):""),x+=T}y+=x}return y+=l,t._keyEvent=!1,y},_generateMonthYearHeader:function(t,e,i,s,n,o,a,r){var h,l,c,u,d,p,f,g,m=this._get(t,"changeMonth"),_=this._get(t,"changeYear"),v=this._get(t,"showMonthAfterYear"),b="
    ",y="";if(o||!m)y+=""+a[e]+"";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,y+=""}if(v||(b+=y+(!o&&m&&_?"":" ")),!t.yearshtml)if(t.yearshtml="",o||!_)b+=""+i+"";else{for(u=this._get(t,"yearRange").split(":"),d=(new Date).getFullYear(),p=function(t){var e=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?d+parseInt(t,10):parseInt(t,10);return isNaN(e)?d:e},f=p(u[0]),g=Math.max(f,p(u[1]||"")),f=s?Math.max(f,s.getFullYear()):f,g=n?Math.min(g,n.getFullYear()):g,t.yearshtml+="",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,"yearSuffix"),v&&(b+=(!o&&m&&_?"":" ")+y),b+="
    "},_adjustInstDate:function(t,e,i){var s=t.selectedYear+("Y"===i?e:0),n=t.selectedMonth+("M"===i?e:0),o=Math.min(t.selectedDay,this._getDaysInMonth(s,n))+("D"===i?e:0),a=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(s,n,o)));t.selectedDay=a.getDate(),t.drawMonth=t.selectedMonth=a.getMonth(),t.drawYear=t.selectedYear=a.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),s=this._getMinMaxDate(t,"max"),n=i&&i>e?i:e;return s&&n>s?s:n},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){var e=this._get(t,"numberOfMonths");return null==e?[1,1]:"number"==typeof e?[1,e]:e},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,s){var n=this._getNumberOfMonths(t),o=this._daylightSavingAdjust(new Date(i,s+(0>e?e:n[0]*n[1]),1));return 0>e&&o.setDate(this._getDaysInMonth(o.getFullYear(),o.getMonth())),this._isInRange(t,o)},_isInRange:function(t,e){var i,s,n=this._getMinMaxDate(t,"min"),o=this._getMinMaxDate(t,"max"),a=null,r=null,h=this._get(t,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),a=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(a+=s),i[1].match(/[+\-].*/)&&(r+=s)),(!n||e.getTime()>=n.getTime())&&(!o||e.getTime()<=o.getTime())&&(!a||e.getFullYear()>=a)&&(!r||r>=e.getFullYear())},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),{shortYearCutoff:e,dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,s){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);var n=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(s,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),n,this._getFormatConfig(t))}}),t.fn.datepicker=function(e){if(!this.length)return this;t.datepicker.initialized||(t(document).on("mousedown",t.datepicker._checkExternalClick),t.datepicker.initialized=!0),0===t("#"+t.datepicker._mainDivId).length&&t("body").append(t.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof e||"isDisabled"!==e&&"getDate"!==e&&"widget"!==e?"option"===e&&2===arguments.length&&"string"==typeof arguments[1]?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof e?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this].concat(i)):t.datepicker._attachDatepicker(this,e)}):t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i))},t.datepicker=new s,t.datepicker.initialized=!1,t.datepicker.uuid=(new Date).getTime(),t.datepicker.version="1.12.1",t.datepicker,t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var _=!1;t(document).on("mouseup",function(){_=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!_){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,n="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!n&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),_=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,_=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.ui.safeBlur=function(e){e&&"body"!==e.nodeName.toLowerCase()&&t(e).trigger("blur")},t.widget("ui.draggable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this._addClass("ui-draggable"),this._setHandleClassName(),this._mouseInit()},_setOption:function(t,e){this._super(t,e),"handle"===t&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(".ui-draggable-dragging")?(this.destroyOnClear=!0,void 0):(this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(e){var i=this.options;return this.helper||i.disabled||t(e.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(e),this.handle?(this._blurActiveElement(e),this._blockFrames(i.iframeFix===!0?"iframe":i.iframeFix),!0):!1)},_blockFrames:function(e){this.iframeBlocks=this.document.find(e).map(function(){var e=t(this);return t("
    ").css("position","absolute").appendTo(e.parent()).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(e){var i=t.ui.safeActiveElement(this.document[0]),s=t(e.target);s.closest(i).length||t.ui.safeBlur(i)},_mouseStart:function(e){var i=this.options;return this.helper=this._createHelper(e),this._addClass(this.helper,"ui-draggable-dragging"),this._cacheHelperProportions(),t.ui.ddmanager&&(t.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return"fixed"===t(this).css("position")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(e),this.originalPosition=this.position=this._generatePosition(e,!1),this.originalPageX=e.pageX,this.originalPageY=e.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",e)===!1?(this._clear(),!1):(this._cacheHelperProportions(),t.ui.ddmanager&&!i.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this._mouseDrag(e,!0),t.ui.ddmanager&&t.ui.ddmanager.dragStart(this,e),!0)},_refreshOffsets:function(t){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:t.pageX-this.offset.left,top:t.pageY-this.offset.top}},_mouseDrag:function(e,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(e,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",e,s)===!1)return this._mouseUp(new t.Event("mouseup",e)),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),!1},_mouseStop:function(e){var i=this,s=!1;return t.ui.ddmanager&&!this.options.dropBehaviour&&(s=t.ui.ddmanager.drop(this,e)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||t.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?t(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",e)!==!1&&i._clear()}):this._trigger("stop",e)!==!1&&this._clear(),!1},_mouseUp:function(e){return this._unblockFrames(),t.ui.ddmanager&&t.ui.ddmanager.dragStop(this,e),this.handleElement.is(e.target)&&this.element.trigger("focus"),t.ui.mouse.prototype._mouseUp.call(this,e)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp(new t.Event("mouseup",{target:this.element[0]})):this._clear(),this},_getHandle:function(e){return this.options.handle?!!t(e.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this._addClass(this.handleElement,"ui-draggable-handle")},_removeHandleClassName:function(){this._removeClass(this.handleElement,"ui-draggable-handle")},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper),n=s?t(i.helper.apply(this.element[0],[e])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return n.parents("body").length||n.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&n[0]===this.element[0]&&this._setPositionRelative(),n[0]===this.element[0]||/(fixed|absolute)/.test(n.css("position"))||n.css("position","absolute"),n},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_isRootNode:function(t){return/(html|body)/i.test(t.tagName)||t===this.document[0]},_getParentOffset:function(){var e=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var t=this.element.position(),e=this._isRootNode(this.scrollParent[0]);return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+(e?0:this.scrollParent.scrollTop()),left:t.left-(parseInt(this.helper.css("left"),10)||0)+(e?0:this.scrollParent.scrollLeft())} - },_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options,o=this.document[0];return this.relativeContainer=null,n.containment?"window"===n.containment?(this.containment=[t(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,t(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,t(window).scrollLeft()+t(window).width()-this.helperProportions.width-this.margins.left,t(window).scrollTop()+(t(window).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):"document"===n.containment?(this.containment=[0,0,t(o).width()-this.helperProportions.width-this.margins.left,(t(o).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):n.containment.constructor===Array?(this.containment=n.containment,void 0):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=t(n.containment),s=i[0],s&&(e=/(scroll|auto)/.test(i.css("overflow")),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(e?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(e?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i),void 0):(this.containment=null,void 0)},_convertPositionTo:function(t,e){e||(e=this.position);var i="absolute"===t?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:e.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:e.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(t,e){var i,s,n,o,a=this.options,r=this._isRootNode(this.scrollParent[0]),h=t.pageX,l=t.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),e&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,t.pageX-this.offset.click.lefti[2]&&(h=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),a.grid&&(n=a.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/a.grid[1])*a.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-a.grid[1]:n+a.grid[1]:n,o=a.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/a.grid[0])*a.grid[0]:this.originalPageX,h=i?o-this.offset.click.left>=i[0]||o-this.offset.click.left>i[2]?o:o-this.offset.click.left>=i[0]?o-a.grid[0]:o+a.grid[0]:o),"y"===a.axis&&(h=this.originalPageX),"x"===a.axis&&(l=this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}},_clear:function(){this._removeClass(this.helper,"ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_trigger:function(e,i,s){return s=s||this._uiHash(),t.ui.plugin.call(this,e,[i,s,this],!0),/^(drag|start|stop)/.test(e)&&(this.positionAbs=this._convertPositionTo("absolute"),s.offset=this.positionAbs),t.Widget.prototype._trigger.call(this,e,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),t.ui.plugin.add("draggable","connectToSortable",{start:function(e,i,s){var n=t.extend({},i,{item:s.element});s.sortables=[],t(s.options.connectToSortable).each(function(){var i=t(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger("activate",e,n))})},stop:function(e,i,s){var n=t.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,t.each(s.sortables,function(){var t=this;t.isOver?(t.isOver=0,s.cancelHelperRemoval=!0,t.cancelHelperRemoval=!1,t._storedCSS={position:t.placeholder.css("position"),top:t.placeholder.css("top"),left:t.placeholder.css("left")},t._mouseStop(e),t.options.helper=t.options._helper):(t.cancelHelperRemoval=!0,t._trigger("deactivate",e,n))})},drag:function(e,i,s){t.each(s.sortables,function(){var n=!1,o=this;o.positionAbs=s.positionAbs,o.helperProportions=s.helperProportions,o.offset.click=s.offset.click,o._intersectsWith(o.containerCache)&&(n=!0,t.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==o&&this._intersectsWith(this.containerCache)&&t.contains(o.element[0],this.element[0])&&(n=!1),n})),n?(o.isOver||(o.isOver=1,s._parent=i.helper.parent(),o.currentItem=i.helper.appendTo(o.element).data("ui-sortable-item",!0),o.options._helper=o.options.helper,o.options.helper=function(){return i.helper[0]},e.target=o.currentItem[0],o._mouseCapture(e,!0),o._mouseStart(e,!0,!0),o.offset.click.top=s.offset.click.top,o.offset.click.left=s.offset.click.left,o.offset.parent.left-=s.offset.parent.left-o.offset.parent.left,o.offset.parent.top-=s.offset.parent.top-o.offset.parent.top,s._trigger("toSortable",e),s.dropped=o.element,t.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,o.fromOutside=s),o.currentItem&&(o._mouseDrag(e),i.position=o.position)):o.isOver&&(o.isOver=0,o.cancelHelperRemoval=!0,o.options._revert=o.options.revert,o.options.revert=!1,o._trigger("out",e,o._uiHash(o)),o._mouseStop(e,!0),o.options.revert=o.options._revert,o.options.helper=o.options._helper,o.placeholder&&o.placeholder.remove(),i.helper.appendTo(s._parent),s._refreshOffsets(e),i.position=s._generatePosition(e,!0),s._trigger("fromSortable",e),s.dropped=!1,t.each(s.sortables,function(){this.refreshPositions()}))})}}),t.ui.plugin.add("draggable","cursor",{start:function(e,i,s){var n=t("body"),o=s.options;n.css("cursor")&&(o._cursor=n.css("cursor")),n.css("cursor",o.cursor)},stop:function(e,i,s){var n=s.options;n._cursor&&t("body").css("cursor",n._cursor)}}),t.ui.plugin.add("draggable","opacity",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css("opacity")&&(o._opacity=n.css("opacity")),n.css("opacity",o.opacity)},stop:function(e,i,s){var n=s.options;n._opacity&&t(i.helper).css("opacity",n._opacity)}}),t.ui.plugin.add("draggable","scroll",{start:function(t,e,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(e,i,s){var n=s.options,o=!1,a=s.scrollParentNotHidden[0],r=s.document[0];a!==r&&"HTML"!==a.tagName?(n.axis&&"x"===n.axis||(s.overflowOffset.top+a.offsetHeight-e.pageY=0;d--)h=s.snapElements[d].left-s.margins.left,l=h+s.snapElements[d].width,c=s.snapElements[d].top-s.margins.top,u=c+s.snapElements[d].height,h-g>_||m>l+g||c-g>b||v>u+g||!t.contains(s.snapElements[d].item.ownerDocument,s.snapElements[d].item)?(s.snapElements[d].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=!1):("inner"!==f.snapMode&&(n=g>=Math.abs(c-b),o=g>=Math.abs(u-v),a=g>=Math.abs(h-_),r=g>=Math.abs(l-m),n&&(i.position.top=s._convertPositionTo("relative",{top:c-s.helperProportions.height,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left)),p=n||o||a||r,"outer"!==f.snapMode&&(n=g>=Math.abs(c-v),o=g>=Math.abs(u-b),a=g>=Math.abs(h-m),r=g>=Math.abs(l-_),n&&(i.position.top=s._convertPositionTo("relative",{top:c,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u-s.helperProportions.height,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left)),!s.snapElements[d].snapping&&(n||o||a||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=n||o||a||r||p)}}),t.ui.plugin.add("draggable","stack",{start:function(e,i,s){var n,o=s.options,a=t.makeArray(t(o.stack)).sort(function(e,i){return(parseInt(t(e).css("zIndex"),10)||0)-(parseInt(t(i).css("zIndex"),10)||0)});a.length&&(n=parseInt(t(a[0]).css("zIndex"),10)||0,t(a).each(function(e){t(this).css("zIndex",n+e)}),this.css("zIndex",n+a.length))}}),t.ui.plugin.add("draggable","zIndex",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css("zIndex")&&(o._zIndex=n.css("zIndex")),n.css("zIndex",o.zIndex)},stop:function(e,i,s){var n=s.options;n._zIndex&&t(i.helper).css("zIndex",n._zIndex)}}),t.ui.draggable,t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
    ").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("
    "),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidtht.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
    "),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,g=s.maxWidth&&p>s.maxWidth,m=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),g&&(p-=l),m&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable,t.widget("ui.dialog",{version:"1.12.1",options:{appendTo:"body",autoOpen:!0,buttons:[],classes:{"ui-dialog":"ui-corner-all","ui-dialog-titlebar":"ui-corner-all"},closeOnEscape:!0,closeText:"Close",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(e){var i=t(this).css(e).offset().top;0>i&&t(this).css("top",e.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),null==this.options.title&&null!=this.originalTitle&&(this.options.title=this.originalTitle),this.options.disabled&&(this.options.disabled=!1),this._createWrapper(),this.element.show().removeAttr("title").appendTo(this.uiDialog),this._addClass("ui-dialog-content","ui-widget-content"),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&t.fn.draggable&&this._makeDraggable(),this.options.resizable&&t.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var e=this.options.appendTo;return e&&(e.jquery||e.nodeType)?t(e):this.document.find(e||"body").eq(0)},_destroy:function(){var t,e=this.originalPosition;this._untrackInstance(),this._destroyOverlay(),this.element.removeUniqueId().css(this.originalCss).detach(),this.uiDialog.remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),t=e.parent.children().eq(e.index),t.length&&t[0]!==this.element[0]?t.before(this.element):e.parent.append(this.element)},widget:function(){return this.uiDialog - },disable:t.noop,enable:t.noop,close:function(e){var i=this;this._isOpen&&this._trigger("beforeClose",e)!==!1&&(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),this.opener.filter(":focusable").trigger("focus").length||t.ui.safeBlur(t.ui.safeActiveElement(this.document[0])),this._hide(this.uiDialog,this.options.hide,function(){i._trigger("close",e)}))},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(e,i){var s=!1,n=this.uiDialog.siblings(".ui-front:visible").map(function(){return+t(this).css("z-index")}).get(),o=Math.max.apply(null,n);return o>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",o+1),s=!0),s&&!i&&this._trigger("focus",e),s},open:function(){var e=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),void 0):(this._isOpen=!0,this.opener=t(t.ui.safeActiveElement(this.document[0])),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){e._focusTabbable(),e._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"),void 0)},_focusTabbable:function(){var t=this._focusedElement;t||(t=this.element.find("[autofocus]")),t.length||(t=this.element.find(":tabbable")),t.length||(t=this.uiDialogButtonPane.find(":tabbable")),t.length||(t=this.uiDialogTitlebarClose.filter(":tabbable")),t.length||(t=this.uiDialog),t.eq(0).trigger("focus")},_keepFocus:function(e){function i(){var e=t.ui.safeActiveElement(this.document[0]),i=this.uiDialog[0]===e||t.contains(this.uiDialog[0],e);i||this._focusTabbable()}e.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=t("
    ").hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._addClass(this.uiDialog,"ui-dialog","ui-widget ui-widget-content ui-front"),this._on(this.uiDialog,{keydown:function(e){if(this.options.closeOnEscape&&!e.isDefaultPrevented()&&e.keyCode&&e.keyCode===t.ui.keyCode.ESCAPE)return e.preventDefault(),this.close(e),void 0;if(e.keyCode===t.ui.keyCode.TAB&&!e.isDefaultPrevented()){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");e.target!==n[0]&&e.target!==this.uiDialog[0]||e.shiftKey?e.target!==s[0]&&e.target!==this.uiDialog[0]||!e.shiftKey||(this._delay(function(){n.trigger("focus")}),e.preventDefault()):(this._delay(function(){s.trigger("focus")}),e.preventDefault())}},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var e;this.uiDialogTitlebar=t("
    "),this._addClass(this.uiDialogTitlebar,"ui-dialog-titlebar","ui-widget-header ui-helper-clearfix"),this._on(this.uiDialogTitlebar,{mousedown:function(e){t(e.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.trigger("focus")}}),this.uiDialogTitlebarClose=t("").button({label:t("").text(this.options.closeText).html(),icon:"ui-icon-closethick",showLabel:!1}).appendTo(this.uiDialogTitlebar),this._addClass(this.uiDialogTitlebarClose,"ui-dialog-titlebar-close"),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}}),e=t("").uniqueId().prependTo(this.uiDialogTitlebar),this._addClass(e,"ui-dialog-title"),this._title(e),this.uiDialogTitlebar.prependTo(this.uiDialog),this.uiDialog.attr({"aria-labelledby":e.attr("id")})},_title:function(t){this.options.title?t.text(this.options.title):t.html(" ")},_createButtonPane:function(){this.uiDialogButtonPane=t("
    "),this._addClass(this.uiDialogButtonPane,"ui-dialog-buttonpane","ui-widget-content ui-helper-clearfix"),this.uiButtonSet=t("
    ").appendTo(this.uiDialogButtonPane),this._addClass(this.uiButtonSet,"ui-dialog-buttonset"),this._createButtons()},_createButtons:function(){var e=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),t.isEmptyObject(i)||t.isArray(i)&&!i.length?(this._removeClass(this.uiDialog,"ui-dialog-buttons"),void 0):(t.each(i,function(i,s){var n,o;s=t.isFunction(s)?{click:s,text:i}:s,s=t.extend({type:"button"},s),n=s.click,o={icon:s.icon,iconPosition:s.iconPosition,showLabel:s.showLabel,icons:s.icons,text:s.text},delete s.click,delete s.icon,delete s.iconPosition,delete s.showLabel,delete s.icons,"boolean"==typeof s.text&&delete s.text,t("",s).button(o).appendTo(e.uiButtonSet).on("click",function(){n.apply(e.element[0],arguments)})}),this._addClass(this.uiDialog,"ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),void 0)},_makeDraggable:function(){function e(t){return{position:t.position,offset:t.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){i._addClass(t(this),"ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,e(n))},drag:function(t,s){i._trigger("drag",t,e(s))},stop:function(n,o){var a=o.offset.left-i.document.scrollLeft(),r=o.offset.top-i.document.scrollTop();s.position={my:"left top",at:"left"+(a>=0?"+":"")+a+" "+"top"+(r>=0?"+":"")+r,of:i.window},i._removeClass(t(this),"ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,e(o))}})},_makeResizable:function(){function e(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}var i=this,s=this.options,n=s.resizable,o=this.uiDialog.css("position"),a="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:a,start:function(s,n){i._addClass(t(this),"ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,e(n))},resize:function(t,s){i._trigger("resize",t,e(s))},stop:function(n,o){var a=i.uiDialog.offset(),r=a.left-i.document.scrollLeft(),h=a.top-i.document.scrollTop();s.height=i.uiDialog.height(),s.width=i.uiDialog.width(),s.position={my:"left top",at:"left"+(r>=0?"+":"")+r+" "+"top"+(h>=0?"+":"")+h,of:i.window},i._removeClass(t(this),"ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,e(o))}}).css("position",o)},_trackFocus:function(){this._on(this.widget(),{focusin:function(e){this._makeFocusTarget(),this._focusedElement=t(e.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var e=this._trackingInstances(),i=t.inArray(this,e);-1!==i&&e.splice(i,1)},_trackingInstances:function(){var t=this.document.data("ui-dialog-instances");return t||(t=[],this.document.data("ui-dialog-instances",t)),t},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(e){var i=this,s=!1,n={};t.each(e,function(t,e){i._setOption(t,e),t in i.sizeRelatedOptions&&(s=!0),t in i.resizableRelatedOptions&&(n[t]=e)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(e,i){var s,n,o=this.uiDialog;"disabled"!==e&&(this._super(e,i),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:t("").text(""+this.options.closeText).html()}),"draggable"===e&&(s=o.is(":data(ui-draggable)"),s&&!i&&o.draggable("destroy"),!s&&i&&this._makeDraggable()),"position"===e&&this._position(),"resizable"===e&&(n=o.is(":data(ui-resizable)"),n&&!i&&o.resizable("destroy"),n&&"string"==typeof i&&o.resizable("option","handles",i),n||i===!1||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var t,e,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),t=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),e=Math.max(0,s.minHeight-t),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-t):"none","auto"===s.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var e=t(this);return t("
    ").css({position:"absolute",width:e.outerWidth(),height:e.outerHeight()}).appendTo(e.parent()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(e){return t(e.target).closest(".ui-dialog").length?!0:!!t(e.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var e=!0;this._delay(function(){e=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(t){e||this._allowInteraction(t)||(t.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=t("
    ").appendTo(this._appendTo()),this._addClass(this.overlay,null,"ui-widget-overlay ui-front"),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var t=this.document.data("ui-dialog-overlays")-1;t?this.document.data("ui-dialog-overlays",t):(this._off(this.document,"focusin"),this.document.removeData("ui-dialog-overlays")),this.overlay.remove(),this.overlay=null}}}),t.uiBackCompat!==!1&&t.widget("ui.dialog",t.ui.dialog,{options:{dialogClass:""},_createWrapper:function(){this._super(),this.uiDialog.addClass(this.options.dialogClass)},_setOption:function(t,e){"dialogClass"===t&&this.uiDialog.removeClass(this.options.dialogClass).addClass(e),this._superApply(arguments)}}),t.ui.dialog,t.widget("ui.droppable",{version:"1.12.1",widgetEventPrefix:"drop",options:{accept:"*",addClasses:!0,greedy:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var e,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=t.isFunction(s)?s:function(t){return t.is(s)},this.proportions=function(){return arguments.length?(e=arguments[0],void 0):e?e:e={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this._addClass("ui-droppable")},_addToManager:function(e){t.ui.ddmanager.droppables[e]=t.ui.ddmanager.droppables[e]||[],t.ui.ddmanager.droppables[e].push(this)},_splice:function(t){for(var e=0;t.length>e;e++)t[e]===this&&t.splice(e,1)},_destroy:function(){var e=t.ui.ddmanager.droppables[this.options.scope];this._splice(e)},_setOption:function(e,i){if("accept"===e)this.accept=t.isFunction(i)?i:function(t){return t.is(i)};else if("scope"===e){var s=t.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(e,i)},_activate:function(e){var i=t.ui.ddmanager.current;this._addActiveClass(),i&&this._trigger("activate",e,this.ui(i))},_deactivate:function(e){var i=t.ui.ddmanager.current;this._removeActiveClass(),i&&this._trigger("deactivate",e,this.ui(i))},_over:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._addHoverClass(),this._trigger("over",e,this.ui(i)))},_out:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._removeHoverClass(),this._trigger("out",e,this.ui(i)))},_drop:function(e,i){var s=i||t.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var i=t(this).droppable("instance");return i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&v(s,t.extend(i,{offset:i.element.offset()}),i.options.tolerance,e)?(n=!0,!1):void 0}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this._removeActiveClass(),this._removeHoverClass(),this._trigger("drop",e,this.ui(s)),this.element):!1):!1},ui:function(t){return{draggable:t.currentItem||t.element,helper:t.helper,position:t.position,offset:t.positionAbs}},_addHoverClass:function(){this._addClass("ui-droppable-hover")},_removeHoverClass:function(){this._removeClass("ui-droppable-hover")},_addActiveClass:function(){this._addClass("ui-droppable-active")},_removeActiveClass:function(){this._removeClass("ui-droppable-active")}});var v=t.ui.intersect=function(){function t(t,e,i){return t>=e&&e+i>t}return function(e,i,s,n){if(!i.offset)return!1;var o=(e.positionAbs||e.position.absolute).left+e.margins.left,a=(e.positionAbs||e.position.absolute).top+e.margins.top,r=o+e.helperProportions.width,h=a+e.helperProportions.height,l=i.offset.left,c=i.offset.top,u=l+i.proportions().width,d=c+i.proportions().height;switch(s){case"fit":return o>=l&&u>=r&&a>=c&&d>=h;case"intersect":return o+e.helperProportions.width/2>l&&u>r-e.helperProportions.width/2&&a+e.helperProportions.height/2>c&&d>h-e.helperProportions.height/2;case"pointer":return t(n.pageY,c,i.proportions().height)&&t(n.pageX,l,i.proportions().width);case"touch":return(a>=c&&d>=a||h>=c&&d>=h||c>a&&h>d)&&(o>=l&&u>=o||r>=l&&u>=r||l>o&&r>u);default:return!1}}}();t.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(e,i){var s,n,o=t.ui.ddmanager.droppables[e.options.scope]||[],a=i?i.type:null,r=(e.currentItem||e.element).find(":data(ui-droppable)").addBack();t:for(s=0;o.length>s;s++)if(!(o[s].options.disabled||e&&!o[s].accept.call(o[s].element[0],e.currentItem||e.element))){for(n=0;r.length>n;n++)if(r[n]===o[s].element[0]){o[s].proportions().height=0;continue t}o[s].visible="none"!==o[s].element.css("display"),o[s].visible&&("mousedown"===a&&o[s]._activate.call(o[s],i),o[s].offset=o[s].element.offset(),o[s].proportions({width:o[s].element[0].offsetWidth,height:o[s].element[0].offsetHeight}))}},drop:function(e,i){var s=!1;return t.each((t.ui.ddmanager.droppables[e.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&v(e,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],e.currentItem||e.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(e,i){e.element.parentsUntil("body").on("scroll.droppable",function(){e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)})},drag:function(e,i){e.options.refreshPositions&&t.ui.ddmanager.prepareOffsets(e,i),t.each(t.ui.ddmanager.droppables[e.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,o,a=v(e,this,this.options.tolerance,i),r=!a&&this.isover?"isout":a&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,o=this.element.parents(":data(ui-droppable)").filter(function(){return t(this).droppable("instance").options.scope===n}),o.length&&(s=t(o[0]).droppable("instance"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(e,i){e.element.parentsUntil("body").off("scroll.droppable"),e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)}},t.uiBackCompat!==!1&&t.widget("ui.droppable",t.ui.droppable,{options:{hoverClass:!1,activeClass:!1},_addActiveClass:function(){this._super(),this.options.activeClass&&this.element.addClass(this.options.activeClass)},_removeActiveClass:function(){this._super(),this.options.activeClass&&this.element.removeClass(this.options.activeClass)},_addHoverClass:function(){this._super(),this.options.hoverClass&&this.element.addClass(this.options.hoverClass)},_removeHoverClass:function(){this._super(),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass)}}),t.ui.droppable,t.widget("ui.progressbar",{version:"1.12.1",options:{classes:{"ui-progressbar":"ui-corner-all","ui-progressbar-value":"ui-corner-left","ui-progressbar-complete":"ui-corner-right"},max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.attr({role:"progressbar","aria-valuemin":this.min}),this._addClass("ui-progressbar","ui-widget ui-widget-content"),this.valueDiv=t("
    ").appendTo(this.element),this._addClass(this.valueDiv,"ui-progressbar-value","ui-widget-header"),this._refreshValue()},_destroy:function(){this.element.removeAttr("role aria-valuemin aria-valuemax aria-valuenow"),this.valueDiv.remove()},value:function(t){return void 0===t?this.options.value:(this.options.value=this._constrainedValue(t),this._refreshValue(),void 0)},_constrainedValue:function(t){return void 0===t&&(t=this.options.value),this.indeterminate=t===!1,"number"!=typeof t&&(t=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&&(e=Math.max(this.min,e)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var e=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||e>this.min).width(i.toFixed(0)+"%"),this._toggleClass(this.valueDiv,"ui-progressbar-complete",null,e===this.options.max)._toggleClass("ui-progressbar-indeterminate",null,this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=t("
    ").appendTo(this.valueDiv),this._addClass(this.overlayDiv,"ui-progressbar-overlay"))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":e}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==e&&(this.oldValue=e,this._trigger("change")),e===this.options.max&&this._trigger("complete")}}),t.widget("ui.selectable",t.ui.mouse,{version:"1.12.1",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var e=this;this._addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){e.elementPos=t(e.element[0]).offset(),e.selectees=t(e.options.filter,e.element[0]),e._addClass(e.selectees,"ui-selectee"),e.selectees.each(function(){var i=t(this),s=i.offset(),n={left:s.left-e.elementPos.left,top:s.top-e.elementPos.top};t.data(this,"selectable-item",{element:this,$element:i,left:n.left,top:n.top,right:n.left+i.outerWidth(),bottom:n.top+i.outerHeight(),startselected:!1,selected:i.hasClass("ui-selected"),selecting:i.hasClass("ui-selecting"),unselecting:i.hasClass("ui-unselecting")})})},this.refresh(),this._mouseInit(),this.helper=t("
    "),this._addClass(this.helper,"ui-selectable-helper")},_destroy:function(){this.selectees.removeData("selectable-item"),this._mouseDestroy()},_mouseStart:function(e){var i=this,s=this.options;this.opos=[e.pageX,e.pageY],this.elementPos=t(this.element[0]).offset(),this.options.disabled||(this.selectees=t(s.filter,this.element[0]),this._trigger("start",e),t(s.appendTo).append(this.helper),this.helper.css({left:e.pageX,top:e.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=t.data(this,"selectable-item");s.startselected=!0,e.metaKey||e.ctrlKey||(i._removeClass(s.$element,"ui-selected"),s.selected=!1,i._addClass(s.$element,"ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",e,{unselecting:s.element}))}),t(e.target).parents().addBack().each(function(){var s,n=t.data(this,"selectable-item");return n?(s=!e.metaKey&&!e.ctrlKey||!n.$element.hasClass("ui-selected"),i._removeClass(n.$element,s?"ui-unselecting":"ui-selected")._addClass(n.$element,s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",e,{selecting:n.element}):i._trigger("unselecting",e,{unselecting:n.element}),!1):void 0}))},_mouseDrag:function(e){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,o=this.opos[0],a=this.opos[1],r=e.pageX,h=e.pageY;return o>r&&(i=r,r=o,o=i),a>h&&(i=h,h=a,a=i),this.helper.css({left:o,top:a,width:r-o,height:h-a}),this.selectees.each(function(){var i=t.data(this,"selectable-item"),l=!1,c={};i&&i.element!==s.element[0]&&(c.left=i.left+s.elementPos.left,c.right=i.right+s.elementPos.left,c.top=i.top+s.elementPos.top,c.bottom=i.bottom+s.elementPos.top,"touch"===n.tolerance?l=!(c.left>r||o>c.right||c.top>h||a>c.bottom):"fit"===n.tolerance&&(l=c.left>o&&r>c.right&&c.top>a&&h>c.bottom),l?(i.selected&&(s._removeClass(i.$element,"ui-selected"),i.selected=!1),i.unselecting&&(s._removeClass(i.$element,"ui-unselecting"),i.unselecting=!1),i.selecting||(s._addClass(i.$element,"ui-selecting"),i.selecting=!0,s._trigger("selecting",e,{selecting:i.element}))):(i.selecting&&((e.metaKey||e.ctrlKey)&&i.startselected?(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,s._addClass(i.$element,"ui-selected"),i.selected=!0):(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,i.startselected&&(s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",e,{unselecting:i.element}))),i.selected&&(e.metaKey||e.ctrlKey||i.startselected||(s._removeClass(i.$element,"ui-selected"),i.selected=!1,s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",e,{unselecting:i.element})))))}),!1}},_mouseStop:function(e){var i=this;return this.dragged=!1,t(".ui-unselecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",e,{unselected:s.element})}),t(".ui-selecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-selecting")._addClass(s.$element,"ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",e,{selected:s.element})}),this._trigger("stop",e),this.helper.remove(),!1}}),t.widget("ui.selectmenu",[t.ui.formResetMixin,{version:"1.12.1",defaultElement:"",widgetEventPrefix:"spin",options:{classes:{"ui-spinner":"ui-corner-all","ui-spinner-down":"ui-corner-br","ui-spinner-up":"ui-corner-tr"},culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var e=this._super(),i=this.element;return t.each(["min","max","step"],function(t,s){var n=i.attr(s);null!=n&&n.length&&(e[s]=n)}),e},_events:{keydown:function(t){this._start(t)&&this._keydown(t)&&t.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",t),void 0)},mousewheel:function(t,e){if(e){if(!this.spinning&&!this._start(t))return!1;this._spin((e>0?1:-1)*this.options.step,t),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(t)},100),t.preventDefault()}},"mousedown .ui-spinner-button":function(e){function i(){var e=this.element[0]===t.ui.safeActiveElement(this.document[0]);e||(this.element.trigger("focus"),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===t.ui.safeActiveElement(this.document[0])?this.previous:this.element.val(),e.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(e)!==!1&&this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(e){return t(e.currentTarget).hasClass("ui-state-active")?this._start(e)===!1?!1:(this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap("").parent().append("")},_draw:function(){this._enhance(),this._addClass(this.uiSpinner,"ui-spinner","ui-widget ui-widget-content"),this._addClass("ui-spinner-input"),this.element.attr("role","spinbutton"),this.buttons=this.uiSpinner.children("a").attr("tabIndex",-1).attr("aria-hidden",!0).button({classes:{"ui-button":""}}),this._removeClass(this.buttons,"ui-corner-all"),this._addClass(this.buttons.first(),"ui-spinner-button ui-spinner-up"),this._addClass(this.buttons.last(),"ui-spinner-button ui-spinner-down"),this.buttons.first().button({icon:this.options.icons.up,showLabel:!1}),this.buttons.last().button({icon:this.options.icons.down,showLabel:!1}),this.buttons.height()>Math.ceil(.5*this.uiSpinner.height())&&this.uiSpinner.height()>0&&this.uiSpinner.height(this.uiSpinner.height())},_keydown:function(e){var i=this.options,s=t.ui.keyCode;switch(e.keyCode){case s.UP:return this._repeat(null,1,e),!0;case s.DOWN:return this._repeat(null,-1,e),!0;case s.PAGE_UP:return this._repeat(null,i.page,e),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,e),!0}return!1},_start:function(t){return this.spinning||this._trigger("start",t)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(t,e,i){t=t||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,e,i)},t),this._spin(e*this.options.step,i)},_spin:function(t,e){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+t*this._increment(this.counter)),this.spinning&&this._trigger("spin",e,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(e){var i=this.options.incremental;return i?t.isFunction(i)?i(e):Math.floor(e*e*e/5e4-e*e/500+17*e/200+1):1},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_adjustValue:function(t){var e,i,s=this.options;return e=null!==s.min?s.min:0,i=t-e,i=Math.round(i/s.step)*s.step,t=e+i,t=parseFloat(t.toFixed(this._precision())),null!==s.max&&t>s.max?s.max:null!==s.min&&s.min>t?s.min:t},_stop:function(t){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",t))},_setOption:function(t,e){var i,s,n;return"culture"===t||"numberFormat"===t?(i=this._parse(this.element.val()),this.options[t]=e,this.element.val(this._format(i)),void 0):(("max"===t||"min"===t||"step"===t)&&"string"==typeof e&&(e=this._parse(e)),"icons"===t&&(s=this.buttons.first().find(".ui-icon"),this._removeClass(s,null,this.options.icons.up),this._addClass(s,null,e.up),n=this.buttons.last().find(".ui-icon"),this._removeClass(n,null,this.options.icons.down),this._addClass(n,null,e.down)),this._super(t,e),void 0)},_setOptionDisabled:function(t){this._super(t),this._toggleClass(this.uiSpinner,null,"ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable")},_setOptions:r(function(t){this._super(t)}),_parse:function(t){return"string"==typeof t&&""!==t&&(t=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(t,10,this.options.culture):+t),""===t||isNaN(t)?null:t},_format:function(t){return""===t?"":window.Globalize&&this.options.numberFormat?Globalize.format(t,this.options.numberFormat,this.options.culture):t},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var t=this.value();return null===t?!1:t===this._adjustValue(t)},_value:function(t,e){var i;""!==t&&(i=this._parse(t),null!==i&&(e||(i=this._adjustValue(i)),t=this._format(i))),this.element.val(t),this._refresh()},_destroy:function(){this.element.prop("disabled",!1).removeAttr("autocomplete role aria-valuemin aria-valuemax aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:r(function(t){this._stepUp(t)}),_stepUp:function(t){this._start()&&(this._spin((t||1)*this.options.step),this._stop())},stepDown:r(function(t){this._stepDown(t)}),_stepDown:function(t){this._start()&&(this._spin((t||1)*-this.options.step),this._stop())},pageUp:r(function(t){this._stepUp((t||1)*this.options.page)}),pageDown:r(function(t){this._stepDown((t||1)*this.options.page)}),value:function(t){return arguments.length?(r(this._value).call(this,t),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}}),t.uiBackCompat!==!1&&t.widget("ui.spinner",t.ui.spinner,{_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml())},_uiSpinnerHtml:function(){return""},_buttonHtml:function(){return""}}),t.ui.spinner,t.widget("ui.tabs",{version:"1.12.1",delay:300,options:{active:null,classes:{"ui-tabs":"ui-corner-all","ui-tabs-nav":"ui-corner-all","ui-tabs-panel":"ui-corner-bottom","ui-tabs-tab":"ui-corner-top"},collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var t=/#.*$/;return function(e){var i,s;i=e.href.replace(t,""),s=location.href.replace(t,"");try{i=decodeURIComponent(i)}catch(n){}try{s=decodeURIComponent(s)}catch(n){}return e.hash.length>1&&i===s}}(),_create:function(){var e=this,i=this.options;this.running=!1,this._addClass("ui-tabs","ui-widget ui-widget-content"),this._toggleClass("ui-tabs-collapsible",null,i.collapsible),this._processTabs(),i.active=this._initialActive(),t.isArray(i.disabled)&&(i.disabled=t.unique(i.disabled.concat(t.map(this.tabs.filter(".ui-state-disabled"),function(t){return e.tabs.index(t)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):t(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var e=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===e&&(s&&this.tabs.each(function(i,n){return t(n).attr("aria-controls")===s?(e=i,!1):void 0}),null===e&&(e=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===e||-1===e)&&(e=this.tabs.length?0:!1)),e!==!1&&(e=this.tabs.index(this.tabs.eq(e)),-1===e&&(e=i?!1:0)),!i&&e===!1&&this.anchors.length&&(e=0),e},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):t()}},_tabKeydown:function(e){var i=t(t.ui.safeActiveElement(this.document[0])).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(e)){switch(e.keyCode){case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:s++;break;case t.ui.keyCode.UP:case t.ui.keyCode.LEFT:n=!1,s--;break;case t.ui.keyCode.END:s=this.anchors.length-1;break;case t.ui.keyCode.HOME:s=0;break;case t.ui.keyCode.SPACE:return e.preventDefault(),clearTimeout(this.activating),this._activate(s),void 0;case t.ui.keyCode.ENTER:return e.preventDefault(),clearTimeout(this.activating),this._activate(s===this.options.active?!1:s),void 0;default:return}e.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),e.ctrlKey||e.metaKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",s)},this.delay))}},_panelKeydown:function(e){this._handlePageNav(e)||e.ctrlKey&&e.keyCode===t.ui.keyCode.UP&&(e.preventDefault(),this.active.trigger("focus"))},_handlePageNav:function(e){return e.altKey&&e.keyCode===t.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):e.altKey&&e.keyCode===t.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(e,i){function s(){return e>n&&(e=0),0>e&&(e=n),e}for(var n=this.tabs.length-1;-1!==t.inArray(s(),this.options.disabled);)e=i?e+1:e-1;return e},_focusNextTab:function(t,e){return t=this._findNextTab(t,e),this.tabs.eq(t).trigger("focus"),t},_setOption:function(t,e){return"active"===t?(this._activate(e),void 0):(this._super(t,e),"collapsible"===t&&(this._toggleClass("ui-tabs-collapsible",null,e),e||this.options.active!==!1||this._activate(0)),"event"===t&&this._setupEvents(e),"heightStyle"===t&&this._setupHeightStyle(e),void 0)},_sanitizeSelector:function(t){return t?t.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var e=this.options,i=this.tablist.children(":has(a[href])");e.disabled=t.map(i.filter(".ui-state-disabled"),function(t){return i.index(t)}),this._processTabs(),e.active!==!1&&this.anchors.length?this.active.length&&!t.contains(this.tablist[0],this.active[0])?this.tabs.length===e.disabled.length?(e.active=!1,this.active=t()):this._activate(this._findNextTab(Math.max(0,e.active-1),!1)):e.active=this.tabs.index(this.active):(e.active=!1,this.active=t()),this._refresh()},_refresh:function(){this._setOptionDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._addClass(this.active,"ui-tabs-active","ui-state-active"),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var e=this,i=this.tabs,s=this.anchors,n=this.panels;this.tablist=this._getList().attr("role","tablist"),this._addClass(this.tablist,"ui-tabs-nav","ui-helper-reset ui-helper-clearfix ui-widget-header"),this.tablist.on("mousedown"+this.eventNamespace,"> li",function(e){t(this).is(".ui-state-disabled")&&e.preventDefault()}).on("focus"+this.eventNamespace,".ui-tabs-anchor",function(){t(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").attr({role:"tab",tabIndex:-1}),this._addClass(this.tabs,"ui-tabs-tab","ui-state-default"),this.anchors=this.tabs.map(function(){return t("a",this)[0]}).attr({role:"presentation",tabIndex:-1}),this._addClass(this.anchors,"ui-tabs-anchor"),this.panels=t(),this.anchors.each(function(i,s){var n,o,a,r=t(s).uniqueId().attr("id"),h=t(s).closest("li"),l=h.attr("aria-controls");e._isLocal(s)?(n=s.hash,a=n.substring(1),o=e.element.find(e._sanitizeSelector(n))):(a=h.attr("aria-controls")||t({}).uniqueId()[0].id,n="#"+a,o=e.element.find(n),o.length||(o=e._createPanel(a),o.insertAfter(e.panels[i-1]||e.tablist)),o.attr("aria-live","polite")),o.length&&(e.panels=e.panels.add(o)),l&&h.data("ui-tabs-aria-controls",l),h.attr({"aria-controls":a,"aria-labelledby":r}),o.attr("aria-labelledby",r)}),this.panels.attr("role","tabpanel"),this._addClass(this.panels,"ui-tabs-panel","ui-widget-content"),i&&(this._off(i.not(this.tabs)),this._off(s.not(this.anchors)),this._off(n.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol, ul").eq(0)},_createPanel:function(e){return t("
    ").attr("id",e).data("ui-tabs-destroy",!0)},_setOptionDisabled:function(e){var i,s,n;for(t.isArray(e)&&(e.length?e.length===this.anchors.length&&(e=!0):e=!1),n=0;s=this.tabs[n];n++)i=t(s),e===!0||-1!==t.inArray(n,e)?(i.attr("aria-disabled","true"),this._addClass(i,null,"ui-state-disabled")):(i.removeAttr("aria-disabled"),this._removeClass(i,null,"ui-state-disabled"));this.options.disabled=e,this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,e===!0)},_setupEvents:function(e){var i={};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(t){t.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(e){var i,s=this.element.parent();"fill"===e?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=t(this).outerHeight(!0)}),this.panels.each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.panels.each(function(){i=Math.max(i,t(this).height("").height())}).height(i))},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),o=n.closest("li"),a=o[0]===s[0],r=a&&i.collapsible,h=r?t():this._getPanelForTab(o),l=s.length?this._getPanelForTab(s):t(),c={oldTab:s,oldPanel:l,newTab:r?t():o,newPanel:h};e.preventDefault(),o.hasClass("ui-state-disabled")||o.hasClass("ui-tabs-loading")||this.running||a&&!i.collapsible||this._trigger("beforeActivate",e,c)===!1||(i.active=r?!1:this.tabs.index(o),this.active=a?t():o,this.xhr&&this.xhr.abort(),l.length||h.length||t.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(o),e),this._toggle(e,c))},_toggle:function(e,i){function s(){o.running=!1,o._trigger("activate",e,i)}function n(){o._addClass(i.newTab.closest("li"),"ui-tabs-active","ui-state-active"),a.length&&o.options.show?o._show(a,o.options.show,s):(a.show(),s())}var o=this,a=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){o._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),n()}):(this._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),r.hide(),n()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),a.length&&r.length?i.oldTab.attr("tabIndex",-1):a.length&&this.tabs.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),a.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(e){var i,s=this._findActive(e);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return e===!1?t():this.tabs.eq(e)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+t.ui.escapeSelector(e)+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.tablist.removeAttr("role").off(this.eventNamespace),this.anchors.removeAttr("role tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){t.data(this,"ui-tabs-destroy")?t(this).remove():t(this).removeAttr("role tabIndex aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded")}),this.tabs.each(function(){var e=t(this),i=e.data("ui-tabs-aria-controls");i?e.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):e.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(e){var i=this.options.disabled;i!==!1&&(void 0===e?i=!1:(e=this._getIndex(e),i=t.isArray(i)?t.map(i,function(t){return t!==e?t:null}):t.map(this.tabs,function(t,i){return i!==e?i:null})),this._setOptionDisabled(i))},disable:function(e){var i=this.options.disabled;if(i!==!0){if(void 0===e)i=!0;else{if(e=this._getIndex(e),-1!==t.inArray(e,i))return;i=t.isArray(i)?t.merge([e],i).sort():[e]}this._setOptionDisabled(i)}},load:function(e,i){e=this._getIndex(e);var s=this,n=this.tabs.eq(e),o=n.find(".ui-tabs-anchor"),a=this._getPanelForTab(n),r={tab:n,panel:a},h=function(t,e){"abort"===e&&s.panels.stop(!1,!0),s._removeClass(n,"ui-tabs-loading"),a.removeAttr("aria-busy"),t===s.xhr&&delete s.xhr};this._isLocal(o[0])||(this.xhr=t.ajax(this._ajaxSettings(o,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(this._addClass(n,"ui-tabs-loading"),a.attr("aria-busy","true"),this.xhr.done(function(t,e,n){setTimeout(function(){a.html(t),s._trigger("load",i,r),h(n,e)},1)}).fail(function(t,e){setTimeout(function(){h(t,e)},1)})))},_ajaxSettings:function(e,i,s){var n=this;return{url:e.attr("href").replace(/#.*$/,""),beforeSend:function(e,o){return n._trigger("beforeLoad",i,t.extend({jqXHR:e,ajaxSettings:o},s))}}},_getPanelForTab:function(e){var i=t(e).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}}),t.uiBackCompat!==!1&&t.widget("ui.tabs",t.ui.tabs,{_processTabs:function(){this._superApply(arguments),this._addClass(this.tabs,"ui-tab")}}),t.ui.tabs,t.widget("ui.tooltip",{version:"1.12.1",options:{classes:{"ui-tooltip":"ui-corner-all ui-widget-shadow"},content:function(){var e=t(this).attr("title")||"";return t("").text(e).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,track:!1,close:null,open:null},_addDescribedBy:function(e,i){var s=(e.attr("aria-describedby")||"").split(/\s+/);s.push(i),e.data("ui-tooltip-id",i).attr("aria-describedby",t.trim(s.join(" ")))},_removeDescribedBy:function(e){var i=e.data("ui-tooltip-id"),s=(e.attr("aria-describedby")||"").split(/\s+/),n=t.inArray(i,s);-1!==n&&s.splice(n,1),e.removeData("ui-tooltip-id"),s=t.trim(s.join(" ")),s?e.attr("aria-describedby",s):e.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.liveRegion=t("
    ").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this.disabledTitles=t([])},_setOption:function(e,i){var s=this;this._super(e,i),"content"===e&&t.each(this.tooltips,function(t,e){s._updateContent(e.element)})},_setOptionDisabled:function(t){this[t?"_disable":"_enable"]()},_disable:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s.element[0],e.close(n,!0)}),this.disabledTitles=this.disabledTitles.add(this.element.find(this.options.items).addBack().filter(function(){var e=t(this);return e.is("[title]")?e.data("ui-tooltip-title",e.attr("title")).removeAttr("title"):void 0}))},_enable:function(){this.disabledTitles.each(function(){var e=t(this);e.data("ui-tooltip-title")&&e.attr("title",e.data("ui-tooltip-title"))}),this.disabledTitles=t([])},open:function(e){var i=this,s=t(e?e.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),e&&"mouseover"===e.type&&s.parents().each(function(){var e,s=t(this);s.data("ui-tooltip-open")&&(e=t.Event("blur"),e.target=e.currentTarget=this,i.close(e,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._registerCloseHandlers(e,s),this._updateContent(s,e))},_updateContent:function(t,e){var i,s=this.options.content,n=this,o=e?e.type:null;return"string"==typeof s||s.nodeType||s.jquery?this._open(e,t,s):(i=s.call(t[0],function(i){n._delay(function(){t.data("ui-tooltip-open")&&(e&&(e.type=o),this._open(e,t,i))})}),i&&this._open(e,t,i),void 0)},_open:function(e,i,s){function n(t){l.of=t,a.is(":hidden")||a.position(l)}var o,a,r,h,l=t.extend({},this.options.position);if(s){if(o=this._find(i))return o.tooltip.find(".ui-tooltip-content").html(s),void 0;i.is("[title]")&&(e&&"mouseover"===e.type?i.attr("title",""):i.removeAttr("title")),o=this._tooltip(i),a=o.tooltip,this._addDescribedBy(i,a.attr("id")),a.find(".ui-tooltip-content").html(s),this.liveRegion.children().hide(),h=t("
    ").html(a.find(".ui-tooltip-content").html()),h.removeAttr("name").find("[name]").removeAttr("name"),h.removeAttr("id").find("[id]").removeAttr("id"),h.appendTo(this.liveRegion),this.options.track&&e&&/^mouse/.test(e.type)?(this._on(this.document,{mousemove:n}),n(e)):a.position(t.extend({of:i},this.options.position)),a.hide(),this._show(a,this.options.show),this.options.track&&this.options.show&&this.options.show.delay&&(r=this.delayedShow=setInterval(function(){a.is(":visible")&&(n(l.of),clearInterval(r))},t.fx.interval)),this._trigger("open",e,{tooltip:a})}},_registerCloseHandlers:function(e,i){var s={keyup:function(e){if(e.keyCode===t.ui.keyCode.ESCAPE){var s=t.Event(e);s.currentTarget=i[0],this.close(s,!0)}}};i[0]!==this.element[0]&&(s.remove=function(){this._removeTooltip(this._find(i).tooltip)}),e&&"mouseover"!==e.type||(s.mouseleave="close"),e&&"focusin"!==e.type||(s.focusout="close"),this._on(!0,i,s)},close:function(e){var i,s=this,n=t(e?e.currentTarget:this.element),o=this._find(n);return o?(i=o.tooltip,o.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&!n.attr("title")&&n.attr("title",n.data("ui-tooltip-title")),this._removeDescribedBy(n),o.hiding=!0,i.stop(!0),this._hide(i,this.options.hide,function(){s._removeTooltip(t(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),e&&"mouseleave"===e.type&&t.each(this.parents,function(e,i){t(i.element).attr("title",i.title),delete s.parents[e]}),o.closing=!0,this._trigger("close",e,{tooltip:i}),o.hiding||(o.closing=!1)),void 0):(n.removeData("ui-tooltip-open"),void 0)},_tooltip:function(e){var i=t("
    ").attr("role","tooltip"),s=t("
    ").appendTo(i),n=i.uniqueId().attr("id");return this._addClass(s,"ui-tooltip-content"),this._addClass(i,"ui-tooltip","ui-widget ui-widget-content"),i.appendTo(this._appendTo(e)),this.tooltips[n]={element:e,tooltip:i}},_find:function(t){var e=t.data("ui-tooltip-id");return e?this.tooltips[e]:null},_removeTooltip:function(t){t.remove(),delete this.tooltips[t.attr("id")]},_appendTo:function(t){var e=t.closest(".ui-front, dialog");return e.length||(e=this.document[0].body),e},_destroy:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur"),o=s.element;n.target=n.currentTarget=o[0],e.close(n,!0),t("#"+i).remove(),o.data("ui-tooltip-title")&&(o.attr("title")||o.attr("title",o.data("ui-tooltip-title")),o.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}}),t.uiBackCompat!==!1&&t.widget("ui.tooltip",t.ui.tooltip,{options:{tooltipClass:null},_tooltip:function(){var t=this._superApply(arguments);return this.options.tooltipClass&&t.tooltip.addClass(this.options.tooltipClass),t}}),t.ui.tooltip}); -/* -jQuery Tags - */ -!function(t){"use strict";var e={tagClass:function(t){return"label label-info"},itemValue:function(t){return t?t.toString():t},itemText:function(t){return this.itemValue(t)},itemTitle:function(t){return null},freeInput:!0,addOnBlur:!0,maxTags:void 0,maxChars:void 0,confirmKeys:[13,44],delimiter:",",delimiterRegex:null,cancelConfirmKeysOnEmpty:!0,onTagExists:function(t,e){e.hide().fadeIn()},trimValue:!1,allowDuplicates:!1};function i(e,i){this.itemsArray=[],this.$element=t(e),this.$element.hide(),this.isSelect="SELECT"===e.tagName,this.multiple=this.isSelect&&e.hasAttribute("multiple"),this.objectItems=i&&i.itemValue,this.placeholderText=e.hasAttribute("placeholder")?this.$element.attr("placeholder"):"",this.inputSize=Math.max(1,this.placeholderText.length),this.$container=t('
    '),this.$input=t('').appendTo(this.$container),this.$element.before(this.$container),this.build(i)}function n(t,e){if("function"!=typeof t[e]){var i=t[e];t[e]=function(t){return t[i]}}}function a(t,e){if("function"!=typeof t[e]){var i=t[e];t[e]=function(){return i}}}i.prototype={constructor:i,add:function(e,i,n){var a=this;if(!(a.options.maxTags&&a.itemsArray.length>=a.options.maxTags)&&(!1===e||e)){if("string"==typeof e&&a.options.trimValue&&(e=t.trim(e)),"object"==typeof e&&!a.objectItems)throw"Can't add objects when itemValue option is not set";if(!e.toString().match(/^\s*$/)){if(a.isSelect&&!a.multiple&&a.itemsArray.length>0&&a.remove(a.itemsArray[0]),"string"==typeof e&&"INPUT"===this.$element[0].tagName){var o=a.options.delimiterRegex?a.options.delimiterRegex:a.options.delimiter,s=e.split(o);if(s.length>1){for(var l=0;la.options.maxInputLength)){var f=t.Event("beforeItemAdd",{item:e,cancel:!1,options:n});if(a.$element.trigger(f),!f.cancel){a.itemsArray.push(e);var d=t(''+r(p)+'');if(d.data("item",e),a.findInputWrapper().before(d),d.after(" "),a.isSelect&&!t('option[value="'+encodeURIComponent(u)+'"]',a.$element)[0]){var g=t("");g.data("item",e),g.attr("value",u),a.$element.append(g)}i||a.pushVal(),a.options.maxTags!==a.itemsArray.length&&a.items().toString().length!==a.options.maxInputLength||a.$container.addClass("bootstrap-tagsinput-max"),a.$element.trigger(t.Event("itemAdded",{item:e,options:n}))}}}else if(a.options.onTagExists){var v=t(".tag",a.$container).filter(function(){return t(this).data("item")===m});a.options.onTagExists(e,v)}}}},remove:function(e,i,n){var a=this;if(a.objectItems&&(e=(e="object"==typeof e?t.grep(a.itemsArray,function(t){return a.options.itemValue(t)==a.options.itemValue(e)}):t.grep(a.itemsArray,function(t){return a.options.itemValue(t)==e}))[e.length-1]),e){var o=t.Event("beforeItemRemove",{item:e,cancel:!1,options:n});if(a.$element.trigger(o),o.cancel)return;t(".tag",a.$container).filter(function(){return t(this).data("item")===e}).remove(),t("option",a.$element).filter(function(){return t(this).data("item")===e}).remove(),-1!==t.inArray(e,a.itemsArray)&&a.itemsArray.splice(t.inArray(e,a.itemsArray),1)}i||a.pushVal(),a.options.maxTags>a.itemsArray.length&&a.$container.removeClass("bootstrap-tagsinput-max"),a.$element.trigger(t.Event("itemRemoved",{item:e,options:n}))},removeAll:function(){for(t(".tag",this.$container).remove(),t("option",this.$element).remove();this.itemsArray.length>0;)this.itemsArray.pop();this.pushVal()},refresh:function(){var e=this;t(".tag",e.$container).each(function(){var i=t(this),n=i.data("item"),a=e.options.itemValue(n),o=e.options.itemText(n),s=e.options.tagClass(n);(i.attr("class",null),i.addClass("tag "+r(s)),i.contents().filter(function(){return 3==this.nodeType})[0].nodeValue=r(o),e.isSelect)&&t("option",e.$element).filter(function(){return t(this).data("item")===n}).attr("value",a)})},items:function(){return this.itemsArray},pushVal:function(){var e=this,i=t.map(e.items(),function(t){return e.options.itemValue(t).toString()});e.$element.val(i,!0).trigger("change")},build:function(i){var o=this;if(o.options=t.extend({},e,i),o.objectItems&&(o.options.freeInput=!1),n(o.options,"itemValue"),n(o.options,"itemText"),a(o.options,"tagClass"),o.options.typeahead){var r=o.options.typeahead||{};a(r,"source"),o.$input.typeahead(t.extend({},r,{source:function(e,i){function n(t){for(var e=[],n=0;n$1")}}))}if(o.options.typeaheadjs){var l=null,u={},p=o.options.typeaheadjs;t.isArray(p)?(l=p[0],u=p[1]):u=p,o.$input.typeahead(l,u).on("typeahead:selected",t.proxy(function(t,e){u.valueKey?o.add(e[u.valueKey]):o.add(e),o.$input.typeahead("val","")},o))}o.$container.on("click",t.proxy(function(t){o.$element.attr("disabled")||o.$input.removeAttr("disabled"),o.$input.focus()},o)),o.options.addOnBlur&&o.options.freeInput&&o.$input.on("focusout",t.proxy(function(e){0===t(".typeahead, .twitter-typeahead",o.$container).length&&(o.add(o.$input.val()),o.$input.val(""))},o)),o.$container.on("keydown","input",t.proxy(function(e){var i=t(e.target),n=o.findInputWrapper();if(o.$element.attr("disabled"))o.$input.attr("disabled","disabled");else{switch(e.which){case 8:if(0===s(i[0])){var a=n.prev();a.length&&o.remove(a.data("item"))}break;case 46:if(0===s(i[0])){var r=n.next();r.length&&o.remove(r.data("item"))}break;case 37:var l=n.prev();0===i.val().length&&l[0]&&(l.before(n),i.focus());break;case 39:var u=n.next();0===i.val().length&&u[0]&&(u.after(n),i.focus())}var p=i.val().length;Math.ceil(p/5);i.attr("size",Math.max(this.inputSize,i.val().length))}},o)),o.$container.on("keypress","input",t.proxy(function(e){var i=t(e.target);if(o.$element.attr("disabled"))o.$input.attr("disabled","disabled");else{var n,a,r,s=i.val(),l=o.options.maxChars&&s.length>=o.options.maxChars;o.options.freeInput&&(n=e,a=o.options.confirmKeys,r=!1,t.each(a,function(t,e){if("number"==typeof e&&n.which===e)return r=!0,!1;if(n.which===e.which){var i=!e.hasOwnProperty("altKey")||n.altKey===e.altKey,a=!e.hasOwnProperty("shiftKey")||n.shiftKey===e.shiftKey,o=!e.hasOwnProperty("ctrlKey")||n.ctrlKey===e.ctrlKey;if(i&&a&&o)return r=!0,!1}}),r||l)&&(0!==s.length&&(o.add(l?s.substr(0,o.options.maxChars):s),i.val("")),!1===o.options.cancelConfirmKeysOnEmpty&&e.preventDefault());var u=i.val().length;Math.ceil(u/5);i.attr("size",Math.max(this.inputSize,i.val().length))}},o)),o.$container.on("click","[data-role=remove]",t.proxy(function(e){o.$element.attr("disabled")||o.remove(t(e.target).closest(".tag").data("item"))},o)),o.options.itemValue===e.itemValue&&("INPUT"===o.$element[0].tagName?o.add(o.$element.val()):t("option",o.$element).each(function(){o.add(t(this).attr("value"),!0)}))},destroy:function(){this.$container.off("keypress","input"),this.$container.off("click","[role=remove]"),this.$container.remove(),this.$element.removeData("tagsinput"),this.$element.show()},focus:function(){this.$input.focus()},input:function(){return this.$input},findInputWrapper:function(){for(var e=this.$input[0],i=this.$container[0];e&&e.parentNode!==i;)e=e.parentNode;return t(e)}},t.fn.tagsinput=function(e,n,a){var o=[];return this.each(function(){var r=t(this).data("tagsinput");if(r)if(e||n){if(void 0!==r[e]){if(3===r[e].length&&void 0!==a)var s=r[e](n,null,a);else s=r[e](n);void 0!==s&&o.push(s)}}else o.push(r);else r=new i(this,e),t(this).data("tagsinput",r),o.push(r),"SELECT"===this.tagName&&t("option",t(this)).attr("selected","selected"),t(this).val(t(this).val())}),"string"==typeof e?o.length>1?o:o[0]:o},t.fn.tagsinput.Constructor=i;var o=t("
    ");function r(t){return t?o.text(t).html():""}function s(t){var e=0;if(document.selection){t.focus();var i=document.selection.createRange();i.moveStart("character",-t.value.length),e=i.text.length}else(t.selectionStart||"0"==t.selectionStart)&&(e=t.selectionStart);return e}t(function(){t("input[data-role=tagsinput], select[multiple][data-role=tagsinput]").tagsinput()})}(window.jQuery); - -/* -CUSTOM SCRIPTS/FUNCS - */ - -function YABSdebug(result){ - if (result == 1){ - return 'Success'; - } else if (result == 2){ - return 'Wrong version'; - } else if (result == 3){ - return 'Didnt start at right spot'; - } else if (result == 4){ - return 'Not correct format'; - } else if (result == 5){ - return 'Not a correct YABs command output'; - } else if (result == 6){ - return 'GeekBench 5 only allowed'; - } else if (result == 7){ - return 'GeekBench test failed'; - } else if (result == 8){ - return 'Didnt copy output correctly'; - } else if (result == 9){ - return 'Less than 50 lines'; - } else { - return 'Unknown '+result; - } -} - -$(document).ready(function () { - $("#yabsForm").submit(function (e) { - e.preventDefault(e); - $.ajax({ - type: "POST", - url: "calls.php", - data: $("#yabsForm").serialize(), - success: function (result) { - if (result.length == 1) { - alert('ERROR: ' + YABSdebug(result)); - } else { - location.reload(); - } - } - }); - }); - - $("#manualForm").submit(function (e) { - e.preventDefault(e); - $.ajax({ - type: "POST", - url: "calls.php", - data: $("#manualForm").serialize(), - success: function (result) { - location.reload(); - } - }); - }); - - $("#sharesHostingForm").submit(function (e) { - e.preventDefault(e); - $.ajax({ - type: "POST", - url: "calls.php", - data: $("#sharesHostingForm").serialize(), - success: function (result) { - location.reload(); - } - }); - }); - - $("#domainForm").submit(function (e) { - e.preventDefault(e); - $.ajax({ - type: "POST", - url: "calls.php", - data: $("#domainForm").serialize(), - success: function (result) { - location.reload(); - } - }); - }); - - $("#editSharedHostingForm").submit(function (e) { - e.preventDefault(); - console.log($('#editSharedHostingForm').serialize()); - $.ajax({ - type: "POST", - url: "calls.php", - data: $('#editSharedHostingForm').serialize(), - success: function () { - window.location.href = window.location.href; - } - }); - }); - - $("#editDomainForm").submit(function (e) { - e.preventDefault(); - console.log($('#editDomainForm').serialize()); - $.ajax({ - type: "POST", - url: "calls.php", - data: $('#editDomainForm').serialize(), - success: function () { - window.location.href = window.location.href; - } - }); - }); - - $("#editServerModal").submit(function (e) { - e.preventDefault(); - console.log($('#editServerModal').serialize()); - $.ajax({ - type: "POST", - url: "calls.php", - data: $('#editForm').serialize(), - success: function () { - window.location.href = window.location.href; - } - }); - }); - - $("#orderForm").submit(function (e) { - $("#orderTable").remove(); - e.preventDefault(); - console.log($('#orderForm').serialize()); - $.ajax({ - type: "POST", - url: "calls.php", - data: $('#orderForm').serialize(), - success: function (result) { - $("#orderDiv").append(result); - } - }); - }); - - $('#viewMoreModal').on('hidden.bs.modal', function () { - $("#viewMoreModalBody").empty(); - }) - - $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) { - var target = $(e.target).attr("href") // activated tab - if (target == '#info') { - if ($("#infoCard").length == 0) { - $.ajax({ - type: "GET", - url: "calls.php", - data: {"type": "infoCard"}, - success: function (result) { - $("#info").append(result); - } - }); - } - } - }); - - var the_date = new Date(); - the_date.setMonth(1); - var yyyy = new Intl.DateTimeFormat('en', { year: 'numeric' }).format(the_date); - var mm = new Intl.DateTimeFormat('en', { month: '2-digit' }).format(the_date); - var dd = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(the_date); - var one_month_on = `${yyyy}-${mm}-${dd}`; - $('.next-dd').val(one_month_on); - - - - if ($("#cardsViewDiv").hasClass("active")) { - loadCards(); - } else if ($("#tableViewDiv").hasClass("active")){ - loadTable(); - } - - //Compare section - $("#compare_s1").change(function () { - var server1_id = $("#compare_s1 option:selected").val(); - var server2_id = $("#compare_s2 option:selected").val(); - if (server2_id.length !== 0) { - compareTableCall(server1_id, server2_id); - } - }); - $("#compare_s2").change(function () { - var server2_id = $("#compare_s2 option:selected").val(); - var server1_id = $("#compare_s1 option:selected").val(); - if (server1_id.length !== 0) { - compareTableCall(server1_id, server2_id); - } - }); - -}); - -function compareTableCall(id1, id2) { - $("#compareTableDiv").empty(); - $.ajax({ - type: "GET", - url: "calls.php", - data: {"type": "compare_table", "server1": id1, "server2": id2}, - success: function (result) { - $("#compareTableDiv").append(result); - } - }); -} - -function loadCards(){ - $.ajax({ - type: "GET", - url: "calls.php", - data: {"type": "object_cards"}, - success: function (result) { - $("#cardsViewDiv").append(result); - } - }); -} - -function loadTable(){ - $.ajax({ - type: "GET", - url: "calls.php", - data: {"type": "object_tables"}, - success: function (result) { - $("#tableViewDiv").append(result); - } - }); -} - -$(function () { - $(".location-input").autocomplete({ - source: function (request, response) { - $.ajax({ - url: "calls.php", - data: {"type": "autocomplete", "input": "location", value: request.term}, - dataType: "json", - success: response, - }); - } - }); - - $(".provider-input").autocomplete({ - source: function (request, response) { - $.ajax({ - url: "calls.php", - data: {"type": "autocomplete", "input": "provider", value: request.term}, - dataType: "json", - success: response, - }); - } - }); -}); - -$(document).on("click", "#viewMoreServer", function () { - var serverId = this.getAttribute("value"); - $("#viewMoreModalBody").empty(); - $.ajax({ - type: "GET", - url: "calls.php", - data: {"type": "view_more_modal", "value": "server", "id": serverId}, - success: function (result) { - $("#viewMoreModalBody").append(result); - } - }); -}); - -$(document).on("click", "#viewMoreSharedHosting", function () { - var serverId = this.getAttribute("value"); - $("#viewMoreSharedHostingModalBody").empty(); - $.ajax({ - type: "GET", - url: "calls.php", - data: {"type": "view_more_modal", "value": "shared", "id": serverId}, - success: function (result) { - $("#viewMoreSharedHostingModalBody").append(result); - } - }); -}); - -$(document).on("click", "#viewMoreDomain", function () { - var serverId = this.getAttribute("value"); - $("#viewMoreDomainModalBody").empty(); - $.ajax({ - type: "GET", - url: "calls.php", - data: {"type": "view_more_modal", "value": "domain", "id": serverId}, - success: function (result) { - $("#viewMoreDomainModalBody").append(result); - } - }); -}); - -$(document).on("click", "#editServer", function () { - var serverId = this.getAttribute("value"); - modalServerEdit(serverId); -}); - -$(document).on("click", "#editSharedHosting", function () { - var serverId = this.getAttribute("value"); - modalEditSharedHosting(serverId); -}); - -$(document).on("click", "#editDomain", function () { - var serverId = this.getAttribute("value"); - modalEditDomain(serverId); -}); - -$(document).on("click", "#viewYabs", function () { - $('#viewMoreModal').modal('toggle'); - var hostname = $('#view_more_header').text(); - var serverId = this.getAttribute("value"); - yabsModalView(hostname, serverId); -}); - -$(document).on("click", "#addServerBTN", function () { - $("#addServer").addClass("show"); - $("#addServerNoYabs").removeClass("show"); - $("#addSharedHosting").removeClass("show"); - $("#addDomain").removeClass("show"); -}); - -$(document).on("click", "#addServerNoYabsBTN", function () { - $("#addServerNoYabs").addClass("show"); - $("#addServer").removeClass("show"); - $("#addSharedHosting").removeClass("show"); - $("#addDomain").removeClass("show"); -}); - -$(document).on("click", "#addSharedHostingBTN", function () { - $("#addSharedHosting").addClass("show"); - $("#addServer").removeClass("show"); - $("#addServerNoYabs").removeClass("show"); - $("#addDomain").removeClass("show"); -}); - -$(document).on("click", "#addDomainBTN", function () { - $("#addDomain").addClass("show"); - $("#addServer").removeClass("show"); - $("#addServerNoYabs").removeClass("show"); - $("#addSharedHosting").removeClass("show"); -}); - -$(document).on("click", "#fillIpv4", function () { - var host_name = $('#hostname').val(); - if (host_name) { - $.ajax({ - type: "GET", - url: "calls.php", - data: {"type" : "dns_search", "hostname": host_name, "dns_type": "A"}, - success: function (result) { - $('#ipv4').val(result); - } - }); - //Now wait 3 seconds before checking AAAA - setTimeout(function(){ - $.ajax({ - type: "GET", - url: "calls.php", - data: {"type" : "dns_search", "hostname": host_name, "dns_type": "AAAA"}, - success: function (result) { - if (result != ''){ - $('#ipv6').val(result); - } else { - $('#ipv6').val(''); - } - } - }); - }, 3000); - } -}); - -$(document).on("click", "#checkUpStatus", function () { - var host_name = $(this).attr('value'); - var icon = $(this).children().first(); - if (host_name) { - $.ajax({ - type: "GET", - url: "calls.php", - data: {"type": "check_up", "host": host_name}, - success: function (result) { - if (result == 1) { - icon.addClass("green-fa"); - } else { - icon.addClass("red-fa"); - } - } - }); - } -}); - -$(document).on("click", "#viewSwitcherIcon", function () { - var icon = $(this).children().first(); - if (icon.hasClass("fa-table")) { - if ($("#serversTable").children().length == 0) { - loadTable(); - } - icon.removeClass("fa-table"); - icon.addClass("fa-th"); - $("#tableViewDiv").addClass("active"); - $("#cardsViewDiv").removeClass("active"); - $("#cardsViewDiv").hide(); - $("#tableViewDiv").show(); - $('#viewSwitchIcon').prop('title', 'Switch to cards'); - - } else if (icon.hasClass("fa-th")) { - if ($("#cardsViewDiv").children().length == 0) { - loadCards(); - } - icon.removeClass("fa-th"); - icon.addClass("fa-table"); - $("#cardsViewDiv").addClass("active"); - $("#tableViewDiv").removeClass("active"); - $("#tableViewDiv").hide(); - $("#cardsViewDiv").show(); - $('#viewSwitchIcon').prop('title', 'Switch to table'); - } -}); - -$('#virt').change(function(){ - if($(this).val() == 'DEDI'){ - $('#dedi_cpu').prop("checked", true); - } -}); - -function modalServerEdit(id) { - $.ajax({ - type: "GET", - url: "calls.php", - data: {"type": "server", "id": id}, - success: function (result) { - $("#me_tags").tagsinput('removeAll'); - $("#me_server_id").val(result["server_id"]); - $("#me_hostname").val(result["hostname"]); - $("#me_label").val(result["label"]); - $("#me_hostname_header").text( result["hostname"]); - $("#me_ns1").val(result["ns1"]); - $("#me_ns2").val(result["ns2"]); - $("#me_ipv4").val(result["ipv4"]); - $("#me_ipv6").val(result["ipv6"]); - $("#me_price").val(result["price"]); - $("#me_bandwidth").val(result["bandwidth"]); - $("#me_cpu_amount").val(result["cpu"]); - $("#me_disk").val(result["disk"]); - $("#me_ram").val(result["ram"]); - $("#me_swap").val(result["swap"]); - if (result["tags"] !== null) { - $("#me_tags").tagsinput('add', result["tags"]); - } - if(result['still_have'] == 0){ - $('#me_non_active').prop("checked", true); - } - $('#me_owned_since').val(result["owned_since_raw"]); - $('#me_next_dd').val(result["next_dd"]); - $("#me_currency").val(result["currency"]); - $("#me_term").val(result["term"]); - $("#me_os").val(result["os"]); - $("#me_ram_type").val(result["ram_type"]); - $("#me_swap_type").val(result["swap_type"]); - $("#me_virt").val(result["virt"]); - $("#me_ssh_port").val(result["ssh_port"]); - $("#me_notes").val(result["notes"]); - } - }); -} - -function modalEditSharedHosting(id) { - $.ajax({ - type: "GET", - url: "calls.php", - data: {"type": "shared_hosting", "id": id}, - success: function (result) { - $("#sh_me_server_id").val(result["server_id"]); - $('#sh_me_hostname').val(result["domain"]); - $('#sh_me_hostname_header').text(result["domain"]); - $("#sh_me_price").val(result["price"]); - $("#sh_me_bandwidth").val(result["bandwidth"]); - $("#sh_me_storage").val(result["disk_as_gb"]); - $('#sh_me_owned_since').val(result["owned_since_raw"]); - $('#sh_me_next_dd').val(result["next_dd"]); - $("#sh_me_currency").val(result["currency"]); - $("#sh_me_term").val(result["term"]); - $("#sh_me_domains_count").val(result["domains_limit"]); - $("#sh_me_emails").val(result["emails"]); - $("#sh_me_ftp").val(result["ftp"]); - $("#sh_me_db").val(result["db"]); - } - }); -} - -function modalEditDomain(id) { - $.ajax({ - type: "GET", - url: "calls.php", - data: {"type": "domain", "id": id}, - success: function (result) { - $("#d_me_server_id").val(result["server_id"]); - $('#d_me_hostname').val(result["domain"]); - $('#d_me_hostname_header').text(result["domain"]); - $("#d_me_price").val(result["price"]); - $('#d_me_owned_since').val(result["owned_since_raw"]); - $('#d_me_next_dd').val(result["next_dd"]); - $("#d_me_currency").val(result["currency"]); - $("#d_me_term").val(result["term"]); - $("#d_me_ns1").val(result["ns1"]); - $("#d_me_ns2").val(result["ns2"]); - $("#d_me_attached_to").val(result["attached_to"]); - } - }); -} - -function yabsModalView(hostname, id) { - if ($('#yabsTextBox').length) - { - $('#yabsTextBox').remove(); - } - $.ajax({ - type: "GET", - url: "calls.php", - data: {"type": "yabsModal", "id": id}, - success: function (result) { - $("#yabsModalBody").append(result); - $("#yabs_hostname_header").text(hostname); - } - }); -} - -//https://stackoverflow.com/a/1909508 -function delay(fn, ms) { - let timer = 0 - return function(...args) { - clearTimeout(timer) - timer = setTimeout(fn.bind(this, ...args), ms || 0) - } -} - -$('#searchInput').keyup(delay(function (e) { - var search_term = this.value; - $('#searchDivBody').empty(); - $.ajax({ - type: "GET", - url: "calls.php", - data: {"type": "search", "value": search_term}, - success: function (result) { - $('#searchDivBody').append(result); - } - }); -}, 500)); \ No newline at end of file diff --git a/bootstrap/app.php b/bootstrap/app.php new file mode 100644 index 0000000..037e17d --- /dev/null +++ b/bootstrap/app.php @@ -0,0 +1,55 @@ +singleton( + Illuminate\Contracts\Http\Kernel::class, + App\Http\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Console\Kernel::class, + App\Console\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Debug\ExceptionHandler::class, + App\Exceptions\Handler::class +); + +/* +|-------------------------------------------------------------------------- +| Return The Application +|-------------------------------------------------------------------------- +| +| This script returns the application instance. The instance is given to +| the calling script so we can separate the building of the instances +| from the actual running of the application and sending responses. +| +*/ + +return $app; diff --git a/bootstrap/cache/.gitignore b/bootstrap/cache/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/bootstrap/cache/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/calls.php b/calls.php deleted file mode 100644 index e26aed4..0000000 --- a/calls.php +++ /dev/null @@ -1,100 +0,0 @@ -serverData($_GET['id']); - } elseif ($_GET['type'] == 'search') { - header('Content-Type: text/html; charset=utf-8'); - echo $idle->searchResults($_GET['value']); - } elseif ($_GET['type'] == 'shared_hosting') { - echo $idle->sharedHostingData($_GET['id']); - } elseif ($_GET['type'] == 'domain') { - echo $idle->domainData($_GET['id']); - } elseif ($_GET['type'] == 'yabsModal') { - header('Content-Type: text/html; charset=utf-8'); - echo $idle->showYabsModal($_GET['id']);//Not used anymore. Still here for debugging - } elseif ($_GET['type'] == 'infoCard') { - header('Content-Type: text/html; charset=utf-8'); - echo $idle->infoCard();//Info card for the "info" tab - } elseif ($_GET['type'] == 'autocomplete') { - if ($_GET['input'] == 'location') { - $idle->locationsAutoCompleteGET($_GET['value']);//Auto complete locations input - } elseif ($_GET['input'] == 'provider') { - $idle->providersAutoCompleteGET($_GET['value']);//Auto complete providers input - } - } elseif ($_GET['type'] == 'view_more_modal') { - header('Content-Type: text/html; charset=utf-8'); - if ($_GET['value'] == 'server') { - $idle->viewMoreModal($_GET['id']);//View more details modal - } elseif ($_GET['value'] == 'shared') { - $idle->viewMoreSharedHostingModal($_GET['id']);//View more details modal - } elseif ($_GET['value'] == 'domain') { - $idle->viewMoreDomainModal($_GET['id']);//View more details modal - } - } elseif ($_GET['type'] == 'dns_search') { - header('Content-Type: text/html; charset=utf-8'); - echo $idle->getIpForDomain($_GET['hostname'], $_GET['dns_type']); - } elseif ($_GET['type'] == 'check_up') { - echo $idle->checkIsUp($_GET['host']); - } elseif ($_GET['type'] == 'object_cards') { - header('Content-Type: text/html; charset=utf-8'); - echo $idle->objectCards(); - } elseif ($_GET['type'] == 'object_tables') { - header('Content-Type: text/html; charset=utf-8'); - echo $idle->objectTables(); - } elseif ($_GET['type'] == 'compare_table') { - header('Content-Type: text/html; charset=utf-8'); - echo $idle->compareTable($_GET['server1'], $_GET['server2']); - } - } -} elseif ($_SERVER['REQUEST_METHOD'] === 'POST') { - if (isset($_POST['order_form'])) { - header('Content-Type: text/html; charset=utf-8'); - echo $idle->orderTable($_POST['order_by']);//Returns order table - } else { - if (isset($_POST['action']) && $_POST['action'] == 'insert') {//From an insert 'type' form - $insert = new itemInsert($_POST); - if (isset($_POST['from_yabs'])) {//From add form YABs - $id = $insert->insertBasicWithYabs();//Insert basic data from form - $response_code = $insert->insertYabsData();//Insert YABs data from the form - if ($response_code != 1) { - header('Content-Type: text/html; charset=utf-8'); - $update = new itemUpdate(array('me_server_id' => $id)); - $update->deleteObjectData(); - echo $response_code; - exit; - } - } elseif (isset($_POST['manual'])) {//From add form manual - $insert->insertBasic(); - } elseif (isset($_POST['shared_hosting_form'])) {//From shared hosting form - $insert->insertSharedHosting(); - } elseif (isset($_POST['domain_form'])) {//From domain form - $insert->insertDomain(); - } - } elseif (isset($_POST['action']) && $_POST['action'] == 'update') { - $update = new itemUpdate($_POST); - if (isset($_POST['me_delete']) || isset($_POST['sh_me_delete']) || isset($_POST['d_me_delete'])) {//Delete object - $update->deleteObjectData(); - } elseif ($_POST['type'] == 'server_modal_edit') {//Update the server info - $update->updateServerFromModal(); - $update->updateServerPricingFromModal(); - if (!is_null($_POST['me_yabs']) && !empty($_POST['me_yabs'])) { - $update->updateYabsData(); - } - } elseif ($_POST['type'] == 'shared_hosting_modal_edit') {//Update the shared hosting info - $update->updateSharedHostingFromModal(); - $update->updateSharedHostingPricingFromModal(); - } elseif ($_POST['type'] == 'domain_modal_edit') {//Update the domain info - $update->updateDomainFromModal(); - $update->updateDomainPricingFromModal(); - } - } - header('Location:index.php'); - die(); - } -} \ No newline at end of file diff --git a/class.php b/class.php deleted file mode 100644 index 87956f8..0000000 --- a/class.php +++ /dev/null @@ -1,3849 +0,0 @@ -outputString("<$tag>"); - } elseif (empty($class) && !empty($id)) { - $this->outputString("<$tag id='$id'>"); - } elseif (!empty($class) && empty($id)) { - $this->outputString("<$tag class='$class'>"); - } else { - $this->outputString("<$tag class='$class' id='$id'>"); - } - } - - protected function tagClose(string $tag = 'div', int $amount = 1) - { - for ($i = 1; $i <= $amount; $i++) { - $this->outputString(""); - } - } - - protected function outputString(string $string) - { - echo $string; - } - - protected function collapseButton(string $text, string $href, string $id = 'collapseId', string $class = 'btn btn-main collapse-btn', bool $expanded = false) - { - ($expanded) ? $ex = "true" : $ex = "false"; - $this->outputString('' . $text . ''); - } - - protected function HTMLphrase(string $element = 'p', string $class = '', string $text = '', string $id = '') - { - if (empty($class)) { - if (empty($id)) { - $this->tagOpen($element); - } else { - $this->tagOpen($element, '', $id); - } - } else { - if (empty($id)) { - $this->tagOpen($element, $class); - } else { - $this->tagOpen($element, $class, $id); - } - } - $this->outputString($text); - $this->tagClose($element); - } - - protected function colOpen(string $class = 'col-12') - { - $this->tagOpen('div', $class); - } - - protected function rowColOpen(string $row_class = 'row', string $col_class = 'col-12') - { - $this->tagOpen('div', $row_class); - $this->tagOpen('div', $col_class); - } - - protected function textInput(string $name_id, string $value = '', string $class = 'form-control', bool $required = false, int $min_length = 0, int $max_length = 124) - { - (empty($value)) ? $val = '' : $val = " value='$value'"; - ($required) ? $req = 'required' : $req = ''; - $this->outputString(""); - } - - protected function numberInput(string $name_id, string $value = '', string $class = 'form-control', bool $required = false, int $min = 0, int $max = 9999, string $step = 'any') - { - (empty($value)) ? $val = '' : $val = " value='$value'"; - ($required) ? $req = 'required' : $req = ''; - $this->outputString(""); - } - - protected function hiddenInput(string $name_id, string $value = '') - { - (empty($value)) ? $val = '' : $val = " value='$value'"; - $this->outputString(""); - } - - protected function submitInput(string $text, string $id = 'submitInput', string $class = 'btn') - { - $this->outputString(""); - } - - protected function inputPrepend(string $text) - { - $this->outputString('
    ' . $text . '
    '); - } - - protected function tagsInput(string $name_id, string $class = 'form-control') - { - $this->outputString(""); - } - - protected function selectElement(string $name_id, string $class = 'form-control') - { - $this->outputString(""); - $this->outputString("
    '); - $this->tagClose('div'); - } - } - - protected function vpsCard(string $id) - { - $select = $this->dbConnect()->prepare(" - SELECT servers.id,servers.hostname,servers.ipv4,servers.`cpu`,servers.cpu_freq,servers.ram,servers.ram_type,servers.`disk`, - servers.disk_type,servers.os,servers.virt,servers.was_special,locations.name as location,providers.name as provider,pricing.price,pricing.currency,pricing.term,pricing.next_dd - FROM servers INNER JOIN locations on servers.location = locations.id INNER JOIN providers on servers.provider = providers.id - INNER JOIN pricing on servers.id = pricing.server_id WHERE servers.id = ? LIMIT 1;"); - $select->execute([$id]); - $data = $select->fetchAll(PDO::FETCH_ASSOC)[0]; - ($data['was_special'] == 1) ? $special = ' special-card' : $special = ''; - (is_null($data['next_dd'])) ? $dd_class = 'no-dd' : $dd_class = 'dd-text'; - $this->colOpen('col-12 col-sm-6 col-md-4 col-xl-3'); - $this->tagOpen("div", "card obj-card$special"); - $this->tagOpen('div', 'card-header'); - $this->rowColOpen('row text-center', 'col-12 col-xl-10'); - $this->HTMLphrase('h4', 'hostname-header', $data['hostname']); - $this->tagClose('div'); - $this->colOpen('col-12 col-xl-2 os-col'); - (empty($data['ipv4']) || is_null($data['ipv4'])) ? $host = $data['hostname'] : $host = $data['ipv4']; - $this->outputString('' . $this->osIntToIcon($data['os']) . ''); - $this->tagClose('div', 3); - $this->tagOpen('div', 'card-body'); - $this->HTMLphrase('h6', 'price', '$' . $data['price'] . ' ' . $data['currency'] . ' ' . $this->paymentTerm($data['term'])); - $this->rowColOpen('row text-center', 'col-12'); - if (is_null($data['provider']) || empty($data['provider'])) { - $this->HTMLphrase('h6', 'provider no-prov', ' '); - } else { - $this->HTMLphrase('h6', 'provider', $data['provider']); - } - $this->tagClose('div', 2); - $this->rowColOpen('row text-center', 'col-12'); - if (is_null($data['location']) || empty($data['location'])) { - $this->HTMLphrase('h6', 'location no-loc', ' '); - } else { - $this->HTMLphrase('h6', 'location', $data['location']); - } - $this->tagClose('div', 2); - $this->rowColOpen('row text-center', 'col-12'); - $this->HTMLphrase('p', $dd_class, "Due in {$this->processDueDate($data['id'], $data['term'], $data['next_dd'])} days"); - $this->tagClose('div', 2); - $this->rowColOpen('row cpu-row', 'col-6'); - $this->outputString(''); - $this->HTMLphrase('p', 'value', '' . $data['cpu'] . '@' . $this->mhzToGhz($data['cpu_freq']) . 'Ghz'); - $this->tagClose('div'); - $this->colOpen('col-6'); - $this->outputString(''); - $this->HTMLphrase('p', 'value', '' . $data['virt'] . ''); - $this->tagClose('div', 2); - $this->rowColOpen('row mem-disk-row', 'col-6'); - $this->outputString(''); - $this->HTMLphrase('p', 'value', '' . $data['ram'] . '' . $data['ram_type'] . ''); - $this->tagClose('div'); - $this->colOpen('col-6'); - $this->outputString(''); - $this->HTMLphrase('p', 'value', '' . $data['disk'] . '' . $data['disk_type'] . ''); - $this->tagClose('div', 2); - $this->rowColOpen('row text-center', 'col-6'); - $this->outputString('More'); - $this->tagClose('div'); - $this->colOpen('col-6'); - $this->outputString('Edit'); - $this->tagClose('div', 5); - } - - protected function locationForTable(string $location) - { - if (strpos($location, ',') !== false) { - return explode(',', $location)[0]; - } else { - return $location; - } - } - - public function objectCards() - { - $this->serverCards(); - $this->sharedHostingCards(); - $this->domainCards(); - } - - public function objectTables() - { - $this->serverTable(); - $this->sharedHostingTable(); - $this->domainTable(); - } - - protected function vpsTableRow(string $id) - { - $select = $this->dbConnect()->prepare(" - SELECT servers.id,servers.hostname,servers.ipv4,servers.ipv6,servers.`cpu`,servers.cpu_freq,servers.ram,servers.ram_type,servers.`disk`, - servers.disk_type,servers.os,servers.virt,servers.tags, DATE_FORMAT(`owned_since`, '%d %b %Y') as dt, servers.was_special,locations.name as location,providers.name as provider,pricing.price,pricing.currency,pricing.term,pricing.next_dd - FROM servers INNER JOIN locations on servers.location = locations.id INNER JOIN providers on servers.provider = providers.id - INNER JOIN pricing on servers.id = pricing.server_id WHERE servers.id = ? LIMIT 1;"); - $select->execute([$id]); - $data = $select->fetchAll(PDO::FETCH_ASSOC)[0]; - if (self::COLOR_TABLE) { - ($data['was_special'] == 1) ? $special_class = 'td-special-price' : $special_class = ''; - if ($this->processDueDate($data['id'], $data['term'], $data['next_dd']) < 7) { - $ds_class = 'td-due-soon'; - } elseif ($this->processDueDate($data['id'], $data['term'], $data['next_dd']) > 300) { - $ds_class = 'td-not-due-soon'; - } else { - $ds_class = ''; - } - } else { - $special_class = $ds_class = ''; - } - (empty($data['ipv4']) || is_null($data['ipv4'])) ? $host = $data['hostname'] : $host = $data['ipv4']; - $this->tagOpen('tr'); - $this->tableTd('', $data['hostname']); - $this->tableTd('', 'More'); - $this->tableTd('', 'Edit'); - $this->tableTd('td-text-sml', $data['virt']); - $this->tableTd('td-nowrap', $data['cpu'] . '@' . $this->mhzToGhz($data['cpu_freq']) . 'Ghz'); - $this->tableTd('td-nowrap', $data['ram'] . '' . $data['ram_type'] . ''); - $this->tableTd('td-nowrap', $data['disk'] . '' . $data['disk_type'] . ''); - $this->tableTd('td-nowrap ' . $special_class . '', $data['price'] . ' ' . $data['currency'] . ' ' . $this->paymentTerm($data['term']) . ''); - $this->tableTd('', '' . $this->osIntToIcon($data['os']) . ''); - $this->tableTd('td-nowrap td-text-med', '
    ' . $this->locationForTable($data['location']) . '
    '); - $this->tableTd('td-nowrap td-text-med', '
    ' . $data['provider'] . '
    '); - $this->tableTd('td-nowrap td-text-sml ' . $ds_class . '', '
    ' . $this->processDueDate($data['id'], $data['term'], $data['next_dd']) . ' days
    '); - $this->tableTd('td-nowrap td-text-sml', '
    ' . $data['dt'] . '
    '); - $this->tableTd('td-nowrap td-text-sml', '
    ' . $data['ipv4'] . '
    '); - $this->tableTd('td-nowrap td-text-sml', '
    ' . $data['ipv6'] . '
    '); - $this->tableTd('td-nowrap td-text-sml', '
    ' . $data['tags'] . '
    '); - $this->tagClose('tr'); - } - - protected function sharedHostingTable() - { - if (self::SH_SORT_TYPE == 'DOMAIN_DESC') { - $select = $this->dbConnect()->prepare("SELECT `id` FROM `shared_hosting` ORDER BY `domain` DESC;"); - } elseif (self::SH_SORT_TYPE == 'DOMAIN_ASC') { - $select = $this->dbConnect()->prepare("SELECT `id` FROM `shared_hosting` ORDER BY `domain`;"); - } elseif (self::SH_SORT_TYPE == 'OWNED_SINCE_DESC') { - $select = $this->dbConnect()->prepare("SELECT `id` FROM `shared_hosting` ORDER BY `owned_since` DESC;"); - } elseif (self::SH_SORT_TYPE == 'OWNED_SINCE_ASC') { - $select = $this->dbConnect()->prepare("SELECT `id` FROM `shared_hosting` ORDER BY `owned_since`;"); - } elseif (self::SH_SORT_TYPE == 'PRICE_DESC') { - $select = $this->dbConnect()->prepare("SELECT `id` FROM `shared_hosting` INNER JOIN `pricing` ON shared_hosting.id = pricing.server_id ORDER BY `as_usd` DESC;"); - } elseif (self::SH_SORT_TYPE == 'PRICE_ASC') { - $select = $this->dbConnect()->prepare("SELECT `id` FROM `shared_hosting` INNER JOIN `pricing` ON shared_hosting.id = pricing.server_id ORDER BY `as_usd`;"); - } elseif (self::SH_SORT_TYPE == 'DUE_DESC') { - $select = $this->dbConnect()->prepare("SELECT `id` FROM `shared_hosting` INNER JOIN `pricing` ON shared_hosting.id = pricing.server_id ORDER BY `next_dd` DESC;"); - } elseif (self::SH_SORT_TYPE == 'DUE_ASC') { - $select = $this->dbConnect()->prepare("SELECT `id` FROM `shared_hosting` INNER JOIN `pricing` ON shared_hosting.id = pricing.server_id ORDER BY `next_dd`;"); - } else { - $select = $this->dbConnect()->prepare("SELECT `id` FROM `shared_hosting`;"); - } - $select->execute(); - $count = $select->rowCount(); - if ($count > 0) { - $this->HTMLPhrase('h4', 'card-section-header mt-1', 'Shared hosting ' . $count . ''); - $this->tagOpen('div', 'row'); - $this->tableHeader(array('Domain', '', '', 'Type', 'Disk', 'Price', 'Location', 'Provider', 'Due', 'BWidth', 'Domains', 'Emails', 'FTPs', 'DBs', 'Since'), 'table objects-table', 'sharedHostingTable'); - while ($row = $select->fetch(PDO::FETCH_ASSOC)) { - $this->sharedHostingTableRow($row['id']); - } - $this->outputString('
    '); - $this->tagClose('div'); - } - } - - protected function domainTable() - { - if (self::DC_SORT_TYPE == 'DOMAIN_DESC') { - $select = $this->dbConnect()->prepare("SELECT `id` FROM `domains` ORDER BY `domain` DESC;"); - } elseif (self::DC_SORT_TYPE == 'DOMAIN_ASC') { - $select = $this->dbConnect()->prepare("SELECT `id` FROM `domains` ORDER BY `domain`;"); - } elseif (self::DC_SORT_TYPE == 'OWNED_SINCE_DESC') { - $select = $this->dbConnect()->prepare("SELECT `id` FROM `domains` ORDER BY `owned_since` DESC;"); - } elseif (self::DC_SORT_TYPE == 'OWNED_SINCE_ASC') { - $select = $this->dbConnect()->prepare("SELECT `id` FROM `domains` ORDER BY `owned_since`;"); - } elseif (self::DC_SORT_TYPE == 'PRICE_DESC') { - $select = $this->dbConnect()->prepare("SELECT `id` FROM `domains` INNER JOIN `pricing` ON domains.id = pricing.server_id ORDER BY `as_usd` DESC;"); - } elseif (self::DC_SORT_TYPE == 'PRICE_ASC') { - $select = $this->dbConnect()->prepare("SELECT `id` FROM `domains` INNER JOIN `pricing` ON domains.id = pricing.server_id ORDER BY `as_usd`;"); - } elseif (self::DC_SORT_TYPE == 'DUE_DESC') { - $select = $this->dbConnect()->prepare("SELECT `id` FROM `domains` INNER JOIN `pricing` ON domains.id = pricing.server_id ORDER BY `next_dd` DESC;"); - } elseif (self::DC_SORT_TYPE == 'DUE_ASC') { - $select = $this->dbConnect()->prepare("SELECT `id` FROM `domains` INNER JOIN `pricing` ON domains.id = pricing.server_id ORDER BY `next_dd`;"); - } else { - $select = $this->dbConnect()->prepare("SELECT `id` FROM `domains`;"); - } - $select->execute(); - $count = $select->rowCount(); - if ($count > 0) { - $this->HTMLPhrase('h4', 'card-section-header mt-1', 'Domains ' . $count . ''); - $this->tagOpen('div', 'row'); - $this->tableHeader(array('Domain', '', '', 'NS1', 'NS2', 'Price', 'Provider', 'Due', 'Since'), 'table objects-table', 'domainsTable'); - while ($row = $select->fetch(PDO::FETCH_ASSOC)) { - $this->domainTableRow($row['id']); - } - $this->outputString('
    '); - $this->tagClose('div'); - } - } - - protected function domainTableRow(string $id) - { - $select = $this->dbConnect()->prepare(" - SELECT domains.id,domains.domain,domains.attached_to,domains.ns1,domains.ns2,DATE_FORMAT(`owned_since`, '%d %b %Y') as dt,providers.name as provider, pricing.price,pricing.currency,pricing.term,pricing.next_dd - FROM domains INNER JOIN providers on domains.provider = providers.id - INNER JOIN pricing on domains.id = pricing.server_id WHERE domains.id = ? LIMIT 1;"); - $select->execute([$id]); - $data = $select->fetchAll(PDO::FETCH_ASSOC)[0]; - if (self::COLOR_TABLE) { - if ($this->processDueDate($data['id'], $data['term'], $data['next_dd']) < 7) { - $ds_class = 'td-due-soon'; - } elseif ($this->processDueDate($data['id'], $data['term'], $data['next_dd']) > 300) { - $ds_class = 'td-not-due-soon'; - } else { - $ds_class = ''; - } - } else { - $ds_class = ''; - } - $this->tagOpen('tr'); - $this->tableTd('td-nowrap', $data['domain']); - $this->tableTd('', 'More'); - $this->tableTd('', 'Edit'); - $this->tableTd('td-nowrap', '' . $data['ns1'] . ''); - $this->tableTd('td-nowrap', '' . $data['ns2'] . ''); - $this->tableTd('td-nowrap', $data['price'] . ' ' . $data['currency'] . ' ' . $this->paymentTerm($data['term']) . ''); - $this->tableTd('td-nowrap td-text-med', '
    ' . $data['provider'] . '
    '); - $this->tableTd('td-nowrap td-text-sml ' . $ds_class . '', '
    ' . $this->processDueDate($data['id'], $data['term'], $data['next_dd']) . ' days
    '); - $this->tableTd('td-nowrap', $data['dt']); - $this->tagClose('tr'); - } - - protected function sharedHostingTableRow(string $id) - { - $select = $this->dbConnect()->prepare(" - SELECT shared_hosting.id,shared_hosting.domain,shared_hosting.type,shared_hosting.was_special,shared_hosting.disk,shared_hosting.disk_type,shared_hosting.bandwidth,shared_hosting.domains_limit,shared_hosting.emails, - shared_hosting.ftp,shared_hosting.db,DATE_FORMAT(`owned_since`, '%d %b %Y') as dt,locations.name as location,providers.name as provider,pricing.price,pricing.currency,pricing.term,pricing.next_dd - FROM shared_hosting INNER JOIN locations on shared_hosting.location = locations.id INNER JOIN providers on shared_hosting.provider = providers.id - INNER JOIN pricing on shared_hosting.id = pricing.server_id WHERE shared_hosting.id = ? LIMIT 1;"); - $select->execute([$id]); - $data = $select->fetchAll(PDO::FETCH_ASSOC)[0]; - if (self::COLOR_TABLE) { - ($data['was_special'] == 1) ? $special_class = 'td-special-price' : $special_class = ''; - if ($this->processDueDate($data['id'], $data['term'], $data['next_dd']) < 7) { - $ds_class = 'td-due-soon'; - } elseif ($this->processDueDate($data['id'], $data['term'], $data['next_dd']) > 300) { - $ds_class = 'td-not-due-soon'; - } else { - $ds_class = ''; - } - } else { - $special_class = $ds_class = ''; - } - $this->tagOpen('tr'); - $this->tableTd('td-nowrap', $data['domain']); - $this->tableTd('', 'More'); - $this->tableTd('', 'Edit'); - $this->tableTd('td-nowrap td-text-sml', $data['type']); - $this->tableTd('td-nowrap', $data['disk'] . '' . $data['disk_type'] . ''); - $this->tableTd('td-nowrap ' . $special_class . '', $data['price'] . ' ' . $data['currency'] . ' ' . $this->paymentTerm($data['term']) . ''); - $this->tableTd('td-nowrap td-text-med', '
    ' . $this->locationForTable($data['location']) . '
    '); - $this->tableTd('td-nowrap td-text-med', '
    ' . $data['provider'] . '
    '); - $this->tableTd('td-nowrap td-text-sml ' . $ds_class . '', '
    ' . $this->processDueDate($data['id'], $data['term'], $data['next_dd']) . ' days
    '); - $this->tableTd('td-nowrap', $data['bandwidth'] . 'TB'); - $this->tableTd('td-nowrap', $data['domains_limit']); - $this->tableTd('td-nowrap', $data['emails']); - $this->tableTd('td-nowrap', $data['ftp']); - $this->tableTd('td-nowrap', $data['db']); - $this->tableTd('td-nowrap', $data['dt']); - $this->tagClose('tr'); - } - - protected function SharedHostingCard(string $id) - { - $select = $this->dbConnect()->prepare(" - SELECT shared_hosting.id,shared_hosting.domain,shared_hosting.disk_as_gb,shared_hosting.type,shared_hosting.was_special,locations.name as location,providers.name as provider,pricing.price,pricing.currency,pricing.term,pricing.next_dd - FROM shared_hosting INNER JOIN locations on shared_hosting.location = locations.id INNER JOIN providers on shared_hosting.provider = providers.id - INNER JOIN pricing on shared_hosting.id = pricing.server_id WHERE shared_hosting.id = ? LIMIT 1;"); - $select->execute([$id]); - $data = $select->fetchAll(PDO::FETCH_ASSOC)[0]; - ($data['was_special'] == 1) ? $special = ' special-card' : $special = ''; - (is_null($data['next_dd'])) ? $dd_class = 'no-dd' : $dd_class = 'dd-text'; - $this->colOpen('col-12 col-sm-6 col-md-4 col-xl-3'); - $this->tagOpen("div", "card obj-card$special"); - $this->tagOpen('div', 'card-header'); - $this->rowColOpen('row text-center', 'col-12'); - $this->HTMLphrase('h4', 'hostname-header', $data['domain']);; - $this->tagClose('div', 3); - $this->tagOpen('div', 'card-body'); - $this->HTMLphrase('h6', 'price', '$' . $data['price'] . ' ' . $data['currency'] . ' ' . $this->paymentTerm($data['term'])); - $this->rowColOpen('row text-center', 'col-12'); - $this->HTMLphrase('h6', 'provider', $data['provider']); - $this->tagClose('div', 2); - $this->rowColOpen('row text-center', 'col-12'); - $this->HTMLphrase('h6', 'location', $data['location']); - $this->tagClose('div', 2); - $this->rowColOpen('row text-center', 'col-12'); - $this->HTMLphrase('p', $dd_class, "Due in {$this->processDueDate($data['id'], $data['term'], $data['next_dd'])} days"); - $this->tagClose('div', 2); - $this->rowColOpen('row mem-disk-row', 'col-6'); - $this->outputString(''); - $this->HTMLphrase('p', 'value', '' . $data['type'] . ''); - $this->tagClose('div'); - $this->colOpen('col-6'); - $this->outputString(''); - $this->HTMLphrase('p', 'value', '' . $data['disk_as_gb'] . 'GB'); - $this->tagClose('div', 2); - $this->rowColOpen('row text-center', 'col-6'); - $this->outputString('More'); - $this->tagClose('div'); - $this->colOpen('col-6'); - $this->outputString('Edit'); - $this->tagClose('div', 5); - } - - protected function domainCard(string $id) - { - $select = $this->dbConnect()->prepare(" - SELECT domains.id,domains.domain,domains.attached_to,providers.name as provider, pricing.price,pricing.currency,pricing.term,pricing.next_dd - FROM domains INNER JOIN providers on domains.provider = providers.id - INNER JOIN pricing on domains.id = pricing.server_id WHERE domains.id = ? LIMIT 1;"); - $select->execute([$id]); - $data = $select->fetchAll(PDO::FETCH_ASSOC)[0]; - (is_null($data['next_dd'])) ? $dd_class = 'no-dd' : $dd_class = 'dd-text'; - $this->colOpen('col-12 col-sm-6 col-md-4 col-xl-3'); - $this->tagOpen("div", "card obj-card"); - $this->tagOpen('div', 'card-header'); - $this->rowColOpen('row text-center', 'col-12'); - $this->HTMLphrase('h4', 'hostname-header', $data['domain']); - $this->tagClose('div', 3); - $this->tagOpen('div', 'card-body'); - $this->HTMLphrase('h6', 'price', '$' . $data['price'] . ' ' . $data['currency'] . ' ' . $this->paymentTerm($data['term'])); - $this->rowColOpen('row text-center', 'col-12'); - $this->HTMLphrase('h6', 'provider', $data['provider']); - $this->tagClose('div', 2); - $this->rowColOpen('row text-center', 'col-12'); - $this->HTMLphrase('p', $dd_class, "Due in {$this->processDueDate($data['id'], $data['term'], $data['next_dd'])} days"); - $this->tagClose('div', 2); - $this->rowColOpen('row text-center', 'col-6'); - $this->outputString('More'); - $this->tagClose('div'); - $this->colOpen('col-6'); - $this->outputString('Edit'); - $this->tagClose('div', 5); - } - - public function editServerModal() - { - $this->outputString(' +
    +
    + Insert YABs +
    +
    + + +
    + diff --git a/resources/views/yabs/index.blade.php b/resources/views/yabs/index.blade.php new file mode 100644 index 0000000..92f7383 --- /dev/null +++ b/resources/views/yabs/index.blade.php @@ -0,0 +1,87 @@ +@section('title') {{'YABs'}} @endsection +@section('style') + +@endsection + + + {{ __('YABs') }} + +
    + + + Add YABs + +
    + + + + + + + + + + + + + + + + + + + + + @if(!empty($yabs)) + @foreach($yabs as $yab) + + + + + + + + + + + + + + + + + @endforeach + @else + + + + @endif + +
    ServerCPUCPU FREQRAMDISKGB5 SGB5 MIpv64k64k512k1mDateActions
    {{ $yab->hostname }}{{ $yab->cpu_cores }}{{ $yab->cpu_freq }}Ghz{{ $yab->ram }}{{ $yab->ram_type }}{{ $yab->disk }}{{ $yab->disk_type }}{{ $yab->gb5_single }}{{ $yab->gb5_multi }}@if($yab->has_ipv6 === 1) + Yes + @else + No + @endif + {{ $yab->d_4k }}{{ $yab->d_4k_type }}{{ $yab->d_64k }}{{ $yab->d_64k_type }}{{ $yab->d_512k }}{{ $yab->d_512k_type }}{{ $yab->d_1m }}{{ $yab->d_1m_type }}{{ date_format(new DateTime($yab->output_date), 'Y-m-d g:i a') }} +
    + + + + + +
    +
    No YABs found.
    + +
    +
    + @if(Session::has('timer_version_footer') && Session::get('timer_version_footer') === 1) +

    Built on Laravel + v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }})

    + @endif +
    + + yabs + +
    diff --git a/resources/views/yabs/show.blade.php b/resources/views/yabs/show.blade.php new file mode 100644 index 0000000..9b0704c --- /dev/null +++ b/resources/views/yabs/show.blade.php @@ -0,0 +1,134 @@ +@section('title') {{$yab[0]->hostname}} {{$yab[0]->id}} {{'YABs'}} @endsection + + + {{ __('YABs details') }} + +
    + + + {{ route('yabs.index') }} + Go back + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Server{{ $yab[0]->hostname }}
    CPU{{ $yab[0]->cpu_cores }} @ {{$yab[0]->cpu_freq}} Ghz
    CPU type{{ $yab[0]->cpu }}
    Ram{{ $yab[0]->ram }} {{$yab[0]->ram_type}}
    Disk{{ $yab[0]->disk }} {{$yab[0]->disk_type}}
    Has IPv6 + @if($yab[0]->has_ipv6 === 1) + Yes + @else + No + @endif +
    AES + @if($yab[0]->aes === 1) + Yes + @else + No + @endif +
    VM + @if($yab[0]->vm === 1) + Yes + @else + No + @endif +
    GB5 Single{{ $yab[0]->gb5_single }}
    GB5 Multi{{ $yab[0]->gb5_multi }}
    Tested + @if(!is_null($yab[0]->output_date)) + {{date_format(new DateTime($yab[0]->output_date), 'jS F Y')}} + @endif +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + @foreach($network as $speed_test) + + + + @endforeach + +
    Disk speeds:
    4k {{$yab[0]->d_4k}} + {{$yab[0]->d_4k_type}}
    64k {{$yab[0]->d_64k}} + {{$yab[0]->d_64k_type}}
    512k {{$yab[0]->d_512k}} + {{$yab[0]->d_512k_type}}
    1m {{$yab[0]->d_1m}} {{$yab[0]->d_1m_type}} +
    Network speed (location|send|receive):
    + {{$speed_test->location}} {{$speed_test->send}} + {{$speed_test->send_type}}, {{$speed_test->receive}} + {{$speed_test->receive_type}}
    +
    +
    +
    + @if(Session::has('timer_version_footer') && Session::get('timer_version_footer') === 1) +

    + Built on Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }} + ) +

    + @endif +
    +
    diff --git a/routes/api.php b/routes/api.php new file mode 100644 index 0000000..27f2e07 --- /dev/null +++ b/routes/api.php @@ -0,0 +1,66 @@ +get('/user', function (Request $request) { + return $request->user(); +}); + + +Route::middleware('auth:api')->get('/test', function (Request $request) { + return new JsonResponse(['message' => 'Hello world']); +}); + +Route::middleware('auth:api')->get('dns/', 'App\Http\Controllers\ApiController@getAllDns'); +Route::middleware('auth:api')->get('dns/{id}', 'App\Http\Controllers\ApiController@getDns'); + +Route::middleware('auth:api')->get('domains/', 'App\Http\Controllers\ApiController@getAllDomains'); +Route::middleware('auth:api')->get('domains/{id}', 'App\Http\Controllers\ApiController@getDomains'); + +Route::middleware('auth:api')->get('servers', 'App\Http\Controllers\ApiController@getAllServers'); +Route::middleware('auth:api')->get('servers/{id}', 'App\Http\Controllers\ApiController@getServer'); + +Route::middleware('auth:api')->get('labels/', 'App\Http\Controllers\ApiController@getAllLabels'); +Route::middleware('auth:api')->get('labels/{id}', 'App\Http\Controllers\ApiController@getLabel'); + +Route::middleware('auth:api')->get('locations/', 'App\Http\Controllers\ApiController@getAllLocations'); +Route::middleware('auth:api')->get('locations/{id}', 'App\Http\Controllers\ApiController@getLocation'); + +Route::middleware('auth:api')->get('misc/', 'App\Http\Controllers\ApiController@getAllMisc'); +Route::middleware('auth:api')->get('misc/{id}', 'App\Http\Controllers\ApiController@getMisc'); + +Route::middleware('auth:api')->get('networkSpeeds/', 'App\Http\Controllers\ApiController@getAllNetworkSpeeds'); +Route::middleware('auth:api')->get('networkSpeeds/{id}', 'App\Http\Controllers\ApiController@getNetworkSpeeds'); + +Route::middleware('auth:api')->get('pricing/', 'App\Http\Controllers\ApiController@getAllPricing'); +Route::middleware('auth:api')->get('pricing/{id}', 'App\Http\Controllers\ApiController@getPricing'); + +Route::middleware('auth:api')->get('providers/', 'App\Http\Controllers\ApiController@getAllProviders'); +Route::middleware('auth:api')->get('providers/{id}', 'App\Http\Controllers\ApiController@getProvider'); + +Route::middleware('auth:api')->get('reseller/', 'App\Http\Controllers\ApiController@getAllReseller'); +Route::middleware('auth:api')->get('reseller/{id}', 'App\Http\Controllers\ApiController@getReseller'); + +Route::middleware('auth:api')->get('settings/', 'App\Http\Controllers\ApiController@getAllSettings'); + +Route::middleware('auth:api')->get('shared/', 'App\Http\Controllers\ApiController@getAllShared'); +Route::middleware('auth:api')->get('shared/{id}', 'App\Http\Controllers\ApiController@getShared'); + +//Route::get('providers', 'App\Http\Controllers\ApiController@getAllProvidersTable')->name('get-all-providers'); + +Route::middleware('auth:api')->get('online/{hostname}', 'App\Http\Controllers\ApiController@checkHostIsUp'); + +Route::middleware('auth:api')->get('dns/{domainName}/{type}', 'App\Http\Controllers\ApiController@getIpForDomain'); diff --git a/routes/auth.php b/routes/auth.php new file mode 100644 index 0000000..0fb1129 --- /dev/null +++ b/routes/auth.php @@ -0,0 +1,64 @@ +middleware('guest') + ->name('register'); + +Route::post('/register', [RegisteredUserController::class, 'store']) + ->middleware('guest'); + +Route::get('/login', [AuthenticatedSessionController::class, 'create']) + ->middleware('guest') + ->name('login'); + +Route::post('/login', [AuthenticatedSessionController::class, 'store']) + ->middleware('guest'); + +Route::get('/forgot-password', [PasswordResetLinkController::class, 'create']) + ->middleware('guest') + ->name('password.request'); + +Route::post('/forgot-password', [PasswordResetLinkController::class, 'store']) + ->middleware('guest') + ->name('password.email'); + +Route::get('/reset-password/{token}', [NewPasswordController::class, 'create']) + ->middleware('guest') + ->name('password.reset'); + +Route::post('/reset-password', [NewPasswordController::class, 'store']) + ->middleware('guest') + ->name('password.update'); + +Route::get('/verify-email', [EmailVerificationPromptController::class, '__invoke']) + ->middleware('auth') + ->name('verification.notice'); + +Route::get('/verify-email/{id}/{hash}', [VerifyEmailController::class, '__invoke']) + ->middleware(['auth', 'signed', 'throttle:6,1']) + ->name('verification.verify'); + +Route::post('/email/verification-notification', [EmailVerificationNotificationController::class, 'store']) + ->middleware(['auth', 'throttle:6,1']) + ->name('verification.send'); + +Route::get('/confirm-password', [ConfirmablePasswordController::class, 'show']) + ->middleware('auth') + ->name('password.confirm'); + +Route::post('/confirm-password', [ConfirmablePasswordController::class, 'store']) + ->middleware('auth'); + +Route::post('/logout', [AuthenticatedSessionController::class, 'destroy']) + ->middleware('auth') + ->name('logout'); diff --git a/routes/channels.php b/routes/channels.php new file mode 100644 index 0000000..5d451e1 --- /dev/null +++ b/routes/channels.php @@ -0,0 +1,18 @@ +id === (int) $id; +}); diff --git a/routes/console.php b/routes/console.php new file mode 100644 index 0000000..e05f4c9 --- /dev/null +++ b/routes/console.php @@ -0,0 +1,19 @@ +comment(Inspiring::quote()); +})->purpose('Display an inspiring quote'); diff --git a/routes/web.php b/routes/web.php new file mode 100644 index 0000000..2e4edb1 --- /dev/null +++ b/routes/web.php @@ -0,0 +1,69 @@ +name('/'); + + +Route::get('dashboard', function () { + return redirect('/'); +}); + +require __DIR__ . '/auth.php'; + +Route::resource('account', AccountController::class)->middleware(['auth']); + +Route::resource('dns', DNSController::class)->middleware(['auth']); + +Route::resource('domains', DomainsController::class)->middleware(['auth']); + +Route::resource('labels', LabelsController::class)->middleware(['auth']); + +Route::resource('locations', LocationsController::class)->middleware(['auth']); + +Route::resource('misc', MiscController::class)->middleware(['auth']); + +Route::resource('providers', ProvidersController::class)->middleware(['auth']); + +//Test +Route::get('providers/list', [ProvidersController::class, 'getProviders'])->name('list-providers'); + +Route::resource('reseller', ResellerController::class)->middleware(['auth']); + +Route::get('servers/public', 'App\Http\Controllers\ServerController@showServersPublic')->name('servers/public'); + +Route::resource('servers', ServerController::class)->middleware(['auth']); + + +Route::resource('settings', SettingsController::class)->middleware(['auth']); + +Route::resource('shared', SharedController::class)->middleware(['auth']); + +Route::resource('yabs', YabsController::class)->middleware(['auth']); + +Route::get('servers-compare-choose', 'App\Http\Controllers\ServerController@chooseCompare')->middleware(['auth'])->name('servers-compare-choose'); + +Route::get('servers-compare/{server1}/{server2}', 'App\Http\Controllers\ServerController@compareServers')->middleware(['auth']); diff --git a/server.php b/server.php new file mode 100644 index 0000000..5fb6379 --- /dev/null +++ b/server.php @@ -0,0 +1,21 @@ + + */ + +$uri = urldecode( + parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) +); + +// This file allows us to emulate Apache's "mod_rewrite" functionality from the +// built-in PHP web server. This provides a convenient way to test a Laravel +// application without having installed a "real" web server software here. +if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) { + return false; +} + +require_once __DIR__.'/public/index.php'; diff --git a/storage/app/.gitignore b/storage/app/.gitignore new file mode 100644 index 0000000..8f4803c --- /dev/null +++ b/storage/app/.gitignore @@ -0,0 +1,3 @@ +* +!public/ +!.gitignore diff --git a/storage/app/public/.gitignore b/storage/app/public/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/app/public/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/.gitignore b/storage/framework/.gitignore new file mode 100644 index 0000000..05c4471 --- /dev/null +++ b/storage/framework/.gitignore @@ -0,0 +1,9 @@ +compiled.php +config.php +down +events.scanned.php +maintenance.php +routes.php +routes.scanned.php +schedule-* +services.json diff --git a/storage/framework/cache/.gitignore b/storage/framework/cache/.gitignore new file mode 100644 index 0000000..01e4a6c --- /dev/null +++ b/storage/framework/cache/.gitignore @@ -0,0 +1,3 @@ +* +!data/ +!.gitignore diff --git a/storage/framework/cache/data/.gitignore b/storage/framework/cache/data/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/cache/data/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/sessions/.gitignore b/storage/framework/sessions/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/sessions/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/testing/.gitignore b/storage/framework/testing/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/testing/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/views/.gitignore b/storage/framework/views/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/views/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/logs/.gitignore b/storage/logs/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/logs/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..57b0959 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,19 @@ +const defaultTheme = require('tailwindcss/defaultTheme'); + +module.exports = { + content: [ + './vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php', + './storage/framework/views/*.php', + './resources/views/**/*.blade.php', + ], + + theme: { + extend: { + fontFamily: { + sans: ['Nunito', ...defaultTheme.fontFamily.sans], + }, + }, + }, + + plugins: [require('@tailwindcss/forms')], +}; diff --git a/tests/CreatesApplication.php b/tests/CreatesApplication.php new file mode 100644 index 0000000..547152f --- /dev/null +++ b/tests/CreatesApplication.php @@ -0,0 +1,22 @@ +make(Kernel::class)->bootstrap(); + + return $app; + } +} diff --git a/tests/Feature/Auth/AuthenticationTest.php b/tests/Feature/Auth/AuthenticationTest.php new file mode 100644 index 0000000..075a4c2 --- /dev/null +++ b/tests/Feature/Auth/AuthenticationTest.php @@ -0,0 +1,45 @@ +get('/login'); + + $response->assertStatus(200); + } + + public function test_users_can_authenticate_using_the_login_screen() + { + $user = User::factory()->create(); + + $response = $this->post('/login', [ + 'email' => $user->email, + 'password' => 'password', + ]); + + $this->assertAuthenticated(); + $response->assertRedirect(RouteServiceProvider::HOME); + } + + public function test_users_can_not_authenticate_with_invalid_password() + { + $user = User::factory()->create(); + + $this->post('/login', [ + 'email' => $user->email, + 'password' => 'wrong-password', + ]); + + $this->assertGuest(); + } +} diff --git a/tests/Feature/Auth/EmailVerificationTest.php b/tests/Feature/Auth/EmailVerificationTest.php new file mode 100644 index 0000000..e61810e --- /dev/null +++ b/tests/Feature/Auth/EmailVerificationTest.php @@ -0,0 +1,65 @@ +create([ + 'email_verified_at' => null, + ]); + + $response = $this->actingAs($user)->get('/verify-email'); + + $response->assertStatus(200); + } + + public function test_email_can_be_verified() + { + $user = User::factory()->create([ + 'email_verified_at' => null, + ]); + + Event::fake(); + + $verificationUrl = URL::temporarySignedRoute( + 'verification.verify', + now()->addMinutes(60), + ['id' => $user->id, 'hash' => sha1($user->email)] + ); + + $response = $this->actingAs($user)->get($verificationUrl); + + Event::assertDispatched(Verified::class); + $this->assertTrue($user->fresh()->hasVerifiedEmail()); + $response->assertRedirect(RouteServiceProvider::HOME.'?verified=1'); + } + + public function test_email_is_not_verified_with_invalid_hash() + { + $user = User::factory()->create([ + 'email_verified_at' => null, + ]); + + $verificationUrl = URL::temporarySignedRoute( + 'verification.verify', + now()->addMinutes(60), + ['id' => $user->id, 'hash' => sha1('wrong-email')] + ); + + $this->actingAs($user)->get($verificationUrl); + + $this->assertFalse($user->fresh()->hasVerifiedEmail()); + } +} diff --git a/tests/Feature/Auth/PasswordConfirmationTest.php b/tests/Feature/Auth/PasswordConfirmationTest.php new file mode 100644 index 0000000..d2072ff --- /dev/null +++ b/tests/Feature/Auth/PasswordConfirmationTest.php @@ -0,0 +1,44 @@ +create(); + + $response = $this->actingAs($user)->get('/confirm-password'); + + $response->assertStatus(200); + } + + public function test_password_can_be_confirmed() + { + $user = User::factory()->create(); + + $response = $this->actingAs($user)->post('/confirm-password', [ + 'password' => 'password', + ]); + + $response->assertRedirect(); + $response->assertSessionHasNoErrors(); + } + + public function test_password_is_not_confirmed_with_invalid_password() + { + $user = User::factory()->create(); + + $response = $this->actingAs($user)->post('/confirm-password', [ + 'password' => 'wrong-password', + ]); + + $response->assertSessionHasErrors(); + } +} diff --git a/tests/Feature/Auth/PasswordResetTest.php b/tests/Feature/Auth/PasswordResetTest.php new file mode 100644 index 0000000..b2cd77a --- /dev/null +++ b/tests/Feature/Auth/PasswordResetTest.php @@ -0,0 +1,71 @@ +get('/forgot-password'); + + $response->assertStatus(200); + } + + public function test_reset_password_link_can_be_requested() + { + Notification::fake(); + + $user = User::factory()->create(); + + $this->post('/forgot-password', ['email' => $user->email]); + + Notification::assertSentTo($user, ResetPassword::class); + } + + public function test_reset_password_screen_can_be_rendered() + { + Notification::fake(); + + $user = User::factory()->create(); + + $this->post('/forgot-password', ['email' => $user->email]); + + Notification::assertSentTo($user, ResetPassword::class, function ($notification) { + $response = $this->get('/reset-password/'.$notification->token); + + $response->assertStatus(200); + + return true; + }); + } + + public function test_password_can_be_reset_with_valid_token() + { + Notification::fake(); + + $user = User::factory()->create(); + + $this->post('/forgot-password', ['email' => $user->email]); + + Notification::assertSentTo($user, ResetPassword::class, function ($notification) use ($user) { + $response = $this->post('/reset-password', [ + 'token' => $notification->token, + 'email' => $user->email, + 'password' => 'password', + 'password_confirmation' => 'password', + ]); + + $response->assertSessionHasNoErrors(); + + return true; + }); + } +} diff --git a/tests/Feature/Auth/RegistrationTest.php b/tests/Feature/Auth/RegistrationTest.php new file mode 100644 index 0000000..317a827 --- /dev/null +++ b/tests/Feature/Auth/RegistrationTest.php @@ -0,0 +1,32 @@ +get('/register'); + + $response->assertStatus(200); + } + + public function test_new_users_can_register() + { + $response = $this->post('/register', [ + 'name' => 'Test User', + 'email' => 'test@example.com', + 'password' => 'password', + 'password_confirmation' => 'password', + ]); + + $this->assertAuthenticated(); + $response->assertRedirect(RouteServiceProvider::HOME); + } +} diff --git a/tests/Feature/AuthenticationTest.php b/tests/Feature/AuthenticationTest.php new file mode 100644 index 0000000..2dbceac --- /dev/null +++ b/tests/Feature/AuthenticationTest.php @@ -0,0 +1,45 @@ +get('/login'); + + $response->assertStatus(200); + } + + public function test_users_can_authenticate_using_the_login_screen() + { + $user = User::factory()->create(); + + $response = $this->post('/login', [ + 'email' => $user->email, + 'password' => 'password', + ]); + + $this->assertAuthenticated(); + $response->assertRedirect(RouteServiceProvider::HOME); + } + + public function test_users_can_not_authenticate_with_invalid_password() + { + $user = User::factory()->create(); + + $this->post('/login', [ + 'email' => $user->email, + 'password' => 'wrong-password', + ]); + + $this->assertGuest(); + } +} diff --git a/tests/Feature/EmailVerificationTest.php b/tests/Feature/EmailVerificationTest.php new file mode 100644 index 0000000..61b5775 --- /dev/null +++ b/tests/Feature/EmailVerificationTest.php @@ -0,0 +1,65 @@ +create([ + 'email_verified_at' => null, + ]); + + $response = $this->actingAs($user)->get('/verify-email'); + + $response->assertStatus(200); + } + + public function test_email_can_be_verified() + { + Event::fake(); + + $user = User::factory()->create([ + 'email_verified_at' => null, + ]); + + $verificationUrl = URL::temporarySignedRoute( + 'verification.verify', + now()->addMinutes(60), + ['id' => $user->id, 'hash' => sha1($user->email)] + ); + + $response = $this->actingAs($user)->get($verificationUrl); + + Event::assertDispatched(Verified::class); + $this->assertTrue($user->fresh()->hasVerifiedEmail()); + $response->assertRedirect(RouteServiceProvider::HOME.'?verified=1'); + } + + public function test_email_is_not_verified_with_invalid_hash() + { + $user = User::factory()->create([ + 'email_verified_at' => null, + ]); + + $verificationUrl = URL::temporarySignedRoute( + 'verification.verify', + now()->addMinutes(60), + ['id' => $user->id, 'hash' => sha1('wrong-email')] + ); + + $this->actingAs($user)->get($verificationUrl); + + $this->assertFalse($user->fresh()->hasVerifiedEmail()); + } +} diff --git a/tests/Feature/ExampleTest.php b/tests/Feature/ExampleTest.php new file mode 100644 index 0000000..cdb5111 --- /dev/null +++ b/tests/Feature/ExampleTest.php @@ -0,0 +1,21 @@ +get('/'); + + $response->assertStatus(200); + } +} diff --git a/tests/Feature/PasswordConfirmationTest.php b/tests/Feature/PasswordConfirmationTest.php new file mode 100644 index 0000000..fdfe630 --- /dev/null +++ b/tests/Feature/PasswordConfirmationTest.php @@ -0,0 +1,44 @@ +create(); + + $response = $this->actingAs($user)->get('/confirm-password'); + + $response->assertStatus(200); + } + + public function test_password_can_be_confirmed() + { + $user = User::factory()->create(); + + $response = $this->actingAs($user)->post('/confirm-password', [ + 'password' => 'password', + ]); + + $response->assertRedirect(); + $response->assertSessionHasNoErrors(); + } + + public function test_password_is_not_confirmed_with_invalid_password() + { + $user = User::factory()->create(); + + $response = $this->actingAs($user)->post('/confirm-password', [ + 'password' => 'wrong-password', + ]); + + $response->assertSessionHasErrors(); + } +} diff --git a/tests/Feature/PasswordResetTest.php b/tests/Feature/PasswordResetTest.php new file mode 100644 index 0000000..8d98149 --- /dev/null +++ b/tests/Feature/PasswordResetTest.php @@ -0,0 +1,71 @@ +get('/forgot-password'); + + $response->assertStatus(200); + } + + public function test_reset_password_link_can_be_requested() + { + Notification::fake(); + + $user = User::factory()->create(); + + $this->post('/forgot-password', ['email' => $user->email]); + + Notification::assertSentTo($user, ResetPassword::class); + } + + public function test_reset_password_screen_can_be_rendered() + { + Notification::fake(); + + $user = User::factory()->create(); + + $this->post('/forgot-password', ['email' => $user->email]); + + Notification::assertSentTo($user, ResetPassword::class, function ($notification) { + $response = $this->get('/reset-password/'.$notification->token); + + $response->assertStatus(200); + + return true; + }); + } + + public function test_password_can_be_reset_with_valid_token() + { + Notification::fake(); + + $user = User::factory()->create(); + + $this->post('/forgot-password', ['email' => $user->email]); + + Notification::assertSentTo($user, ResetPassword::class, function ($notification) use ($user) { + $response = $this->post('/reset-password', [ + 'token' => $notification->token, + 'email' => $user->email, + 'password' => 'password', + 'password_confirmation' => 'password', + ]); + + $response->assertSessionHasNoErrors(); + + return true; + }); + } +} diff --git a/tests/Feature/RegistrationTest.php b/tests/Feature/RegistrationTest.php new file mode 100644 index 0000000..6dd5ff8 --- /dev/null +++ b/tests/Feature/RegistrationTest.php @@ -0,0 +1,32 @@ +get('/register'); + + $response->assertStatus(200); + } + + public function test_new_users_can_register() + { + $response = $this->post('/register', [ + 'name' => 'Test User', + 'email' => 'test@example.com', + 'password' => 'password', + 'password_confirmation' => 'password', + ]); + + $this->assertAuthenticated(); + $response->assertRedirect(RouteServiceProvider::HOME); + } +} diff --git a/tests/TestCase.php b/tests/TestCase.php new file mode 100644 index 0000000..2932d4a --- /dev/null +++ b/tests/TestCase.php @@ -0,0 +1,10 @@ +assertTrue(true); + } +} diff --git a/update1.3to1.4.sql b/update1.3to1.4.sql deleted file mode 100644 index 58ae896..0000000 --- a/update1.3to1.4.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE `servers` - ADD COLUMN `asn` VARCHAR(124) NULL DEFAULT NULL AFTER `notes`; \ No newline at end of file diff --git a/webpack.mix.js b/webpack.mix.js new file mode 100644 index 0000000..c0e99dd --- /dev/null +++ b/webpack.mix.js @@ -0,0 +1,18 @@ +const mix = require('laravel-mix'); + +/* + |-------------------------------------------------------------------------- + | Mix Asset Management + |-------------------------------------------------------------------------- + | + | Mix provides a clean, fluent API for defining some Webpack build steps + | for your Laravel applications. By default, we are compiling the CSS + | file for the application as well as bundling up all the JS files. + | + */ + +mix.js('resources/js/app.js', 'public/js').postCss('resources/css/app.css', 'public/css', [ + require('postcss-import'), + require('tailwindcss'), + require('autoprefixer'), +]); diff --git a/yabs/index.php b/yabs/index.php deleted file mode 100644 index a814366..0000000 --- a/yabs/index.php +++ /dev/null @@ -1 +0,0 @@ - Date: Fri, 18 Feb 2022 15:55:05 +1100 Subject: [PATCH 002/135] composer.json updates composer.json updates --- composer.json | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/composer.json b/composer.json index a7420ae..844d745 100644 --- a/composer.json +++ b/composer.json @@ -1,10 +1,12 @@ { - "name": "laravel/laravel", + "name": "corbpie/myidlers", "type": "project", - "description": "The Laravel Framework.", + "description": "Web app for displaying, organizing and storing information about servers, shared/reseller hosting and domains.", "keywords": [ - "framework", - "laravel" + "myidlers", + "crud", + "vps", + "organization" ], "license": "MIT", "require": { From 8ce691d9305349c34b250268686b49dc1b359584 Mon Sep 17 00:00:00 2001 From: cp6 Date: Fri, 18 Feb 2022 16:05:28 +1100 Subject: [PATCH 003/135] Updated readme Updated readme --- README.md | 83 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 43 insertions(+), 40 deletions(-) diff --git a/README.md b/README.md index acb2923..43ce609 100644 --- a/README.md +++ b/README.md @@ -1,37 +1,44 @@ # My idlers -A web app for displaying, organizing and storing information about servers (VPS), shared hosting and domains. +A web app for displaying, organizing and storing information about servers (VPS), shared & reseller hosting, domains, +DNS and misc services. + +Despite what the name infers this self hosted web app isn't just for storing idling server information. By using +a [YABs](https://github.com/masonr/yet-another-bench-script) output you can get disk & network speed values along with +GeekBench 5 scores to do easier comparing and sorting. ## V2 notes -V2 build is going to be a complete overhaul of My idlers with the project being moved onto the Laravel framework. This will simplyfy development and most of the features from the original build will be present in V2. +V2 build is a complete overhaul of My idlers with the project being moved onto the Laravel framework. This will simplify +development and most of the features from the original build will be present in V2. -[Live demo](https://myidlers.srv3r.com/) +Using Laravel will bring in an API endpoint and the possibilities to show servers publicly with certain parameters +removed. -Despite what the name infers this self hosted web app isn't just for storing idling server information. -By using a [YABs](https://github.com/masonr/yet-another-bench-script) output you can get disk & network speed values along with GeekBench 5 scores to do easier comparing and sorting. +[Old version live demo](https://myidlers.srv3r.com/) -[![Generic badge](https://img.shields.io/badge/version-1.4-blue.svg)](https://shields.io/) +[![Generic badge](https://img.shields.io/badge/version-2.0-blue.svg)](https://shields.io/) [![Generic badge](https://img.shields.io/badge/Laravel-9.0-red.svg)](https://shields.io/) [![Generic badge](https://img.shields.io/badge/PHP-8.1-purple.svg)](https://shields.io/) -## 1.4 changes: -**If you have version 1.3 already installed please run ```update1.3to1.4.sql```** -* Added compare servers section -* Added ASN fetcher -* Added check for min version PHP 7.4 -* Added errors checks for YABs output inserting -* Added improved screenshots to readme -* Updated delete YABs txt file when deleting server data -* Added save YABs to txt file constant -* Updated domain attached to errors when null -* Updated getIpForDomain() call to echo (working now) -* Updated `my_idlers.sql` for changes +## 2.0 changes: + +**Unfortunately you cannot migrate your current install to the new 2.0 version** + +* Laravel framework (version 9) +* Breeze authentication +* API GET for any of the CRUD data +* Labels (titles/desc) system +* Misc services +* DNS CRUD +* Make servers displayable public with config options to hide certain values. +* Vue JS used where possible ## Requires -* PHP 7.4 (compatible with 8.0) -* MySQL +* PHP 8 (compatible with 8.1) +* MySQL server ## Features + * Add servers * Add shared hosting * Add domains @@ -58,40 +65,40 @@ By using a [YABs](https://github.com/masonr/yet-another-bench-script) output you ## Install -* Download [the zip](https://github.com/cp6/my-idlers/archive/main.zip) and unpack the files from ```my-idlers-main/``` into your directory of choice. +* Download [the zip](https://github.com/cp6/my-idlers/archive/main.zip) and unpack the files from ```my-idlers-main/``` + into your directory of choice. * Run `my_idlers.sql` in MySQL. - + * **Only run ```update1.3to1.4.sql``` if you have version 1.3 installed.** - + * Edit ```class.php``` lines ```13-16``` for your MySQL details. * Edit ```class.php``` lines ```8-10``` for card order type. * Make sure you have write access to process and store the YABs outputs. - ## Notes **There is no authentication provided!** - Either use on a local network or put behind authentication. - - **Supporting YABS commands:** - - ```curl -sL yabs.sh | bash``` - +Either use on a local network or put behind authentication. + +**Supporting YABS commands:** + +```curl -sL yabs.sh | bash``` + or ```curl -sL yabs.sh | bash -s -- -r``` -**Make sure YABs output starts at the first line which is:** +**Make sure YABs output starts at the first line which is:** ```# ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #``` - - **A trimmed Bootstrap is used.** Only the used classes and elements are in ```style.css``` - Therefore adding more obscure columns or Bootstrap classes will not initially work as intended until you put this source css into ```style.css```. +**A trimmed Bootstrap is used.** Only the used classes and elements are in ```style.css``` +Therefore adding more obscure columns or Bootstrap classes will not initially work as intended until you put this source +css into ```style.css```. -**Auto complete provider & location are text inputs!** This means that if your choice isn't there then simply type it out - and upon form submission it gets added to the pool to choose from next time. +**Auto complete provider & location are text inputs!** This means that if your choice isn't there then simply type it +out and upon form submission it gets added to the pool to choose from next time. ### Screenshots @@ -117,15 +124,11 @@ or [![Auto complete location](https://cdn.write.corbpie.com/wp-content/uploads/2021/01/my-idlers-self-hosted-server-domain-information-auto-location.gif)](https://cdn.write.corbpie.com/wp-content/uploads/2021/01/my-idlers-self-hosted-server-domain-information-auto-location.gif) - [![Auto complete provider](https://cdn.write.corbpie.com/wp-content/uploads/2021/01/my-idlers-self-hosted-server-domain-information-auto-provider.gif)](https://cdn.write.corbpie.com/wp-content/uploads/2021/01/my-idlers-self-hosted-server-domain-information-auto-provider.gif) - [![Auto complete IP's](https://cdn.write.corbpie.com/wp-content/uploads/2021/01/my-idlers-self-hosted-server-domain-information-ips-from-hostname.gif)](https://cdn.write.corbpie.com/wp-content/uploads/2021/01/my-idlers-self-hosted-server-domain-information-ips-from-hostname.gif) - [![Get up/down status](https://cdn.write.corbpie.com/wp-content/uploads/2021/01/my-idlers-self-hosted-server-domain-information-ping-up-feature.gif)](https://cdn.write.corbpie.com/wp-content/uploads/2021/01/my-idlers-self-hosted-server-domain-information-ping-up-feature.gif) - [![Table scrolling x](https://cdn.write.corbpie.com/wp-content/uploads/2021/01/my-idlers-self-hosted-server-domain-information-table-view.gif)](https://cdn.write.corbpie.com/wp-content/uploads/2021/01/my-idlers-self-hosted-server-domain-information-table-view.gif) From d34223b5cdeceeff4b55f49ef62bfce37496e703 Mon Sep 17 00:00:00 2001 From: cp6 Date: Fri, 18 Feb 2022 23:56:41 +1100 Subject: [PATCH 004/135] Removed debugging Removed debugging --- app/Http/Controllers/ProvidersController.php | 1 - 1 file changed, 1 deletion(-) diff --git a/app/Http/Controllers/ProvidersController.php b/app/Http/Controllers/ProvidersController.php index 66c2dfe..d253b17 100644 --- a/app/Http/Controllers/ProvidersController.php +++ b/app/Http/Controllers/ProvidersController.php @@ -55,7 +55,6 @@ class ProvidersController extends Controller }) ->rawColumns(['action']) ->make(true); - dd($dt); } } From 39ff408ddd0488bc7a0e9ea404be012b840c48e4 Mon Sep 17 00:00:00 2001 From: cp6 Date: Fri, 18 Feb 2022 23:56:51 +1100 Subject: [PATCH 005/135] updated readme for v2 updated readme for v2 --- README.md | 108 +++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 79 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index 43ce609..ec72ed0 100644 --- a/README.md +++ b/README.md @@ -17,20 +17,22 @@ removed. [Old version live demo](https://myidlers.srv3r.com/) -[![Generic badge](https://img.shields.io/badge/version-2.0-blue.svg)](https://shields.io/) [![Generic badge](https://img.shields.io/badge/Laravel-9.0-red.svg)](https://shields.io/) [![Generic badge](https://img.shields.io/badge/PHP-8.1-purple.svg)](https://shields.io/) +[![Generic badge](https://img.shields.io/badge/version-2.0-blue.svg)](https://shields.io/) [![Generic badge](https://img.shields.io/badge/Laravel-9.0-red.svg)](https://shields.io/) [![Generic badge](https://img.shields.io/badge/PHP-8.1-purple.svg)](https://shields.io/) [![Generic badge](https://img.shields.io/badge/Bootstrap-5.1-pink.svg)](https://shields.io/) ## 2.0 changes: **Unfortunately you cannot migrate your current install to the new 2.0 version** -* Laravel framework (version 9) -* Breeze authentication -* API GET for any of the CRUD data -* Labels (titles/desc) system -* Misc services -* DNS CRUD +* Laravel framework (version 9). +* Breeze authentication. +* API GET for any of the CRUD data. +* Labels (titles/desc) system. +* Misc services. +* DNS CRUD. +* Reseller hosting. * Make servers displayable public with config options to hide certain values. -* Vue JS used where possible +* Vue JS used where possible. +* Datatables used on large tables (Locations, labels, and providers). ## Requires @@ -42,8 +44,6 @@ removed. * Add servers * Add shared hosting * Add domains -* [Auto suggest locations](https://cdn.write.corbpie.com/wp-content/uploads/2021/01/my-idlers-self-hosted-server-domain-information-auto-location.gif) -* [Auto suggest providers](https://cdn.write.corbpie.com/wp-content/uploads/2021/01/my-idlers-self-hosted-server-domain-information-auto-provider.gif) * [Auto get IP's from hostname](https://cdn.write.corbpie.com/wp-content/uploads/2021/01/my-idlers-self-hosted-server-domain-information-ips-from-hostname.gif) * [Check up/down status](https://cdn.write.corbpie.com/wp-content/uploads/2021/01/my-idlers-self-hosted-server-domain-information-ping-up-feature.gif) * Get YABs data from output @@ -54,32 +54,87 @@ removed. * Multi currency compatibility * Multi payment-term compatibility * Pre-defined operating systems -* Assign tags * Assign labels * Assign server type (KVM, OVZ, LXC & dedi) * Easy to edit values * Order by table -* Search items * Tally/stats card -* One-page design ## Install -* Download [the zip](https://github.com/cp6/my-idlers/archive/main.zip) and unpack the files from ```my-idlers-main/``` - into your directory of choice. -* Run `my_idlers.sql` in MySQL. +* git clone https://github.com/cp6/my-idlers.git into your directory of choice +* Run `composer install` -* **Only run ```update1.3to1.4.sql``` if you have version 1.3 installed.** +* Run `cp .env.example .env` +* Edit (If needed) MySQL details in .env +* Run `php artisan key:generate` +* Run `php artisan make:database my_idlers` to create database +* Run `php artisan migrate:fresh --seed` to create tables and seed data +* Run `php artisan serve` + +## API endpoints + +For GET requests the header must have `Accept: application/json` and your API token (found at `/account`) + +`Authorization : Bearer API_TOKEN_HERE` + +All API requests must be appended with `api/` e.g `mydomain.com/api/servers/gYk8J0a7` + +**GET request:** + +`dns/` + +`dns/{id}` + +`domains/` + +`domains/{id}` + +`servers` + +`servers/{id}` + +`labels/` + +`labels/{id}` + +`locations/` + +`locations/{id}` + +`misc/` + +`misc/{id}` + +`networkSpeeds/` + +`networkSpeeds/{id}` + +`pricing/` + +`pricing/{id}` + +`providers/` + +`providers/{id}` + +`reseller/` + +`reseller/{id}` + +`settings/` + +`shared/` + +`shared/{id}` -* Edit ```class.php``` lines ```13-16``` for your MySQL details. -* Edit ```class.php``` lines ```8-10``` for card order type. -* Make sure you have write access to process and store the YABs outputs. ## Notes -**There is no authentication provided!** -Either use on a local network or put behind authentication. +**Public viewable listings** + +If enabled the public viewable table for your server listings is at `/servers/public` **Supporting YABS commands:** @@ -93,14 +148,9 @@ or ```# ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #``` -**A trimmed Bootstrap is used.** Only the used classes and elements are in ```style.css``` -Therefore adding more obscure columns or Bootstrap classes will not initially work as intended until you put this source -css into ```style.css```. +### Screenshots for v2 -**Auto complete provider & location are text inputs!** This means that if your choice isn't there then simply type it -out and upon form submission it gets added to the pool to choose from next time. - -### Screenshots +### Screenshots for versions before v2 [![My idlers screenshot1](https://cdn.write.corbpie.com/wp-content/uploads/2021/02/my-idlers-self-hosted-server-info-cards.jpg)](https://cdn.write.corbpie.com/wp-content/uploads/2021/02/my-idlers-self-hosted-server-info-cards.jpg) From d7dd4d38950f7eb15fa8dba635260dfff19f1a4c Mon Sep 17 00:00:00 2001 From: cp6 Date: Sat, 19 Feb 2022 00:14:52 +1100 Subject: [PATCH 006/135] Added screenshots Added screenshots --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index ec72ed0..682874a 100644 --- a/README.md +++ b/README.md @@ -150,6 +150,11 @@ or ### Screenshots for v2 +[![My idlers screenshot1](https://cdn.write.corbpie.com/wp-content/uploads/2022/02/My-idlers-home-page-v2.png)](https://cdn.write.corbpie.com/wp-content/uploads/2022/02/My-idlers-home-page-v2.png) + +[![My idlers screenshot1](https://cdn.write.corbpie.com/wp-content/uploads/2022/02/My-idlers-locations-page-v2.png)](https://cdn.write.corbpie.com/wp-content/uploads/2022/02/My-idlers-locations-page-v2.png) + + ### Screenshots for versions before v2 [![My idlers screenshot1](https://cdn.write.corbpie.com/wp-content/uploads/2021/02/my-idlers-self-hosted-server-info-cards.jpg)](https://cdn.write.corbpie.com/wp-content/uploads/2021/02/my-idlers-self-hosted-server-info-cards.jpg) From 8113ee4e9da687a5a2fd667c07a75295593ccd03 Mon Sep 17 00:00:00 2001 From: cp6 Date: Sat, 19 Feb 2022 00:25:03 +1100 Subject: [PATCH 007/135] Updated owned since to be nullable in misc_services table Updated owned since to be nullable in misc_services table --- database/migrations/2022_02_11_022150_create_miscs_table.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/database/migrations/2022_02_11_022150_create_miscs_table.php b/database/migrations/2022_02_11_022150_create_miscs_table.php index 38fea19..7d05f5e 100644 --- a/database/migrations/2022_02_11_022150_create_miscs_table.php +++ b/database/migrations/2022_02_11_022150_create_miscs_table.php @@ -17,7 +17,7 @@ class CreateMiscsTable extends Migration $table->char('id', 8)->unique(); $table->string('name'); $table->tinyInteger('active')->default(1); - $table->date('owned_since'); + $table->date('owned_since')->nullable(); $table->timestamps(); }); } From 8a4166d91cdd99a5c00b2bf4e6bed4304587a61a Mon Sep 17 00:00:00 2001 From: cp6 Date: Sat, 19 Feb 2022 00:26:14 +1100 Subject: [PATCH 008/135] Updated servers seeder location ids Updated servers seeder location ids --- database/seeders/ServersSeeder.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/database/seeders/ServersSeeder.php b/database/seeders/ServersSeeder.php index d1266b9..edf0f9e 100644 --- a/database/seeders/ServersSeeder.php +++ b/database/seeders/ServersSeeder.php @@ -25,7 +25,7 @@ class ServersSeeder extends Seeder "hostname" => "la.node.ai", "os_id" => 20, "provider_id" => 90, - "location_id" => 34, + "location_id" => 35, "bandwidth" => 1000, "ipv4" => '127.0.0.1', "cpu" => 1, @@ -44,7 +44,7 @@ class ServersSeeder extends Seeder "hostname" => "sg.node.ai", "os_id" => 20, "provider_id" => 90, - "location_id" => 70, + "location_id" => 71, "bandwidth" => 2000, "ipv4" => '127.0.0.1', "cpu" => 1, From 74ce12dc3e12d36f5a73e414ff49228e4ff144de Mon Sep 17 00:00:00 2001 From: cp6 Date: Sat, 19 Feb 2022 00:27:07 +1100 Subject: [PATCH 009/135] Removed commented out code from domains seeder Removed commented out code from domains seeder --- database/seeders/DomainsSeeder.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/database/seeders/DomainsSeeder.php b/database/seeders/DomainsSeeder.php index c55eeec..a2aedcb 100644 --- a/database/seeders/DomainsSeeder.php +++ b/database/seeders/DomainsSeeder.php @@ -25,16 +25,14 @@ class DomainsSeeder extends Seeder "domain" => "node", "extension" => "ai", "provider_id" => 59, - "owned_since" => '2013-01-12', - //"next_due_date" => Carbon::now()->addDays(30)->format('Y-m-d') + "owned_since" => '2013-01-12' ], [ "id" => $id2, "domain" => "cpu", "extension" => "club", "provider_id" => 59, - "owned_since" => '2016-04-25', - //"next_due_date" => Carbon::now()->addDays(30)->format('Y-m-d') + "owned_since" => '2016-04-25' ] ]; From 61dd766e0c82d5da703fa27c652ff51510fca93a Mon Sep 17 00:00:00 2001 From: cp6 Date: Sat, 19 Feb 2022 00:32:29 +1100 Subject: [PATCH 010/135] Removed test API route Removed test API route --- routes/api.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/routes/api.php b/routes/api.php index 27f2e07..85f771b 100644 --- a/routes/api.php +++ b/routes/api.php @@ -19,11 +19,6 @@ Route::middleware('auth:api')->get('/user', function (Request $request) { return $request->user(); }); - -Route::middleware('auth:api')->get('/test', function (Request $request) { - return new JsonResponse(['message' => 'Hello world']); -}); - Route::middleware('auth:api')->get('dns/', 'App\Http\Controllers\ApiController@getAllDns'); Route::middleware('auth:api')->get('dns/{id}', 'App\Http\Controllers\ApiController@getDns'); From 7f7a579f27a4be33a82b53b206b3283086b61866 Mon Sep 17 00:00:00 2001 From: cp6 Date: Sat, 19 Feb 2022 00:39:24 +1100 Subject: [PATCH 011/135] Removed defunct providers/list route Removed defunct providers/list route --- routes/web.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/routes/web.php b/routes/web.php index 2e4edb1..0a2ca25 100644 --- a/routes/web.php +++ b/routes/web.php @@ -48,9 +48,6 @@ Route::resource('misc', MiscController::class)->middleware(['auth']); Route::resource('providers', ProvidersController::class)->middleware(['auth']); -//Test -Route::get('providers/list', [ProvidersController::class, 'getProviders'])->name('list-providers'); - Route::resource('reseller', ResellerController::class)->middleware(['auth']); Route::get('servers/public', 'App\Http\Controllers\ServerController@showServersPublic')->name('servers/public'); From 30e4adcb1069f1b030e74361b9d2bb4040564964 Mon Sep 17 00:00:00 2001 From: cp6 Date: Sat, 19 Feb 2022 11:33:04 +1100 Subject: [PATCH 012/135] Added location, provider and os strings to servers API Added location, provider and os strings to servers API --- app/Http/Controllers/ApiController.php | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/ApiController.php b/app/Http/Controllers/ApiController.php index 893358b..cc7326b 100644 --- a/app/Http/Controllers/ApiController.php +++ b/app/Http/Controllers/ApiController.php @@ -18,7 +18,10 @@ class ApiController extends Controller { $servers = DB::table('servers as s') ->Join('pricings as p', 's.id', '=', 'p.service_id') - ->get(['s.*', 'p.id as price_id', 'p.currency', 'p.price', 'p.term', 'p.as_usd', 'p.usd_per_month', 'p.next_due_date'])->toJson(JSON_PRETTY_PRINT); + ->join('providers as pr', 's.provider_id', '=', 'pr.id') + ->join('locations as l', 's.location_id', '=', 'l.id') + ->join('os as o', 's.os_id', '=', 'o.id') + ->get(['s.*', 'p.id as price_id', 'p.currency', 'p.price', 'p.term', 'p.as_usd', 'p.usd_per_month', 'p.next_due_date', 'pr.name as provider', 'l.name as location','o.name as os'])->toJson(JSON_PRETTY_PRINT); return response($servers, 200); } @@ -27,8 +30,11 @@ class ApiController extends Controller { $server = DB::table('servers as s') ->Join('pricings as p', 's.id', '=', 'p.service_id') + ->join('providers as pr', 's.provider_id', '=', 'pr.id') + ->join('locations as l', 's.location_id', '=', 'l.id') + ->join('os as o', 's.os_id', '=', 'o.id') ->where('s.id', '=', $id) - ->get(['s.*', 'p.id as price_id', 'p.currency', 'p.price', 'p.term', 'p.as_usd', 'p.usd_per_month', 'p.next_due_date']); + ->get(['s.*', 'p.id as price_id', 'p.currency', 'p.price', 'p.term', 'p.as_usd', 'p.usd_per_month', 'p.next_due_date', 'pr.name as provider', 'l.name as location','o.name as os']); $yabs = DB::table('yabs') ->where('yabs.server_id', '=', $id) From e4c961ebb9e954ea6cc9d662a2af3897408403cd Mon Sep 17 00:00:00 2001 From: cp6 Date: Sat, 19 Feb 2022 23:34:37 +1100 Subject: [PATCH 013/135] Updated servers show controller and blade view Updated servers show controller and blade view --- app/Http/Controllers/ServerController.php | 10 +- resources/views/servers/show.blade.php | 267 +++++++++++----------- 2 files changed, 141 insertions(+), 136 deletions(-) diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php index 8c6796c..bef50af 100644 --- a/app/Http/Controllers/ServerController.php +++ b/app/Http/Controllers/ServerController.php @@ -143,15 +143,21 @@ class ServerController extends Controller ->join('providers as p', 's.provider_id', '=', 'p.id') ->join('locations as l', 's.location_id', '=', 'l.id') ->join('os as o', 's.os_id', '=', 'o.id') + ->Leftjoin('yabs as y', 's.id', '=', 'y.server_id') + ->Leftjoin('disk_speed as ds', 'y.id', '=', 'ds.id') ->where('s.id', '=', $server->id) - ->get(['s.*', 'p.name as provider_name', 'l.name as location', 'o.name as os_name', 'pr.*']); + ->get(['s.*', 'p.name as provider', 'l.name as location', 'o.name as os_name', 'pr.*', 'y.*', 'ds.*']); + + $network_speeds = json_decode(DB::table('network_speed') + ->where('network_speed.server_id', '=', $server->id) + ->get(),true); $labels = DB::table('labels_assigned as l') ->join('labels', 'l.label_id', '=', 'labels.id') ->where('l.service_id', '=', $server->id) ->get(['labels.label']); - return view('servers.show', compact(['server', 'server_extras', 'labels'])); + return view('servers.show', compact(['server', 'server_extras', 'network_speeds', 'labels'])); } public function edit(Server $server) diff --git a/resources/views/servers/show.blade.php b/resources/views/servers/show.blade.php index 4523e54..93dd35d 100644 --- a/resources/views/servers/show.blade.php +++ b/resources/views/servers/show.blade.php @@ -4,178 +4,177 @@ {{ __('Server details') }}
    -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Labels - @foreach($labels as $label) - @if($loop->last) - {{$label->label}} - @else - {{$label->label}}, - @endif - @endforeach -
    Id{{ $server->id }}
    Name{{ $server->hostname }}
    OS{{ $server->osIdAsString((string)$server->os_id) }}
    Location{{ $server_extras[0]->location }}
    Provider{{ $server_extras[0]->provider_name }}
    Ipv4{{ $server->ipv4 }}
    Ipv6{{ $server->ipv6 }}
    Price{{ $server_extras[0]->price }} {{ $server_extras[0]->currency }}
    Term{{ $server_extras[0]->term }}
    NS1{{ $server->ns1 }}
    NS2{{ $server->ns2 }}
    Server type{{ $server->serviceServerType($server->server_type) }}
    Owned since - @if(!is_null($server->owned_since)) - {{ date_format(new DateTime($server->owned_since), 'jS F Y') }} - @endif -
    Next due date - @if(!is_null($server_extras[0]->next_due_date)) - {{ date_format(new DateTime($server_extras[0]->next_due_date), 'jS F Y') }} - @endif -
    Created on{{ date_format($server->created_at, 'jS F Y') }}
    Last updated{{ date_format($server->updated_at, 'jS F Y') }}
    -
    -
    -
    - +
    + + Go back + + + Edit + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @foreach($network_speeds as $ns) + + + + + @endforeach + +
    GB5 Single/Multi + {{$server_extras[0]->gb5_single}} / {{$server_extras[0]->gb5_multi}} +
    CPU{{$server_extras[0]->cpu}}
    AES{{ ($server_extras[0]->aes === 1) ? 'Yes' : 'No' }}
    VM{{ ($server_extras[0]->vm === 1) ? 'Yes' : 'No' }}
    Disk 4k{{$server_extras[0]->d_4k}} {{$server_extras[0]->d_4k_type}}
    Disk 64k{{$server_extras[0]->d_64k}} {{$server_extras[0]->d_64k_type}}
    Disk 512k{{$server_extras[0]->d_512k}} {{$server_extras[0]->d_512k_type}}
    Disk 1m{{$server_extras[0]->d_1m}} {{$server_extras[0]->d_1m_type}}
    Network speed (s/r)
    {{$ns['location']}}{{$ns['send']}} {{$ns['send_type']}} {{$ns['receive']}} {{$ns['receive_type']}}
    - - Go back - - - Edit -
    -
    + @if(Session::has('timer_version_footer') && Session::get('timer_version_footer') === 1)

    Built on Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }} From d5b5d46bd6dc9cc05548f481bb1e178d801d2286 Mon Sep 17 00:00:00 2001 From: cp6 Date: Sat, 19 Feb 2022 23:34:52 +1100 Subject: [PATCH 014/135] Added ext-json to composer.json Added ext-json to composer.json --- composer.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index 844d745..35a9aa5 100644 --- a/composer.json +++ b/composer.json @@ -16,7 +16,8 @@ "laravel/framework": "^9.0", "laravel/tinker": "^2.5", "laravel/ui": "^3.4", - "yajra/laravel-datatables-oracle": "~9.0" + "yajra/laravel-datatables-oracle": "~9.0", + "ext-json": "*" }, "require-dev": { "fakerphp/faker": "^1.9.1", @@ -37,7 +38,7 @@ "dont-discover": [] } }, - "files" : [ + "files": [ "app/Process.php" ], "autoload": { From 2abdf25c45d88e892e089f388b198d67d45c44fa Mon Sep 17 00:00:00 2001 From: cp6 Date: Sat, 19 Feb 2022 23:42:59 +1100 Subject: [PATCH 015/135] Created OS route and controller Created OS route and controller --- app/Http/Controllers/OsController.php | 44 +++++++++++++++++++++++++++ routes/web.php | 2 ++ 2 files changed, 46 insertions(+) create mode 100644 app/Http/Controllers/OsController.php diff --git a/app/Http/Controllers/OsController.php b/app/Http/Controllers/OsController.php new file mode 100644 index 0000000..f03ef2a --- /dev/null +++ b/app/Http/Controllers/OsController.php @@ -0,0 +1,44 @@ +validate([ + 'name' => 'required|min:2' + ]); + + OS::create([ + 'name' => $request->os_name + ]); + + return redirect()->route('os.index') + ->with('success', 'OS Created Successfully.'); + } + + public function destroy(OS $OS) + { + $items = OS::find($OS->id); + + $items->delete(); + + return redirect()->route('os.index') + ->with('success', 'OS was deleted Successfully.'); + } +} diff --git a/routes/web.php b/routes/web.php index 0a2ca25..ce50672 100644 --- a/routes/web.php +++ b/routes/web.php @@ -46,6 +46,8 @@ Route::resource('locations', LocationsController::class)->middleware(['auth']); Route::resource('misc', MiscController::class)->middleware(['auth']); +Route::resource('os', OsController::class)->middleware(['auth']); + Route::resource('providers', ProvidersController::class)->middleware(['auth']); Route::resource('reseller', ResellerController::class)->middleware(['auth']); From cb471bd71a26a7ab7b02b0d22468eabc7e5f2444 Mon Sep 17 00:00:00 2001 From: cp6 Date: Sat, 19 Feb 2022 23:44:06 +1100 Subject: [PATCH 016/135] Updated use OS controller in routes file Updated use OS controller in routes file --- routes/web.php | 1 + 1 file changed, 1 insertion(+) diff --git a/routes/web.php b/routes/web.php index ce50672..2e549c1 100644 --- a/routes/web.php +++ b/routes/web.php @@ -6,6 +6,7 @@ use App\Http\Controllers\DomainsController; use App\Http\Controllers\LabelsController; use App\Http\Controllers\LocationsController; use App\Http\Controllers\MiscController; +use App\Http\Controllers\OsController; use App\Http\Controllers\ProvidersController; use App\Http\Controllers\ResellerController; use App\Http\Controllers\ServerController; From 1000148e863e833f4bcad4f25c0069020beb8b82 Mon Sep 17 00:00:00 2001 From: cp6 Date: Sat, 19 Feb 2022 23:57:06 +1100 Subject: [PATCH 017/135] Added OS controller views Added OS controller views --- resources/views/os/create.blade.php | 36 +++++++++++++++ resources/views/os/index.blade.php | 72 +++++++++++++++++++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 resources/views/os/create.blade.php create mode 100644 resources/views/os/index.blade.php diff --git a/resources/views/os/create.blade.php b/resources/views/os/create.blade.php new file mode 100644 index 0000000..2acde16 --- /dev/null +++ b/resources/views/os/create.blade.php @@ -0,0 +1,36 @@ +@section('title') {{'Insert operating system'}} @endsection + + + {{ __('Insert a new OS') }} + +

    + +

    Operating system name

    + + {{ route('os.index') }} + Go back + + +
    + @csrf +
    +
    +
    +
    OS
    + + @error('os') {{ $message }} + @enderror +
    +
    +
    +
    +
    + Create Operating system +
    +
    +
    +
    +
    + diff --git a/resources/views/os/index.blade.php b/resources/views/os/index.blade.php new file mode 100644 index 0000000..eea374d --- /dev/null +++ b/resources/views/os/index.blade.php @@ -0,0 +1,72 @@ +@section('title') {{'Operating systems'}} @endsection +@section('css_links') + +@endsection +@section('style') + +@endsection + + + {{ __('Operating systems') }} + +
    + + + Add an OS + + + + + + + + + + @if(!empty($os)) + @foreach($os as $o) + + + + + @endforeach + @else + + + + @endif + +
    Operating systemActions
    {{ $o->name }} +
    + +
    +
    No Operating systems found.
    +
    + @if(Session::has('timer_version_footer') && Session::get('timer_version_footer') === 1) +

    + Built on Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }} + ) +

    + @endif +
    + + + + os + +
    From 61c8fd4e265b98301420c5986c4a97f6a6345712 Mon Sep 17 00:00:00 2001 From: cp6 Date: Sat, 19 Feb 2022 23:57:19 +1100 Subject: [PATCH 018/135] Added timestamps to OS table Added timestamps to OS table --- database/migrations/2022_02_01_031629_create_os_table.php | 1 + 1 file changed, 1 insertion(+) diff --git a/database/migrations/2022_02_01_031629_create_os_table.php b/database/migrations/2022_02_01_031629_create_os_table.php index 68d544f..0e92443 100644 --- a/database/migrations/2022_02_01_031629_create_os_table.php +++ b/database/migrations/2022_02_01_031629_create_os_table.php @@ -16,6 +16,7 @@ class CreateOsTable extends Migration Schema::create('os', function (Blueprint $table) { $table->id()->autoIncrement(); $table->string('name')->unique(); + $table->timestamps(); }); } From 702eccf3d01b28c14921f98100dca6012e38f5e4 Mon Sep 17 00:00:00 2001 From: cp6 Date: Sat, 19 Feb 2022 23:57:29 +1100 Subject: [PATCH 019/135] Added name fillable for OS Added name fillable for OS --- app/Models/OS.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/Models/OS.php b/app/Models/OS.php index 2dd3218..6e28104 100644 --- a/app/Models/OS.php +++ b/app/Models/OS.php @@ -9,5 +9,7 @@ class OS extends Model { use HasFactory; + protected $fillable = ['name']; + protected $table = 'os'; } From adb589c60a5fa50e48405dd99c07b71b39f7ffd2 Mon Sep 17 00:00:00 2001 From: cp6 Date: Sat, 19 Feb 2022 23:57:48 +1100 Subject: [PATCH 020/135] Updated OsController Updated OsController --- app/Http/Controllers/OsController.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/OsController.php b/app/Http/Controllers/OsController.php index f03ef2a..33bebeb 100644 --- a/app/Http/Controllers/OsController.php +++ b/app/Http/Controllers/OsController.php @@ -21,7 +21,7 @@ class OsController extends Controller public function store(Request $request) { $request->validate([ - 'name' => 'required|min:2' + 'os_name' => 'required|min:2' ]); OS::create([ @@ -32,9 +32,9 @@ class OsController extends Controller ->with('success', 'OS Created Successfully.'); } - public function destroy(OS $OS) + public function destroy(OS $o) { - $items = OS::find($OS->id); + $items = OS::find($o->id); $items->delete(); From 783f95ca7ea4c30ac18e162e6dec76bb6eee8558 Mon Sep 17 00:00:00 2001 From: cp6 Date: Sun, 20 Feb 2022 00:06:32 +1100 Subject: [PATCH 021/135] Update YABs cpu to be cpu_model Update YABs cpu to be cpu_model --- app/Http/Controllers/YabsController.php | 2 +- app/Models/Yabs.php | 2 +- database/migrations/2022_02_05_104355_create_yabs_table.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/YabsController.php b/app/Http/Controllers/YabsController.php index 8d11b39..e81611e 100644 --- a/app/Http/Controllers/YabsController.php +++ b/app/Http/Controllers/YabsController.php @@ -52,7 +52,7 @@ class YabsController extends Controller 'output_date' => $yabs['output_date'], 'cpu_cores' => $yabs['cpu_cores'], 'cpu_freq' => $yabs['cpu_freq'], - 'cpu' => $yabs['cpu'], + 'cpu_model' => $yabs['cpu'], 'ram' => $yabs['ram'], 'ram_type' => $yabs['ram_type'], 'ram_mb' => $yabs['ram_mb'], diff --git a/app/Models/Yabs.php b/app/Models/Yabs.php index b627d47..2c5e8e2 100644 --- a/app/Models/Yabs.php +++ b/app/Models/Yabs.php @@ -13,5 +13,5 @@ class Yabs extends Model protected $table = 'yabs'; - protected $fillable = ['id', 'server_id', 'has_ipv6', 'aes', 'vm', 'output_date', 'cpu_cores', 'cpu_freq', 'cpu', 'ram', 'ram_type', 'ram_mb', 'disk', 'disk_type', 'disk_gb', 'gb5_single', 'gb5_multi', 'gb5_id', '4k', '4k_type', '4k_as_mbps', '64k', '64k_type', '64k_as_mbps', '512k', '512k_type', '512k_as_mbps', '1m', '1m_type', '1m_as_mbps', 'location', 'send', 'send_type', 'send_as_mbps', 'receive', 'receive_type', 'receive_as_mbps']; + protected $fillable = ['id', 'server_id', 'has_ipv6', 'aes', 'vm', 'output_date', 'cpu_cores', 'cpu_freq', 'cpu_model', 'ram', 'ram_type', 'ram_mb', 'disk', 'disk_type', 'disk_gb', 'gb5_single', 'gb5_multi', 'gb5_id', '4k', '4k_type', '4k_as_mbps', '64k', '64k_type', '64k_as_mbps', '512k', '512k_type', '512k_as_mbps', '1m', '1m_type', '1m_as_mbps', 'location', 'send', 'send_type', 'send_as_mbps', 'receive', 'receive_type', 'receive_as_mbps']; } diff --git a/database/migrations/2022_02_05_104355_create_yabs_table.php b/database/migrations/2022_02_05_104355_create_yabs_table.php index 991d26b..e51dc21 100644 --- a/database/migrations/2022_02_05_104355_create_yabs_table.php +++ b/database/migrations/2022_02_05_104355_create_yabs_table.php @@ -21,7 +21,7 @@ class CreateYabsTable extends Migration $table->dateTime('output_date'); $table->tinyInteger('cpu_cores'); $table->float('cpu_freq'); - $table->string('cpu'); + $table->string('cpu_model'); $table->float('ram'); $table->char('ram_type', 2); $table->float('ram_mb'); From 70916abc05ea5099da4e8350dedbf540f07aa699 Mon Sep 17 00:00:00 2001 From: cp6 Date: Sun, 20 Feb 2022 00:07:03 +1100 Subject: [PATCH 022/135] Updated views to reflect cpu_model Updated views to reflect cpu_model --- resources/views/yabs/index.blade.php | 4 ++-- resources/views/yabs/show.blade.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/views/yabs/index.blade.php b/resources/views/yabs/index.blade.php index 92f7383..17c2e4f 100644 --- a/resources/views/yabs/index.blade.php +++ b/resources/views/yabs/index.blade.php @@ -36,8 +36,8 @@ @foreach($yabs as $yab) {{ $yab->hostname }} - {{ $yab->cpu_cores }} - {{ $yab->cpu_freq }}Ghz + {{ $yab->cpu_cores }} + {{ $yab->cpu_freq }}Ghz {{ $yab->ram }}{{ $yab->ram_type }} {{ $yab->disk }}{{ $yab->disk_type }} {{ $yab->gb5_single }} diff --git a/resources/views/yabs/show.blade.php b/resources/views/yabs/show.blade.php index 9b0704c..4e37b2b 100644 --- a/resources/views/yabs/show.blade.php +++ b/resources/views/yabs/show.blade.php @@ -24,7 +24,7 @@ CPU type - {{ $yab[0]->cpu }} + {{ $yab[0]->cpu_model }} Ram From 8c2ae4882e3b0f6c76961ebf6b30538df07a81ec Mon Sep 17 00:00:00 2001 From: cp6 Date: Sun, 20 Feb 2022 00:07:35 +1100 Subject: [PATCH 023/135] Updated servers show blade to hide empty data on no yabs Updated servers show blade to hide empty data on no yabs --- resources/views/servers/show.blade.php | 105 ++++++++++++++----------- 1 file changed, 57 insertions(+), 48 deletions(-) diff --git a/resources/views/servers/show.blade.php b/resources/views/servers/show.blade.php index 93dd35d..d89fc82 100644 --- a/resources/views/servers/show.blade.php +++ b/resources/views/servers/show.blade.php @@ -60,7 +60,9 @@ CPU - {{ $server_extras[0]->cpu_cores }} @ {{ $server_extras[0]->cpu_freq }} + {{ $server_extras[0]->cpu }} @if($server_extras[0]->has_yabs) + @ {{ $server_extras[0]->cpu_freq }} + @endif RAM @@ -123,55 +125,62 @@
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @foreach($network_speeds as $ns) + @if($server_extras[0]->has_yabs) +
    +
    GB5 Single/Multi - {{$server_extras[0]->gb5_single}} / {{$server_extras[0]->gb5_multi}} -
    CPU{{$server_extras[0]->cpu}}
    AES{{ ($server_extras[0]->aes === 1) ? 'Yes' : 'No' }}
    VM{{ ($server_extras[0]->vm === 1) ? 'Yes' : 'No' }}
    Disk 4k{{$server_extras[0]->d_4k}} {{$server_extras[0]->d_4k_type}}
    Disk 64k{{$server_extras[0]->d_64k}} {{$server_extras[0]->d_64k_type}}
    Disk 512k{{$server_extras[0]->d_512k}} {{$server_extras[0]->d_512k_type}}
    Disk 1m{{$server_extras[0]->d_1m}} {{$server_extras[0]->d_1m_type}}
    Network speed (s/r)
    + - - + + - @endforeach - -
    {{$ns['location']}}{{$ns['send']}} {{$ns['send_type']}} {{$ns['receive']}} {{$ns['receive_type']}}GB5 Single/Multi + {{$server_extras[0]->gb5_single}} / {{$server_extras[0]->gb5_multi}} +
    -
    + + CPU + {{$server_extras[0]->cpu_model}} + + + AES + {{ ($server_extras[0]->aes === 1) ? 'Yes' : 'No' }} + + + VM + {{ ($server_extras[0]->vm === 1) ? 'Yes' : 'No' }} + + + Disk 4k + {{$server_extras[0]->d_4k}} {{$server_extras[0]->d_4k_type}} + + + Disk 64k + {{$server_extras[0]->d_64k}} {{$server_extras[0]->d_64k_type}} + + + + Disk 512k + {{$server_extras[0]->d_512k}} {{$server_extras[0]->d_512k_type}} + + + + Disk 1m + {{$server_extras[0]->d_1m}} {{$server_extras[0]->d_1m_type}} + + + Network speed (s/r) + + @foreach($network_speeds as $ns) + + {{$ns['location']}} + {{$ns['send']}} {{$ns['send_type']}} {{$ns['receive']}} + {{$ns['receive_type']}} + + @endforeach + + +
    + @else +

    Please add a YABs to see Geekbench, disk and network speeds

    + @endif
    From 333c55e0f94052910e3da07eacf731dacff1d2d8 Mon Sep 17 00:00:00 2001 From: cp6 Date: Sun, 20 Feb 2022 00:08:50 +1100 Subject: [PATCH 024/135] Added OS link to navigation bar Added OS link to navigation bar --- resources/views/layouts/navigation.blade.php | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/views/layouts/navigation.blade.php b/resources/views/layouts/navigation.blade.php index d749216..5aaebb6 100644 --- a/resources/views/layouts/navigation.blade.php +++ b/resources/views/layouts/navigation.blade.php @@ -33,6 +33,7 @@
    From 35492de070dad55ecd73d00ff9d7304f714c79c5 Mon Sep 17 00:00:00 2001 From: cp6 Date: Sun, 20 Feb 2022 15:54:39 +1100 Subject: [PATCH 031/135] Updated resellers show blade Updated resellers show blade --- resources/views/reseller/show.blade.php | 222 ++++++++++++------------ 1 file changed, 115 insertions(+), 107 deletions(-) diff --git a/resources/views/reseller/show.blade.php b/resources/views/reseller/show.blade.php index 2c3ef5e..30430de 100644 --- a/resources/views/reseller/show.blade.php +++ b/resources/views/reseller/show.blade.php @@ -4,135 +4,143 @@ {{ __('Reseller hosting details') }}
    -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Labels - @foreach($labels as $label) - @if($loop->last) - {{$label->label}} - @else - {{$label->label}}, - @endif - @endforeach -
    Id{{ $reseller->id }}
    Main domain{{ $reseller->main_domain }}
    Location{{ $reseller_extras[0]->location }}
    Provider{{ $reseller_extras[0]->provider_name }}
    Price{{ $reseller_extras[0]->price }} {{ $reseller_extras[0]->currency }}
    Term{{ \App\Process::paymentTermIntToString($reseller_extras[0]->term) }}
    Has dedicated IP?{{ ($reseller->has_dedicated_ip)? 'Yes': 'No' }}
    IP{{ $reseller->ip }}
    Owned since - @if(!is_null($reseller->owned_since)) - {{ date_format(new DateTime($reseller->owned_since), 'jS F Y') }} - @endif -
    Next due date - @if(!is_null($reseller_extras[0]->next_due_date)) - {{ date_format(new DateTime($reseller_extras[0]->next_due_date), 'jS F Y') }} - @endif -
    Created on{{ date_format($reseller->created_at, 'jS F Y') }}
    Last updated{{ date_format($reseller->updated_at, 'jS F Y') }}
    -
    -
    -
    - + +
    +
    +

    {{ $reseller->main_domain }}

    + @foreach($labels as $label) + @if($loop->last) + {{$label->label}} + @else + {{$label->label}}, + @endif + @endforeach +
    +
    +
    {{ $reseller->id }}
    + @if($reseller->active !== 1) +
    not active
    + @endif +
    +
    +
    +
    +
    +
    - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + + + + + + +
    Disk GB{{$reseller->disk_as_gb}}Type{{ $reseller_extras[0]->reseller_type }}
    Bandwidth GB{{$reseller->bandwidth}}Main domain{{ $reseller->main_domain }}
    Accounts{{$reseller->accounts}}Location{{ $reseller_extras[0]->location }}
    Domains Limit{{$reseller->domains_limit}}Provider{{ $reseller_extras[0]->provider_name }}
    Subdomains Limit{{$reseller->subdomains_limit}}Price{{ $reseller_extras[0]->price }} {{ $reseller_extras[0]->currency }} + {{\App\Process::paymentTermIntToString($reseller_extras[0]->term)}} +
    Email Limit{{$reseller->email_limit}}Has dedicated IP?{{ ($reseller->has_dedicated_ip)? 'Yes': 'No' }}
    DB Limit{{$reseller->db_limit}}IP{{ $reseller->ip }}
    FTP Limit{{$reseller->ftp_limit}}Owned since + @if(!is_null($reseller->owned_since)) + {{ date_format(new DateTime($reseller->owned_since), 'jS F Y') }} + @endif +
    Next due date{{Carbon\Carbon::parse($reseller_extras[0]->next_due_date)->diffForHumans()}} + ({{Carbon\Carbon::parse($reseller_extras[0]->next_due_date)->format('d/m/Y')}}) +
    Inserted + @if(!is_null($reseller->created_at)) + {{ date_format(new DateTime($reseller->created_at), 'jS M y g:i a') }} + @endif +
    Updated + @if(!is_null($reseller->updated_at)) + {{ date_format(new DateTime($reseller->updated_at), 'jS M y g:i a') }} + @endif +
    -
    - - Go back - - - Edit - +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Disk GB{{$reseller->disk_as_gb}}
    Accounts{{$reseller->accounts}}
    Domains Limit{{$reseller->domains_limit}}
    Subdomains Limit{{$reseller->subdomains_limit}}
    Bandwidth GB{{$reseller->bandwidth}}
    Email Limit{{$reseller->email_limit}}
    DB Limit{{$reseller->db_limit}}
    FTP Limit{{$reseller->ftp_limit}}
    + +
    -
    + + Go back + + + Edit + + @if(Session::has('timer_version_footer') && Session::get('timer_version_footer') === 1)

    Built on Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }} From a3b7cfb88fd37b5d0b4faa35613042dcc02c3cdf Mon Sep 17 00:00:00 2001 From: cp6 Date: Sun, 20 Feb 2022 15:54:48 +1100 Subject: [PATCH 032/135] Updated shared show blade Updated shared show blade --- resources/views/shared/show.blade.php | 218 +++++++++++++------------- 1 file changed, 113 insertions(+), 105 deletions(-) diff --git a/resources/views/shared/show.blade.php b/resources/views/shared/show.blade.php index fa99188..cebd9ce 100644 --- a/resources/views/shared/show.blade.php +++ b/resources/views/shared/show.blade.php @@ -4,131 +4,139 @@ {{ __('Share hosting details') }}

    -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Labels - @foreach($labels as $label) - @if($loop->last) - {{$label->label}} - @else - {{$label->label}}, - @endif - @endforeach -
    Id{{ $shared->id }}
    Main domain{{ $shared->main_domain }}
    Location{{ $shared_extras[0]->location }}
    Provider{{ $shared_extras[0]->provider_name }}
    Price{{ $shared_extras[0]->price }} {{ $shared_extras[0]->currency }}
    Term{{ \App\Process::paymentTermIntToString($shared_extras[0]->term) }}
    Has dedicated IP?{{ ($shared->has_dedicated_ip)? 'Yes': 'No' }}
    IP{{ $shared->ip }}
    Owned since - @if(!is_null($shared->owned_since)) - {{ date_format(new DateTime($shared->owned_since), 'jS F Y') }} - @endif -
    Next due date - @if(!is_null($shared_extras[0]->next_due_date)) - {{ date_format(new DateTime($shared_extras[0]->next_due_date), 'jS F Y') }} - @endif -
    Created on{{ date_format($shared->created_at, 'jS F Y') }}
    Last updated{{ date_format($shared->updated_at, 'jS F Y') }}
    -
    -
    -
    - + +
    +
    +

    {{ $shared->main_domain }}

    + @foreach($labels as $label) + @if($loop->last) + {{$label->label}} + @else + {{$label->label}}, + @endif + @endforeach +
    +
    +
    {{ $shared->id }}
    + @if($shared->active !== 1) +
    not active
    + @endif +
    +
    +
    +
    +
    +
    - - + + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + + + + + + + + + + +
    Disk GB{{$shared->disk_as_gb}}Type{{ $shared->shared_type }}
    Bandwidth GB{{$shared->bandwidth}}Location{{ $shared_extras[0]->location }}
    Domains Limit{{$shared->domains_limit}}Provider{{ $shared_extras[0]->provider_name }}
    Subdomains Limit{{$shared->subdomains_limit}}Price{{ $shared_extras[0]->price }} {{ $shared_extras[0]->currency }} + {{\App\Process::paymentTermIntToString($shared_extras[0]->term)}} +
    Email Limit{{$shared->email_limit}}Was promo{{ ($shared_extras[0]->was_promo === 1) ? 'Yes' : 'No' }}
    DB Limit{{$shared->db_limit}}Has dedicated IP?{{ ($shared->has_dedicated_ip)? 'Yes': 'No' }}
    FTP Limit{{$shared->ftp_limit}}IP{{ $shared->ip }}
    Owned since + @if(!is_null($shared->owned_since)) + {{ date_format(new DateTime($shared->owned_since), 'jS F Y') }} + @endif +
    Next due date{{Carbon\Carbon::parse($shared_extras[0]->next_due_date)->diffForHumans()}} + ({{Carbon\Carbon::parse($shared_extras[0]->next_due_date)->format('d/m/Y')}}) +
    Inserted + @if(!is_null($shared->created_at)) + {{ date_format(new DateTime($shared->created_at), 'jS M y g:i a') }} + @endif +
    Updated + @if(!is_null($shared->updated_at)) + {{ date_format(new DateTime($shared->updated_at), 'jS M y g:i a') }} + @endif +
    -
    - - Go back - - - Edit - +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Disk GB{{$shared->disk_as_gb}}
    Bandwidth GB{{$shared->bandwidth}}
    Domains Limit{{$shared->domains_limit}}
    Subdomains Limit{{$shared->subdomains_limit}}
    Email Limit{{$shared->email_limit}}
    DB Limit{{$shared->db_limit}}
    FTP Limit{{$shared->ftp_limit}}
    + +
    -
    + + Go back + + + Edit + + @if(Session::has('timer_version_footer') && Session::get('timer_version_footer') === 1)

    Built on Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }} From 51de05b917596e59d36583be1a90872d0db0f82a Mon Sep 17 00:00:00 2001 From: cp6 Date: Sun, 20 Feb 2022 15:55:11 +1100 Subject: [PATCH 033/135] Added labels fetch for Domains show Added labels fetch for Domains show --- app/Http/Controllers/DomainsController.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/DomainsController.php b/app/Http/Controllers/DomainsController.php index a28ca29..fcd9bf0 100644 --- a/app/Http/Controllers/DomainsController.php +++ b/app/Http/Controllers/DomainsController.php @@ -25,13 +25,19 @@ class DomainsController extends Controller public function show(Domains $domain) { + $service_extras = DB::table('domains as d') ->join('providers as p', 'd.provider_id', '=', 'p.id') ->join('pricings as pr', 'd.id', '=', 'pr.service_id') ->where('d.id', '=', $domain->id) ->get(['d.*', 'p.name as provider_name', 'pr.*']); - return view('domains.show', compact(['domain', 'service_extras'])); + $labels = DB::table('labels_assigned as l') + ->join('labels', 'l.label_id', '=', 'labels.id') + ->where('l.service_id', '=', $domain->id) + ->get(['labels.label']); + + return view('domains.show', compact(['domain', 'service_extras', 'labels'])); } public function create() From d70f4c44531210b4844aaebb086bd0438f977d1d Mon Sep 17 00:00:00 2001 From: cp6 Date: Sun, 20 Feb 2022 16:19:18 +1100 Subject: [PATCH 034/135] Updated YABs accepted versions Updated YABs accepted versions --- app/Process.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Process.php b/app/Process.php index 3d54b6b..9707472 100644 --- a/app/Process.php +++ b/app/Process.php @@ -182,8 +182,8 @@ class Process return array('error_id' => 10, 'error_message' => 'Issue writing/reading txt file'); } - if (count($array) < 47) { - return array('error_id' => 9, 'error_message' => 'Less than 47 lines'); + if (count($array) < 46) { + return array('error_id' => 9, 'error_message' => 'Less than 46 lines'); } if (str_contains($array[0], "# ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #\r")) { @@ -192,7 +192,7 @@ class Process } $version_array = explode(' ', preg_replace('!\s+!', ' ', $this->trimRemoveR($array[2]))); - if ($version_array[1] === 'v2021-12-28') {//YABs version + if ($version_array[1] === 'v2021-12-28' || $version_array[1] === 'v2022-02-18') {//YABs version $cpu = $this->trimRemoveR(str_replace(':', '', strstr($array[10], ': '))); $cpu_spec = explode(' ', strstr($array[11], ': '));//: 2 @ 3792.872 MHz $cpu_cores = $cpu_spec[1]; From c3f1a021b31a4acdc40df05c6264412360b7b046 Mon Sep 17 00:00:00 2001 From: cp6 Date: Sun, 20 Feb 2022 16:19:31 +1100 Subject: [PATCH 035/135] Added errors alert to yabs index Added errors alert to yabs index --- resources/views/yabs/index.blade.php | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/views/yabs/index.blade.php b/resources/views/yabs/index.blade.php index 17c2e4f..bf3bff4 100644 --- a/resources/views/yabs/index.blade.php +++ b/resources/views/yabs/index.blade.php @@ -10,6 +10,7 @@ Add YABs +

    From 508bca32bdf831ff9ad3bada6085c44d32640772 Mon Sep 17 00:00:00 2001 From: cp6 Date: Sun, 20 Feb 2022 16:22:13 +1100 Subject: [PATCH 036/135] Update home service types in table Made them non uppercase except VPS --- resources/views/home.blade.php | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php index 07876f3..079229c 100644 --- a/resources/views/home.blade.php +++ b/resources/views/home.blade.php @@ -167,13 +167,13 @@ @if($due_soon->service_type === 1) VPS @elseif($due_soon->service_type === 2) - SHARED + Shared @elseif($due_soon->service_type === 3) - RESELLER + Reseller @elseif($due_soon->service_type === 4) - DOMAIN + Domain @elseif($due_soon->service_type === 5) - MISC + Misc @endif From c892295de725afaca68d2ee1d71c6bc9b355ffc5 Mon Sep 17 00:00:00 2001 From: cp6 Date: Sun, 20 Feb 2022 16:39:40 +1100 Subject: [PATCH 037/135] Added labels for shared hosting services Added labels for shared hosting services --- app/Http/Controllers/SharedController.php | 25 ++++++++++- resources/views/shared/create.blade.php | 26 +++++++++++ resources/views/shared/edit.blade.php | 54 ++++++++++++++++++++--- 3 files changed, 97 insertions(+), 8 deletions(-) diff --git a/app/Http/Controllers/SharedController.php b/app/Http/Controllers/SharedController.php index a66dca4..42fbe7f 100644 --- a/app/Http/Controllers/SharedController.php +++ b/app/Http/Controllers/SharedController.php @@ -96,6 +96,14 @@ class SharedController extends Controller 'next_due_date' => $request->next_due_date, ]); + $labels_array = [$request->label1, $request->label2, $request->label3, $request->label4]; + + for ($i = 1; $i <= 4; $i++) { + if (!is_null($labels_array[($i - 1)])) { + DB::insert('INSERT IGNORE INTO labels_assigned (label_id, service_id) values (?, ?)', [$labels_array[($i - 1)], $shared_id]); + } + } + return redirect()->route('shared.index') ->with('success', 'Shared hosting created Successfully.'); } @@ -121,14 +129,17 @@ class SharedController extends Controller { $locations = DB::table('locations')->get(['*']); $providers = json_decode(DB::table('providers')->get(['*']), true); + $labels = DB::table('labels_assigned as l') + ->join('labels', 'l.label_id', '=', 'labels.id') + ->where('l.service_id', '=', $shared->id) + ->get(['labels.id', 'labels.label']); $shared = DB::table('shared_hosting as s') ->join('pricings as p', 's.id', '=', 'p.service_id') ->where('s.id', '=', $shared->id) ->get(['s.*', 'p.*']); - - return view('shared.edit', compact(['shared', 'locations', 'providers'])); + return view('shared.edit', compact(['shared', 'locations', 'providers', 'labels'])); } public function update(Request $request, Shared $shared) @@ -193,6 +204,16 @@ class SharedController extends Controller 'next_due_date' => $request->next_due_date, ]); + $deleted = DB::table('labels_assigned')->where('service_id', '=', $request->id)->delete(); + + $labels_array = [$request->label1, $request->label2, $request->label3, $request->label4]; + + for ($i = 1; $i <= 4; $i++) { + if (!is_null($labels_array[($i - 1)])) { + DB::insert('INSERT IGNORE INTO labels_assigned ( label_id, service_id) values (?, ?)', [$labels_array[($i - 1)], $request->id]); + } + } + return redirect()->route('shared.index') ->with('success', 'Shared hosting updated Successfully.'); } diff --git a/resources/views/shared/create.blade.php b/resources/views/shared/create.blade.php index 2373c43..ee86da5 100644 --- a/resources/views/shared/create.blade.php +++ b/resources/views/shared/create.blade.php @@ -190,6 +190,32 @@ +
    +
    + + label + label1 + +
    +
    + + label + label2 + +
    +
    + + label + label3 + +
    +
    + + label + label4 + +
    +
    @@ -200,7 +200,8 @@
    Domains
    -
    @@ -222,7 +223,8 @@
    Email
    -
    @@ -241,7 +243,8 @@
    FTP
    -
    @@ -253,8 +256,47 @@ +
    +
    + + label + label1 + @if(isset($labels[0]->id)) + {{$labels[0]->id}} + @endif + +
    +
    + + label + label2 + @if(isset($labels[1]->id)) + {{$labels[1]->id}} + @endif + +
    +
    + + label + label3 + @if(isset($labels[2]->id)) + {{$labels[2]->id}} + @endif + +
    +
    + + label + label4 + @if(isset($labels[3]->id)) + {{$labels[3]->id}} + @endif + +
    +
    - active === 1) ? 'checked' : '' }}> + active === 1) ? 'checked' : '' }}> From 345d50b8ae5131de9bb93a4a1d867e5f3fc7317c Mon Sep 17 00:00:00 2001 From: cp6 Date: Sun, 20 Feb 2022 16:39:52 +1100 Subject: [PATCH 038/135] Updated insert label query Updated insert label query --- app/Http/Controllers/DomainsController.php | 2 +- app/Http/Controllers/ServerController.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/DomainsController.php b/app/Http/Controllers/DomainsController.php index fcd9bf0..3f115b8 100644 --- a/app/Http/Controllers/DomainsController.php +++ b/app/Http/Controllers/DomainsController.php @@ -88,7 +88,7 @@ class DomainsController extends Controller for ($i = 1; $i <= 4; $i++) { if (!is_null($labels_array[($i - 1)])) { - DB::insert('INSERT INTO labels_assigned (label_id, service_id) values (?, ?)', [$labels_array[($i - 1)], $domain_id]); + DB::insert('INSERT IGNORE INTO labels_assigned (label_id, service_id) values (?, ?)', [$labels_array[($i - 1)], $domain_id]); } } diff --git a/app/Http/Controllers/ServerController.php b/app/Http/Controllers/ServerController.php index bef50af..4d7e436 100644 --- a/app/Http/Controllers/ServerController.php +++ b/app/Http/Controllers/ServerController.php @@ -128,7 +128,7 @@ class ServerController extends Controller for ($i = 1; $i <= 4; $i++) { if (!is_null($labels_array[($i - 1)])) { - DB::insert('INSERT INTO labels_assigned (label_id, service_id) values (?, ?)', [$labels_array[($i - 1)], $server_id]); + DB::insert('INSERT IGNORE INTO labels_assigned (label_id, service_id) values (?, ?)', [$labels_array[($i - 1)], $server_id]); } } From 79abfee8a7598de370e1d0edfe1c4904028d6553 Mon Sep 17 00:00:00 2001 From: cp6 Date: Sun, 20 Feb 2022 21:51:36 +1100 Subject: [PATCH 039/135] Added self hosted Vue JS file Added self hosted Vue JS file --- public/js/vue.min.js | Bin 0 -> 117390 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 public/js/vue.min.js diff --git a/public/js/vue.min.js b/public/js/vue.min.js new file mode 100644 index 0000000000000000000000000000000000000000..713c9a45d05b384c147b38d2950999333217aa79 GIT binary patch literal 117390 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 k%A_lQ5mXj{WYXW3HQL;{&9U?`m5&ggZFa7r> Date: Sun, 20 Feb 2022 21:51:43 +1100 Subject: [PATCH 040/135] Added self hosted axios JS file Added self hosted axios JS file --- public/js/axios.min.js | Bin 0 -> 17754 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 public/js/axios.min.js diff --git a/public/js/axios.min.js b/public/js/axios.min.js new file mode 100644 index 0000000000000000000000000000000000000000..f7cd995c86315262518a96fe3bc0f06353963b63 GIT binary patch literal 17754 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 literal 0 HcmV?d00001 From e27fa57e02bae206bfd06c8245a58918390dc4b5 Mon Sep 17 00:00:00 2001 From: cp6 Date: Sun, 20 Feb 2022 21:52:19 +1100 Subject: [PATCH 041/135] Updated app.blade removed unneeded assets Updated app.blade removed unneeded assets --- resources/views/layouts/app.blade.php | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index 64bdd02..d38b410 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -10,9 +10,6 @@ @yield('title') - My idlers - - - @@ -21,8 +18,7 @@ - - + @yield('scripts')
    @@ -36,10 +32,8 @@
    @endif -
    {{ $slot }}
    -
    From db42066a66c68b2196ddb6222778dcc98bd22135 Mon Sep 17 00:00:00 2001 From: cp6 Date: Sun, 20 Feb 2022 21:52:46 +1100 Subject: [PATCH 042/135] Updated views that use Vue to the new self hosted asset Updated views that use Vue to the new self hosted asset --- resources/views/domains/index.blade.php | 4 ++++ resources/views/labels/index.blade.php | 4 ++++ resources/views/locations/index.blade.php | 4 ++++ resources/views/misc/index.blade.php | 4 ++++ resources/views/os/index.blade.php | 4 ++++ resources/views/providers/index.blade.php | 4 ++++ resources/views/reseller/index.blade.php | 4 ++++ resources/views/servers/create.blade.php | 4 ++++ resources/views/servers/index.blade.php | 4 ++++ resources/views/shared/index.blade.php | 4 ++++ resources/views/yabs/index.blade.php | 4 ++++ 11 files changed, 44 insertions(+) diff --git a/resources/views/domains/index.blade.php b/resources/views/domains/index.blade.php index 52f146e..fd46f07 100644 --- a/resources/views/domains/index.blade.php +++ b/resources/views/domains/index.blade.php @@ -2,6 +2,10 @@ @section('style') @endsection +@section('scripts') + + +@endsection {{ __('Domains') }} diff --git a/resources/views/labels/index.blade.php b/resources/views/labels/index.blade.php index 9630c36..5c6f5f5 100644 --- a/resources/views/labels/index.blade.php +++ b/resources/views/labels/index.blade.php @@ -5,6 +5,10 @@ @section('style') @endsection +@section('scripts') + + +@endsection {{ __('Labels') }} diff --git a/resources/views/locations/index.blade.php b/resources/views/locations/index.blade.php index 7b9e459..ed0e66e 100644 --- a/resources/views/locations/index.blade.php +++ b/resources/views/locations/index.blade.php @@ -5,6 +5,10 @@ @section('style') @endsection +@section('scripts') + + +@endsection {{ __('Locations') }} diff --git a/resources/views/misc/index.blade.php b/resources/views/misc/index.blade.php index 0e0770d..f3c49e3 100644 --- a/resources/views/misc/index.blade.php +++ b/resources/views/misc/index.blade.php @@ -1,4 +1,8 @@ @section('title') {{'Misc services'}} @endsection +@section('scripts') + + +@endsection {{ __('Misc services') }} diff --git a/resources/views/os/index.blade.php b/resources/views/os/index.blade.php index eea374d..e35cd53 100644 --- a/resources/views/os/index.blade.php +++ b/resources/views/os/index.blade.php @@ -5,6 +5,10 @@ @section('style') @endsection +@section('scripts') + + +@endsection {{ __('Operating systems') }} diff --git a/resources/views/providers/index.blade.php b/resources/views/providers/index.blade.php index dc971ba..5153bf5 100644 --- a/resources/views/providers/index.blade.php +++ b/resources/views/providers/index.blade.php @@ -5,6 +5,10 @@ @section('style') @endsection +@section('scripts') + + +@endsection {{ __('Providers') }} diff --git a/resources/views/reseller/index.blade.php b/resources/views/reseller/index.blade.php index cccba45..0b2b08f 100644 --- a/resources/views/reseller/index.blade.php +++ b/resources/views/reseller/index.blade.php @@ -2,6 +2,10 @@ @section('style') @endsection +@section('scripts') + + +@endsection {{ __('Reseller') }} diff --git a/resources/views/servers/create.blade.php b/resources/views/servers/create.blade.php index 0c029ef..84d913d 100644 --- a/resources/views/servers/create.blade.php +++ b/resources/views/servers/create.blade.php @@ -1,4 +1,8 @@ @section('title') {{'Enter new server'}} @endsection +@section('scripts') + + +@endsection {{ __('Insert a new server') }} diff --git a/resources/views/servers/index.blade.php b/resources/views/servers/index.blade.php index c226984..89951e0 100644 --- a/resources/views/servers/index.blade.php +++ b/resources/views/servers/index.blade.php @@ -2,6 +2,10 @@ @section('style') @endsection +@section('scripts') + + +@endsection {{ __('Servers') }} diff --git a/resources/views/shared/index.blade.php b/resources/views/shared/index.blade.php index 23cb55f..80ebb6a 100644 --- a/resources/views/shared/index.blade.php +++ b/resources/views/shared/index.blade.php @@ -2,6 +2,10 @@ @section('style') @endsection +@section('scripts') + + +@endsection {{ __('Shared hosting') }} diff --git a/resources/views/yabs/index.blade.php b/resources/views/yabs/index.blade.php index bf3bff4..f010de3 100644 --- a/resources/views/yabs/index.blade.php +++ b/resources/views/yabs/index.blade.php @@ -2,6 +2,10 @@ @section('style') @endsection +@section('scripts') + + +@endsection {{ __('YABs') }} From 9308110bd8ba1a838a7f8acdc609c1aa031fa3d2 Mon Sep 17 00:00:00 2001 From: cp6 Date: Sun, 20 Feb 2022 21:59:35 +1100 Subject: [PATCH 043/135] Removed unused assets from guest.blade Removed unused assets from guest.blade --- resources/views/layouts/guest.blade.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/resources/views/layouts/guest.blade.php b/resources/views/layouts/guest.blade.php index 74e0262..1f29a89 100644 --- a/resources/views/layouts/guest.blade.php +++ b/resources/views/layouts/guest.blade.php @@ -7,9 +7,6 @@ @yield('title') - My idlers - - - From 9f53afb409e7f9cb81600eca126c5c5e2024b7f4 Mon Sep 17 00:00:00 2001 From: cp6 Date: Sun, 20 Feb 2022 22:00:05 +1100 Subject: [PATCH 044/135] Updated blade components to use Bootstrap classes Updated blade components to use Bootstrap classes --- resources/views/auth/login.blade.php | 2 +- resources/views/components/input.blade.php | 2 +- resources/views/components/label.blade.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php index 7ab7e8f..3831eaa 100644 --- a/resources/views/auth/login.blade.php +++ b/resources/views/auth/login.blade.php @@ -6,7 +6,7 @@ -

    Login to My idlers

    +

    My idlers

    @csrf
    diff --git a/resources/views/components/input.blade.php b/resources/views/components/input.blade.php index d6d857b..481beac 100644 --- a/resources/views/components/input.blade.php +++ b/resources/views/components/input.blade.php @@ -1,3 +1,3 @@ @props(['disabled' => false]) -merge(['class' => 'rounded-md shadow-sm border-gray-300 focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50']) !!}> +merge(['class' => 'form-control']) !!}> diff --git a/resources/views/components/label.blade.php b/resources/views/components/label.blade.php index 1cc65e2..27d02b0 100644 --- a/resources/views/components/label.blade.php +++ b/resources/views/components/label.blade.php @@ -1,5 +1,5 @@ @props(['value']) -
    @@ -234,16 +234,16 @@ @endif - @if($due_soon->service_type === 1) + @if($new->service_type === 1) VPS - @elseif($due_soon->service_type === 2) - SHARED - @elseif($due_soon->service_type === 3) - RESELLER - @elseif($due_soon->service_type === 4) - DOMAIN - @elseif($due_soon->service_type === 5) - MISC + @elseif($new->service_type === 2) + Shared + @elseif($new->service_type === 3) + Reseller + @elseif($new->service_type === 4) + Domain + @elseif($new->service_type === 5) + Misc @endif {{Carbon\Carbon::parse($new->created_at)->diffForHumans()}}