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/.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/AUTH.php b/AUTH.php deleted file mode 100644 index b65e1c0..0000000 --- a/AUTH.php +++ /dev/null @@ -1,4 +0,0 @@ -selfDestruct(); \ No newline at end of file diff --git a/README.md b/README.md index b33afbf..3f77d52 100644 --- a/README.md +++ b/README.md @@ -1,43 +1,52 @@ # 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-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/) -[![Generic badge](https://img.shields.io/badge/version-1.5-blue.svg)](https://shields.io/) +## 2.0 changes: -## 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 +**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) CRUD. +* Misc services CRUD. +* DNS CRUD. +* Ip address CRUD. +* Reseller hosting. +* Added Operating systems to DB, Deleting and creating them now possible. +* Make servers displayable public with config options to hide certain values. +* Vue JS used where possible. +* Datatables used on large tables (Locations, labels, and providers). +* Added caching for home page and servers ## 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 -* [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 @@ -48,85 +57,130 @@ By using a [YABs](https://github.com/masonr/yet-another-bench-script) output you * 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. - -* **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. +* `git clone https://github.com/cp6/my-idlers.git` into your directory of choice +* Run `composer install` -* Make sure you have write access to process and store the YABs outputs. +* 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}` + +`os/` + +`os/{id}` + +`pricing/` + +`pricing/{id}` + +`providers/` + +`providers/{id}` + +`reseller/` + +`reseller/{id}` + +`settings/` + +`shared/` + +`shared/{id}` ## Notes -**There is no authentication provided!** - Either use on a local network or put behind authentication. - - **Supporting YABS commands:** - - ```curl -sL yabs.sh | bash``` - +**Public viewable listings** + +If enabled the public viewable table for your server listings is at `/servers/public` +You can configure what you want viewable at ```/settings``` + +**Due date / due soon** + +This is simply just a reminder. If the homepage is requested (viewed) when a service is over due date it will get reset +to plus the term from the old due date. + +E.g if the term is a month then the due date gets updated to be 1 month from the old due date. + +**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```. +## 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. +[![My idlers screenshot1](https://cdn.write.corbpie.com/wp-content/uploads/2022/03/My-idlers-v2-home.jpg)](https://cdn.write.corbpie.com/wp-content/uploads/2022/03/My-idlers-v2-home.jpg) -### Screenshots +[![My idlers screenshot1](https://cdn.write.corbpie.com/wp-content/uploads/2022/03/My-idlers-v2-server-view.jpg)](https://cdn.write.corbpie.com/wp-content/uploads/2022/03/My-idlers-v2-server-view.jpg) -[![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) +[![My idlers screenshot1](https://cdn.write.corbpie.com/wp-content/uploads/2022/03/My-idlers-v2-servers-home.jpg)](https://cdn.write.corbpie.com/wp-content/uploads/2022/03/My-idlers-v2-servers-home.jpg) -[![My idlers screenshot2](https://cdn.write.corbpie.com/wp-content/uploads/2021/02/my-idlers-self-hosted-server-info-table.jpg)](https://cdn.write.corbpie.com/wp-content/uploads/2021/02/my-idlers-self-hosted-server-info-table.jpg) +[![My idlers screenshot1](https://cdn.write.corbpie.com/wp-content/uploads/2022/03/My-idlers-v2-YABs.jpg)](https://cdn.write.corbpie.com/wp-content/uploads/2022/03/My-idlers-v2-YABs.jpg) -[![My idlers screenshot3](https://cdn.write.corbpie.com/wp-content/uploads/2021/02/my-idlers-self-hosted-server-info-more-modal.jpg)](https://cdn.write.corbpie.com/wp-content/uploads/2021/02/my-idlers-self-hosted-server-info-more-modal.jpg) +[![My idlers screenshot1](https://cdn.write.corbpie.com/wp-content/uploads/2022/03/My-idlers-v2-add-server.jpg)](https://cdn.write.corbpie.com/wp-content/uploads/2022/03/My-idlers-v2-add-server.jpg) -[![My idlers screenshot4](https://cdn.write.corbpie.com/wp-content/uploads/2021/02/my-idlers-self-hosted-server-info-edit-modal.jpg)](https://cdn.write.corbpie.com/wp-content/uploads/2021/02/my-idlers-self-hosted-server-info-edit-modal.jpg) +[![My idlers screenshot1](https://cdn.write.corbpie.com/wp-content/uploads/2022/03/My-idlers-v2-servers-compare.jpg)](https://cdn.write.corbpie.com/wp-content/uploads/2022/03/My-idlers-v2-servers-compare.jpg) -[![My idlers screenshot5](https://cdn.write.corbpie.com/wp-content/uploads/2021/02/my-idlers-self-hosted-server-info-order-servers.jpg)](https://cdn.write.corbpie.com/wp-content/uploads/2021/02/my-idlers-self-hosted-server-info-order-servers.jpg) +[![My idlers screenshot1](https://cdn.write.corbpie.com/wp-content/uploads/2022/03/My-idlers-v2-Ips.jpg)](https://cdn.write.corbpie.com/wp-content/uploads/2022/03/My-idlers-v2-Ips.jpg) -[![My idlers screenshot6](https://cdn.write.corbpie.com/wp-content/uploads/2021/02/my-idlers-self-hosted-server-info-search.jpg)](https://cdn.write.corbpie.com/wp-content/uploads/2021/02/my-idlers-self-hosted-server-info-search.jpg) +[![My idlers screenshot1](https://cdn.write.corbpie.com/wp-content/uploads/2022/03/My-idlers-v2-labels.jpg)](https://cdn.write.corbpie.com/wp-content/uploads/2022/03/My-idlers-v2-labels.jpg) -[![My idlers screenshot7](https://cdn.write.corbpie.com/wp-content/uploads/2021/02/my-idlers-self-hosted-server-info-summary-card.jpg)](https://cdn.write.corbpie.com/wp-content/uploads/2021/02/my-idlers-self-hosted-server-info-summary-card.jpg) +##Looking for a project sponsor -[![My idlers screenshot8](https://cdn.write.corbpie.com/wp-content/uploads/2021/02/my-idlers-self-hosted-server-info-compare-two-servers.jpg)](https://cdn.write.corbpie.com/wp-content/uploads/2021/02/my-idlers-self-hosted-server-info-compare-two-servers.jpg) - -[![My idlers screenshot9](https://cdn.write.corbpie.com/wp-content/uploads/2021/02/my-idlers-self-hosted-server-info-add-server-from-yabs.jpg)](https://cdn.write.corbpie.com/wp-content/uploads/2021/02/my-idlers-self-hosted-server-info-add-server-from-yabs.jpg) - -[![My idlers screenshot10](https://cdn.write.corbpie.com/wp-content/uploads/2021/02/my-idlers-self-hosted-server-info-add-shared-hosting.jpg)](https://cdn.write.corbpie.com/wp-content/uploads/2021/02/my-idlers-self-hosted-server-info-add-shared-hosting.jpg) - -[![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) +Am seeking atleast a 1GB ram, Nvme VPS to host a demo installation of My idlers. In return you will get your provider as the default selection in the create forms, as well as screenshots. +[![My idlers screenshot1](https://cdn.write.corbpie.com/wp-content/uploads/2022/03/My-idlers-v2-default-provider-sponsor-position.png)](https://cdn.write.corbpie.com/wp-content/uploads/2022/03/My-idlers-v2-default-provider-sponsor-position.png) 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..9c82e6f --- /dev/null +++ b/app/Http/Controllers/ApiController.php @@ -0,0 +1,302 @@ +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') + ->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); + } + + protected function getServer($id) + { + $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', 'pr.name as provider', 'l.name as location','o.name as os']); + + $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.*']); + + $ip_addresses = DB::table('ips as i') + ->where('i.service_id', '=', $id) + ->get(['i.*']); + + $server['ip_addresses'] = $ip_addresses; + $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); + } + + protected function getAllOs() + { + $os = OS::all()->toJson(JSON_PRETTY_PRINT); + return response($os, 200); + } + + protected function getOs($id) + { + $os = DB::table('os as o') + ->where('o.id', '=', $id) + ->get()->toJson(JSON_PRETTY_PRINT); + return response($os, 200); + } + + protected function getAllIPs() + { + $ip = IPs::all()->toJson(JSON_PRETTY_PRINT); + return response($ip, 200); + } + + protected function getIP($id) + { + $ip = DB::table('ips as i') + ->where('i.id', '=', $id) + ->get()->toJson(JSON_PRETTY_PRINT); + return response($ip, 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..4d780de --- /dev/null +++ b/app/Http/Controllers/Auth/AuthenticatedSessionController.php @@ -0,0 +1,59 @@ +count() === 0) {//Only allow 1 user for this app + return redirect('/register'); + } + return view('auth.login'); + } + + /** + * Handle an incoming authentication request. + * + * @param \App\Http\Requests\Auth\LoginRequest $request + * @return \Illuminate\Http\RedirectResponse + */ + public function store(LoginRequest $request) + { + $request->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..3820b09 --- /dev/null +++ b/app/Http/Controllers/Auth/RegisteredUserController.php @@ -0,0 +1,61 @@ +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); + + $labels = DB::table('labels_assigned as l') + ->join('labels', 'l.label_id', '=', 'labels.id') + ->where('l.service_id', '=', $dn->id) + ->get(['labels.label']); + + return view('dns.show', compact(['dn', 'dns', 'labels'])); + } + + 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.*']); + + $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() + { + $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 IGNORE INTO labels_assigned (label_id, service_id) values (?, ?)', [$labels_array[($i - 1)], $domain_id]); + } + } + + Cache::forget('services_count');//Main page services_count cache + Cache::forget('due_soon');//Main page due_soon cache + Cache::forget('recently_added');//Main page recently_added cache + + 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]); + } + } + + Cache::forget('services_count');//Main page services_count cache + Cache::forget('due_soon');//Main page due_soon cache + Cache::forget('recently_added');//Main page recently_added cache + + 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); + + Cache::forget('services_count');//Main page services_count cache + Cache::forget('due_soon');//Main page due_soon cache + Cache::forget('recently_added');//Main page recently_added cache + + 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..8a26408 --- /dev/null +++ b/app/Http/Controllers/HomeController.php @@ -0,0 +1,176 @@ +middleware('auth'); + } + + public function index() + { + $p = new Process(); + $p->startTimer(); + + $services_count = Cache::remember('services_count', 1440, function () { + return DB::table('pricings') + ->select('service_type', DB::raw('COUNT(*) as amount')) + ->groupBy('service_type') + ->where('active', '=', 1) + ->get(); + }); + + $due_soon = Cache::remember('due_soon', 1440, function () { + return 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++; + } + + Cache::put('due_soon', $due_soon); + + $recently_added = Cache::remember('recently_added', 1440, function () { + return 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 = Cache::remember('settings', 15, function () { + return 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::put('show_server_value_ip', $settings[0]->show_server_value_ip); + Session::put('show_server_value_hostname', $settings[0]->show_server_value_hostname); + Session::put('show_server_value_price', $settings[0]->show_server_value_price); + Session::put('show_server_value_yabs', $settings[0]->show_server_value_yabs); + Session::put('show_server_value_provider', $settings[0]->show_server_value_provider); + Session::put('show_server_value_location', $settings[0]->show_server_value_location); + Session::put('default_currency', $settings[0]->default_currency); + Session::put('default_server_os', $settings[0]->default_server_os); + 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) + ); + + return view('home', compact('information')); + } +} diff --git a/app/Http/Controllers/IPsController.php b/app/Http/Controllers/IPsController.php new file mode 100644 index 0000000..df3ef59 --- /dev/null +++ b/app/Http/Controllers/IPsController.php @@ -0,0 +1,59 @@ +validate([ + 'address' => 'required|ip|min:2', + 'ip_type' => 'required' + ]); + + $ip_id = Str::random(8); + + IPs::create([ + 'id' => $ip_id, + 'address' => $request->address, + 'is_ipv4' => ($request->ip_type === 'ipv4') ? 1 : 0, + 'service_id' => $request->service_id, + 'active' => 1 + ]); + + return redirect()->route('IPs.index') + ->with('success', 'IP address created Successfully.'); + } + + public function destroy(IPs $IP) + { + $items = IPs::find($IP->id); + $items->delete(); + + return redirect()->route('IPs.index') + ->with('success', 'IP address was deleted Successfully.'); + } +} diff --git a/app/Http/Controllers/LabelsController.php b/app/Http/Controllers/LabelsController.php new file mode 100644 index 0000000..74f1639 --- /dev/null +++ b/app/Http/Controllers/LabelsController.php @@ -0,0 +1,76 @@ +validate([ + 'label' => 'required|min:2' + ]); + + Labels::create([ + 'id' => Str::random(8), + 'label' => $request->label + ]); + + Cache::forget('all_labels'); + + return redirect()->route('labels.index') + ->with('success', 'Label Created Successfully.'); + } + + public function show(Labels $label) + { + $labels = DB::table('labels_assigned as las') + ->leftJoin('pricings as p', 'las.service_id', '=', 'p.service_id') + ->leftJoin('servers as s', 'las.service_id', '=', 's.id') + ->leftJoin('shared_hosting as sh', 'las.service_id', '=', 'sh.id') + ->leftJoin('reseller_hosting as r', 'las.service_id', '=', 'r.id') + ->leftJoin('domains as d', 'las.service_id', '=', 'd.id') + ->where('las.label_id', '=', $label->id) + ->get(['p.service_type', 'p.service_id', 's.hostname', 'sh.main_domain as shared', 'r.main_domain as reseller', 'd.domain', 'd.extension']); + + return view('labels.show', compact(['label', 'labels'])); + } + + 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); + + Cache::forget('all_labels'); + + 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..d160966 --- /dev/null +++ b/app/Http/Controllers/LocationsController.php @@ -0,0 +1,73 @@ +validate([ + 'location_name' => 'required|min:2' + ]); + + Locations::create([ + 'name' => $request->location_name + ]); + + Cache::forget('all_locations'); + + return redirect()->route('locations.index') + ->with('success', 'Location Created Successfully.'); + } + + public function show(Locations $location) + { + $servers = DB::table('servers as s') + ->where('s.location_id', '=', $location->id) + ->get(['s.id', 's.hostname']) + ->toArray(); + + $shared = DB::table('shared_hosting as s') + ->where('s.location_id', '=', $location->id) + ->get(['s.id', 's.main_domain as main_domain_shared']) + ->toArray(); + + $reseller = DB::table('reseller_hosting as r') + ->where('r.location_id', '=', $location->id) + ->get(['r.id', 'r.main_domain as main_domain_reseller']) + ->toArray(); + + $data = array_merge($servers, $shared, $reseller); + + return view('locations.show', compact(['location', 'data'])); + } + + public function destroy(Locations $location) + { + $items = Locations::find($location->id); + + $items->delete(); + + Cache::forget('all_locations'); + + 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..a6d899e --- /dev/null +++ b/app/Http/Controllers/MiscController.php @@ -0,0 +1,143 @@ +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, + ]); + + Cache::forget('services_count');//Main page services_count cache + Cache::forget('due_soon');//Main page due_soon cache + Cache::forget('recently_added');//Main page recently_added cache + + 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 + ]); + + Cache::forget('services_count');//Main page services_count cache + Cache::forget('due_soon');//Main page due_soon cache + Cache::forget('recently_added');//Main page recently_added cache + + 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); + + Cache::forget('services_count');//Main page services_count cache + Cache::forget('due_soon');//Main page due_soon cache + Cache::forget('recently_added');//Main page recently_added cache + + 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([ + 'os_name' => 'required|min:2' + ]); + + OS::create([ + 'name' => $request->os_name + ]); + + Cache::forget('all_os'); + + return redirect()->route('os.index') + ->with('success', 'OS Created Successfully.'); + } + + public function destroy(OS $o) + { + $items = OS::find($o->id); + + $items->delete(); + + Cache::forget('all_os'); + + return redirect()->route('os.index') + ->with('success', 'OS was deleted Successfully.'); + } +} diff --git a/app/Http/Controllers/PricingController.php b/app/Http/Controllers/PricingController.php new file mode 100644 index 0000000..f530060 --- /dev/null +++ b/app/Http/Controllers/PricingController.php @@ -0,0 +1,19 @@ +validate([ + 'provider_name' => 'required|min:2' + ]); + + Providers::create([ + 'name' => $request->provider_name + ]); + + Cache::forget('all_providers'); + + return redirect()->route('providers.index') + ->with('success', 'Provider Created Successfully.'); + } + + public function show(Providers $provider) + { + $servers = DB::table('servers as s') + ->where('s.provider_id', '=', $provider->id) + ->get(['s.id', 's.hostname']) + ->toArray(); + + $shared = DB::table('shared_hosting as s') + ->where('s.provider_id', '=', $provider->id) + ->get(['s.id', 's.main_domain as main_domain_shared']) + ->toArray(); + + $reseller = DB::table('reseller_hosting as r') + ->where('r.provider_id', '=', $provider->id) + ->get(['r.id', 'r.main_domain as main_domain_reseller']) + ->toArray(); + + $data = array_merge($servers, $shared, $reseller); + + return view('providers.show', compact(['provider', 'data'])); + } + + public function destroy(Providers $provider) + { + $items = Providers::find($provider->id); + + $items->delete(); + + Cache::forget('all_providers'); + + 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); + } + } + +} diff --git a/app/Http/Controllers/ResellerController.php b/app/Http/Controllers/ResellerController.php new file mode 100644 index 0000000..604efb5 --- /dev/null +++ b/app/Http/Controllers/ResellerController.php @@ -0,0 +1,281 @@ +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', + '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, + '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, + ]); + + if (!is_null($request->dedicated_ip)) { + IPs::create( + [ + 'id' => Str::random(8), + 'service_id' => $reseller_id, + 'address' => $request->dedicated_ip, + 'is_ipv4' => (filter_var($request->dedicated_ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) ? 0 : 1, + 'active' => 1 + ] + ); + } + + $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)], $reseller_id]); + } + } + + Cache::forget('services_count');//Main page services_count cache + Cache::forget('due_soon');//Main page due_soon cache + Cache::forget('recently_added');//Main page recently_added cache + + 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') + ->LeftJoin('labels', 'l.label_id', '=', 'labels.id') + ->where('l.service_id', '=', $reseller->id) + ->get(['labels.label']); + + $ip_address = DB::table('ips as i') + ->where('i.service_id', '=', $reseller->id) + ->get(); + + return view('reseller.show', compact(['reseller', 'reseller_extras', 'labels', 'ip_address'])); + } + + public function edit(Reseller $reseller) + { + $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', '=', $reseller->id) + ->get(['labels.id', 'labels.label']); + + $ip_address = json_decode(DB::table('ips as i') + ->where('i.service_id', '=', $reseller->id) + ->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', 'ip_address', 'labels'])); + } + + public function update(Request $request, Reseller $reseller) + { + $request->validate([ + 'id' => 'required|size:8', + 'domain' => 'required|min:4', + 'reseller_type' => 'required', + 'dedicated_ip' => 'present', + '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, + '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, + ]); + + $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]); + } + } + + $delete_ip = DB::table('ips')->where('service_id', '=', $request->id)->delete(); + + if (isset($request->dedicated_ip)) { + DB::insert('INSERT IGNORE INTO ips (id, address, service_id, is_ipv4) values (?, ?, ?, ?)', [ + Str::random(8), + $request->dedicated_ip, + $request->id, + (filter_var($request->dedicated_ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) ? 0 : 1 + ]); + } + + Cache::forget('services_count');//Main page services_count cache + Cache::forget('due_soon');//Main page due_soon cache + Cache::forget('recently_added');//Main page recently_added cache + + 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($id); + + Labels::deleteLabelsAssignedTo($id); + + IPs::deleteIPsAssignedTo($id); + + Cache::forget('services_count');//Main page services_count cache + Cache::forget('due_soon');//Main page due_soon cache + Cache::forget('recently_added');//Main page recently_added cache + + 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..a3101e1 --- /dev/null +++ b/app/Http/Controllers/ServerController.php @@ -0,0 +1,402 @@ +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.active', '=', 1) + ->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']); + }); + + $non_active_servers = Cache::remember('non_active_servers', 1440, function () { + return 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.active', '=', 0) + ->get(['s.*', 'pr.currency', 'pr.price', 'pr.term', 'pr.as_usd', 'p.name as provider_name', 'l.name as location', 'o.name as os_name']); + }); + + return view('servers.index', compact(['servers', 'non_active_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::put('show_server_value_ip', $settings[0]->show_server_value_ip); + Session::put('show_server_value_hostname', $settings[0]->show_server_value_hostname); + Session::put('show_server_value_price', $settings[0]->show_server_value_price); + Session::put('show_server_value_yabs', $settings[0]->show_server_value_yabs); + Session::put('show_server_value_provider', $settings[0]->show_server_value_provider); + Session::put('show_server_value_location', $settings[0]->show_server_value_location); + Session::save(); + + if ((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('ips as i', 's.id', '=', 'i.service_id') + ->LeftJoin('yabs as y', 's.id', '=', 'y.server_id') + ->LeftJoin('disk_speed as ds', 'y.id', '=', 'ds.id') + ->where('s.show_public', '=', 1) + ->get(['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.*', 's.*', 'i.address as ip', 'i.is_ipv4']); + + 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', + 'ip1' => 'nullable|ip', + 'ip2' => 'nullable|ip', + '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, + '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, + 'show_public' => (isset($request->show_public)) ? 1 : 0 + ]); + + if (!is_null($request->ip1)) { + IPs::create( + [ + 'id' => Str::random(8), + 'service_id' => $server_id, + 'address' => $request->ip1, + 'is_ipv4' => (filter_var($request->ip1, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) ? 0 : 1, + 'active' => 1 + ] + ); + } + + if (!is_null($request->ip2)) { + IPs::create( + [ + 'id' => Str::random(8), + 'service_id' => $server_id, + 'address' => $request->ip2, + 'is_ipv4' => (filter_var($request->ip2, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) ? 0 : 1, + 'active' => 1 + ] + ); + } + + $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 IGNORE INTO labels_assigned (label_id, service_id) values (?, ?)', [$labels_array[($i - 1)], $server_id]); + } + } + + Cache::forget('services_count');//Main page services_count cache + Cache::forget('due_soon');//Main page due_soon cache + Cache::forget('recently_added');//Main page recently_added cache + Cache::forget('all_active_servers');//all servers cache + Cache::forget('non_active_servers');//all servers cache + + 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') + ->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', '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); + + $ip_addresses = json_decode(DB::table('ips as i') + ->where('i.service_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', 'network_speeds', 'labels', 'ip_addresses'])); + } + + 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(['*']); + + $ip_addresses = json_decode(DB::table('ips as i') + ->where('i.service_id', '=', $server->id) + ->get(), true); + + $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', 'ip_addresses'])); + } + + 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', + 'next_due_date' => 'date' + ]); + + + DB::table('servers') + ->where('id', $request->server_id) + ->update([ + 'hostname' => $request->hostname, + '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, + 'show_public' => (isset($request->show_public)) ? 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]); + } + } + + $deleted = DB::table('ips')->where('service_id', '=', $server->id)->delete(); + + for ($i = 1; $i <= 8; $i++) {//Max of 8 ips + $obj = 'ip' . $i; + if (isset($request->$obj) && !is_null($request->$obj)) { + DB::insert('INSERT IGNORE INTO ips (id, address, service_id, is_ipv4) values (?, ?, ?, ?)', [ + Str::random(8), + $request->$obj, + $request->server_id, + (filter_var($request->$obj, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) ? 0 : 1 + ]); + } + } + + Cache::forget('services_count');//Main page services_count cache + Cache::forget('due_soon');//Main page due_soon cache + Cache::forget('recently_added');//Main page recently_added cache + Cache::forget('all_active_servers');//all servers cache + Cache::forget('non_active_servers');//all servers cache + + 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); + + IPs::deleteIPsAssignedTo($server->id); + + Cache::forget('services_count');//Main page services_count cache + Cache::forget('due_soon');//Main page due_soon cache + Cache::forget('recently_added');//Main page recently_added cache + Cache::forget('all_active_servers');//all servers cache + Cache::forget('non_active_servers');//all servers cache + + 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..892caa8 --- /dev/null +++ b/app/Http/Controllers/SettingsController.php @@ -0,0 +1,69 @@ +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', + 'default_currency' => 'required', + 'default_server_os' => 'required' + ]); + + 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, + 'default_currency' => $request->default_currency, + 'default_server_os' => $request->default_server_os + ]); + + 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::put('show_server_value_price', $request->show_server_value_price); + Session::put('show_server_value_yabs', $request->show_server_value_yabs); + Session::put('show_server_value_provider', $request->show_server_value_provider); + Session::put('show_server_value_location', $request->show_server_value_location); + Session::put('default_currency', $request->default_currency); + Session::put('default_server_os', $request->default_server_os); + Session::save(); + + Cache::forget('settings');//Main page settings cache + + 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..e1b4085 --- /dev/null +++ b/app/Http/Controllers/SharedController.php @@ -0,0 +1,277 @@ +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', + '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, + '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, + ]); + + $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]); + } + } + + if (!is_null($request->dedicated_ip)) { + IPs::create( + [ + 'id' => Str::random(8), + 'service_id' => $shared_id, + 'address' => $request->dedicated_ip, + 'is_ipv4' => (filter_var($request->dedicated_ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) ? 0 : 1, + 'active' => 1 + ] + ); + } + + Cache::forget('services_count');//Main page services_count cache + Cache::forget('due_soon');//Main page due_soon cache + Cache::forget('recently_added');//Main page recently_added cache + + 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']); + + $ip_address = DB::table('ips as i') + ->where('i.service_id', '=', $shared->id) + ->get(); + + return view('shared.show', compact(['shared', 'shared_extras', 'labels', 'ip_address'])); + } + + public function edit(Shared $shared) + { + $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']); + + $ip_address = json_decode(DB::table('ips as i') + ->where('i.service_id', '=', $shared->id) + ->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', 'labels', 'ip_address'])); + } + + public function update(Request $request, Shared $shared) + { + $request->validate([ + 'id' => 'required|size:8', + 'domain' => 'required|min:4', + 'shared_type' => 'required', + 'dedicated_ip' => 'present', + '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, + '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, + ]); + + $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]); + } + } + + $delete_ip = DB::table('ips')->where('service_id', '=', $request->id)->delete(); + + if (isset($request->dedicated_ip)) { + DB::insert('INSERT IGNORE INTO ips (id, address, service_id, is_ipv4) values (?, ?, ?, ?)', [ + Str::random(8), + $request->dedicated_ip, + $request->id, + (filter_var($request->dedicated_ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) ? 0 : 1 + ]); + } + + Cache::forget('services_count');//Main page services_count cache + Cache::forget('due_soon');//Main page due_soon cache + Cache::forget('recently_added');//Main page recently_added cache + + 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); + + IPs::deleteIPsAssignedTo($shared->id); + + Cache::forget('services_count');//Main page services_count cache + Cache::forget('due_soon');//Main page due_soon cache + Cache::forget('recently_added');//Main page recently_added cache + + 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..e2f8e7b --- /dev/null +++ b/app/Http/Controllers/YabsController.php @@ -0,0 +1,153 @@ +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_model' => $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 + ]); + + Cache::forget('all_active_servers');//all servers cache + Cache::forget('non_active_servers');//all servers cache + + 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; + $yabs = Yabs::find($id); + $yabs->delete(); + + $disk = DiskSpeed::find($id); + $disk->delete(); + + $network = NetworkSpeed::find($id); + $network->delete(); + + $update_server = DB::table('servers') + ->where('id', $yab->server_id) + ->update(['has_yabs' => 0]); + + 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(); + } + +} diff --git a/app/Models/Labels.php b/app/Models/Labels.php new file mode 100644 index 0000000..68623b7 --- /dev/null +++ b/app/Models/Labels.php @@ -0,0 +1,27 @@ +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..78ecdc4 --- /dev/null +++ b/app/Models/Settings.php @@ -0,0 +1,15 @@ + 'datetime', + ]; +} diff --git a/app/Models/Yabs.php b/app/Models/Yabs.php new file mode 100644 index 0000000..2c5e8e2 --- /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) < 46) { + return array('error_id' => 9, 'error_message' => 'Less than 46 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' || $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]; + $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 @@ + $all_labels + ]); + } +} diff --git a/app/View/Components/LocationsSelect.php b/app/View/Components/LocationsSelect.php new file mode 100644 index 0000000..1b2b9d8 --- /dev/null +++ b/app/View/Components/LocationsSelect.php @@ -0,0 +1,25 @@ + $all_locations + ]); + } +} diff --git a/app/View/Components/OsSelect.php b/app/View/Components/OsSelect.php new file mode 100644 index 0000000..e7f8b07 --- /dev/null +++ b/app/View/Components/OsSelect.php @@ -0,0 +1,20 @@ + $all_os + ]); + } +} 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 @@ + $all_providers + ]); + } +} 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 8ffe938..0000000 Binary files a/assets/favicon.ico and /dev/null differ 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 8cbf4e6..0000000 --- a/calls.php +++ /dev/null @@ -1,109 +0,0 @@ -sessionStartIfNone(); -if (isset($_SESSION['token'])) { - $idle = new idlers(); - if ($_SERVER['REQUEST_METHOD'] === 'GET') { - if (isset($_GET['type'])) { - if ($_GET['type'] == 'server') { - echo $idle->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(); - } - } -} else { - header('HTTP/1.1 401 Unauthorized'); - echo json_encode(array( - 'code' => 401, - 'message' => 'Unauthorized')); - exit; -} diff --git a/class.php b/class.php deleted file mode 100644 index 2d64b70..0000000 --- a/class.php +++ /dev/null @@ -1,4102 +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..f010de3 --- /dev/null +++ b/resources/views/yabs/index.blade.php @@ -0,0 +1,92 @@ +@section('title') {{'YABs'}} @endsection +@section('style') + +@endsection +@section('scripts') + + +@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..4e37b2b --- /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_model }}
    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..cfbad94 --- /dev/null +++ b/routes/api.php @@ -0,0 +1,67 @@ +get('/user', function (Request $request) { + return $request->user(); +}); + +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('IPs/', 'App\Http\Controllers\ApiController@getAllIPs'); +Route::middleware('auth:api')->get('IPs/{id}', 'App\Http\Controllers\ApiController@getIP'); + +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('os/', 'App\Http\Controllers\ApiController@getAllOs'); +Route::middleware('auth:api')->get('os/{id}', 'App\Http\Controllers\ApiController@getOs'); + +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..1e0522d --- /dev/null +++ b/routes/web.php @@ -0,0 +1,72 @@ +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('IPs', IPsController::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('os', OsController::class)->middleware(['auth']); + +Route::resource('providers', ProvidersController::class)->middleware(['auth']); + +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.4to1.5.sql b/update1.4to1.5.sql deleted file mode 100644 index 0c1285c..0000000 --- a/update1.4to1.5.sql +++ /dev/null @@ -1,20 +0,0 @@ -CREATE TABLE IF NOT EXISTS `auth` -( - `user` varchar(64) NOT NULL, - `pass` varchar(255) DEFAULT NULL, - `token` char(32) DEFAULT NULL, - `login_count` int(11) DEFAULT 0, - `login_fails` int(11) DEFAULT 0, - `last_login` datetime DEFAULT NULL, - `last_fail` datetime DEFAULT NULL, - PRIMARY KEY (`user`) -) ENGINE = InnoDB - DEFAULT CHARSET = utf8mb4; - -CREATE TABLE IF NOT EXISTS `login_attempts` -( - `user` varchar(124) DEFAULT NULL, - `ip` varchar(124) DEFAULT NULL, - `datetime` datetime DEFAULT current_timestamp() -) ENGINE = InnoDB - DEFAULT CHARSET = utf8mb4; \ 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 @@ -