diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..213c049 --- /dev/null +++ b/.gitignore @@ -0,0 +1,136 @@ +#------------------------- +# Operating Specific Junk Files +#------------------------- + +# OS X +.DS_Store +.AppleDouble +.LSOverride + +# OS X Thumbnails +._* + +# Windows image file caches +Thumbs.db +ehthumbs.db +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# Linux +*~ + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +#------------------------- +# Environment Files +#------------------------- +# These should never be under version control, +# as it poses a security risk. +.env +.vagrant +Vagrantfile + +#------------------------- +# Temporary Files +#------------------------- +writable/cache/* +!writable/cache/index.html + +writable/logs/* +!writable/logs/index.html + +writable/session/* +!writable/session/index.html + +writable/uploads/* +!writable/uploads/index.html + +writable/debugbar/* + +php_errors.log + +writable/HPILO/* +!writable/HPILO/index.html + +writable/Excel/* +!writable/Excel/index.html + +#------------------------- +# User Guide Temp Files +#------------------------- +user_guide_src/build/* +user_guide_src/cilexer/build/* +user_guide_src/cilexer/dist/* +user_guide_src/cilexer/pycilexer.egg-info/* + +#------------------------- +# Test Files +#------------------------- +tests/coverage* + +# Don't save phpunit under version control. +phpunit + +#------------------------- +# Composer +#------------------------- +composer.lock +vendor/ + +#------------------------- +# IDE / Development Files +#------------------------- + +# Modules Testing +_modules/* + +# phpenv local config +.php-version + +# Jetbrains editors (PHPStorm, etc) +.idea/ +*.iml + +# Netbeans +nbproject/ +build/ +nbbuild/ +nbdist/ +nbactions.xml +nb-configuration.xml +.nb-gradle/ + +# Sublime Text +*.tmlanguage.cache +*.tmPreferences.cache +*.stTheme.cache +*.sublime-workspace +*.sublime-project +.phpintel +/api/ + +# Visual Studio Code +.vscode/ + +/results/ +/phpunit*.xml +/.phpunit.*.cache + +#mapurl 결과물 +public/mapurl/index.html +public/uploads/* \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..0119e5f --- /dev/null +++ b/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2014-2019 British Columbia Institute of Technology +Copyright (c) 2019-2023 CodeIgniter Foundation + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/README.md b/README.md index 9958fc1..d223cdb 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,66 @@ -# servermgrv2 +#Tips +vscode와 Git의 대소문자 구분시키기 +git config core.ignorecase false +# 1. CodeIgniter 4 Application Starter + +`composer create-project codeigniter4/appstarter 프로젝트명` + +## 2. Setup + +php.ini에 extension=intl 필요 +apache의 DocumentRoot "패키지명/public" 수정 후 restart 필요 +Copy `env` to `.env` and tailor for your app, specifically the baseURL and any database settings. +.env 수정 +CI_ENVIRONMENT = development + +# 3. 필요한 추가 패키지 + +composer require saleh7/proxmox-ve_php_api + +## 4. Running Development Server + +php spark serve + +## 5. Web접속 + +개발용 -> localhost:8080 +실서버 -> https://proxmox.idcjp.jp + +## 6. new Controller추가시 Config\Routes.php에 Routing설정 필요 + +$routes->get('/ProxmoxAPI', 'ProxmoxAPI::index'); + +## 7. composer.json의 "psr-4" 수정시 reload + +"psr-4": { +"Tests\\Support\\": "tests/\_support" +"APP\\": "app" +} +composer dump-autoload + +## 8. php spark 사용법 (https://onlinewebtutorblog.com/how-to-work-with-codeigniter-4-model-and-entity-tutorial/) + +- User Table 관련 + php spark migrate:create create_user_table --> table 생성 + php spark migrate --> table 적용 + php spark make:migration update_and_addfield_to_users_table --> 기존 table 내용변경없이 column변경시 + php spark migrate:refresh --> table 수정후 재생성 + php spark migrate:rollback + php spark migrate:status --> 상태보기 + +- 초기 데이터 넣기 + php spark make:seeder user --suffix + php spark db:seed UsersSeeder + +- mvc 생성 --suffix 추가필요 + php spark make:model user --suffix + php spark make:controller user --suffix + php spark make:entity user --suffix + +- auth용 + php spark make:filter AuthGuard + +## 9. Login관련 참조 + +https://www.jurisic.org/post/2022/11/28/How-to-make-simple-Authentication-with-CodeIgniter-4 diff --git a/app/.htaccess b/app/.htaccess new file mode 100644 index 0000000..f24db0a --- /dev/null +++ b/app/.htaccess @@ -0,0 +1,6 @@ + + Require all denied + + + Deny from all + diff --git a/app/Common.php b/app/Common.php new file mode 100644 index 0000000..23e3e61 --- /dev/null +++ b/app/Common.php @@ -0,0 +1,15 @@ + + */ + public array $allowedHostnames = []; + + /** + * -------------------------------------------------------------------------- + * Index File + * -------------------------------------------------------------------------- + * + * Typically this will be your index.php file, unless you've renamed it to + * something else. If you are using mod_rewrite to remove the page set this + * variable so that it is blank. + */ + //public string $indexPage = 'index.php'; + public string $indexPage = ''; + /** + * -------------------------------------------------------------------------- + * URI PROTOCOL + * -------------------------------------------------------------------------- + * + * This item determines which server global should be used to retrieve the + * URI string. The default setting of 'REQUEST_URI' works for most servers. + * If your links do not seem to work, try one of the other delicious flavors: + * + * 'REQUEST_URI' Uses $_SERVER['REQUEST_URI'] + * 'QUERY_STRING' Uses $_SERVER['QUERY_STRING'] + * 'PATH_INFO' Uses $_SERVER['PATH_INFO'] + * + * WARNING: If you set this to 'PATH_INFO', URIs will always be URL-decoded! + */ + public string $uriProtocol = 'REQUEST_URI'; + + /** + * -------------------------------------------------------------------------- + * Default Locale + * -------------------------------------------------------------------------- + * + * The Locale roughly represents the language and location that your visitor + * is viewing the site from. It affects the language strings and other + * strings (like currency markers, numbers, etc), that your program + * should run under for this request. + */ + public string $defaultLocale = 'en'; + + /** + * -------------------------------------------------------------------------- + * Negotiate Locale + * -------------------------------------------------------------------------- + * + * If true, the current Request object will automatically determine the + * language to use based on the value of the Accept-Language header. + * + * If false, no automatic detection will be performed. + */ + public bool $negotiateLocale = false; + + /** + * -------------------------------------------------------------------------- + * Supported Locales + * -------------------------------------------------------------------------- + * + * If $negotiateLocale is true, this array lists the locales supported + * by the application in descending order of priority. If no match is + * found, the first locale will be used. + * + * @var string[] + */ + public array $supportedLocales = ['en']; + + /** + * -------------------------------------------------------------------------- + * Application Timezone + * -------------------------------------------------------------------------- + * + * The default timezone that will be used in your application to display + * dates with the date helper, and can be retrieved through app_timezone() + */ + public string $appTimezone = 'UTC'; + + /** + * -------------------------------------------------------------------------- + * Default Character Set + * -------------------------------------------------------------------------- + * + * This determines which character set is used by default in various methods + * that require a character set to be provided. + * + * @see http://php.net/htmlspecialchars for a list of supported charsets. + */ + public string $charset = 'UTF-8'; + + /** + * -------------------------------------------------------------------------- + * URI PROTOCOL + * -------------------------------------------------------------------------- + * + * If true, this will force every request made to this application to be + * made via a secure connection (HTTPS). If the incoming request is not + * secure, the user will be redirected to a secure version of the page + * and the HTTP Strict Transport Security header will be set. + */ + public bool $forceGlobalSecureRequests = false; + + /** + * -------------------------------------------------------------------------- + * Session Driver + * -------------------------------------------------------------------------- + * + * The session storage driver to use: + * - `CodeIgniter\Session\Handlers\FileHandler` + * - `CodeIgniter\Session\Handlers\DatabaseHandler` + * - `CodeIgniter\Session\Handlers\MemcachedHandler` + * - `CodeIgniter\Session\Handlers\RedisHandler` + * + * @deprecated use Config\Session::$driver instead. + */ + public string $sessionDriver = FileHandler::class; + + /** + * -------------------------------------------------------------------------- + * Session Cookie Name + * -------------------------------------------------------------------------- + * + * The session cookie name, must contain only [0-9a-z_-] characters + * + * @deprecated use Config\Session::$cookieName instead. + */ + public string $sessionCookieName = 'ci_session'; + + /** + * -------------------------------------------------------------------------- + * Session Expiration + * -------------------------------------------------------------------------- + * + * The number of SECONDS you want the session to last. + * Setting to 0 (zero) means expire when the browser is closed. + * + * @deprecated use Config\Session::$expiration instead. + */ + public int $sessionExpiration = 7200; + + /** + * -------------------------------------------------------------------------- + * Session Save Path + * -------------------------------------------------------------------------- + * + * The location to save sessions to and is driver dependent. + * + * For the 'files' driver, it's a path to a writable directory. + * WARNING: Only absolute paths are supported! + * + * For the 'database' driver, it's a table name. + * Please read up the manual for the format with other session drivers. + * + * IMPORTANT: You are REQUIRED to set a valid save path! + * + * @deprecated use Config\Session::$savePath instead. + */ + public string $sessionSavePath = WRITEPATH . 'session'; + + /** + * -------------------------------------------------------------------------- + * Session Match IP + * -------------------------------------------------------------------------- + * + * Whether to match the user's IP address when reading the session data. + * + * WARNING: If you're using the database driver, don't forget to update + * your session table's PRIMARY KEY when changing this setting. + * + * @deprecated use Config\Session::$matchIP instead. + */ + public bool $sessionMatchIP = false; + + /** + * -------------------------------------------------------------------------- + * Session Time to Update + * -------------------------------------------------------------------------- + * + * How many seconds between CI regenerating the session ID. + * + * @deprecated use Config\Session::$timeToUpdate instead. + */ + public int $sessionTimeToUpdate = 300; + + /** + * -------------------------------------------------------------------------- + * Session Regenerate Destroy + * -------------------------------------------------------------------------- + * + * Whether to destroy session data associated with the old session ID + * when auto-regenerating the session ID. When set to FALSE, the data + * will be later deleted by the garbage collector. + * + * @deprecated use Config\Session::$regenerateDestroy instead. + */ + public bool $sessionRegenerateDestroy = false; + + /** + * -------------------------------------------------------------------------- + * Session Database Group + * -------------------------------------------------------------------------- + * + * DB Group for the database session. + * + * @deprecated use Config\Session::$DBGroup instead. + */ + public ?string $sessionDBGroup = null; + + /** + * -------------------------------------------------------------------------- + * Cookie Prefix + * -------------------------------------------------------------------------- + * + * Set a cookie name prefix if you need to avoid collisions. + * + * @deprecated use Config\Cookie::$prefix property instead. + */ + public string $cookiePrefix = ''; + + /** + * -------------------------------------------------------------------------- + * Cookie Domain + * -------------------------------------------------------------------------- + * + * Set to `.your-domain.com` for site-wide cookies. + * + * @deprecated use Config\Cookie::$domain property instead. + */ + public string $cookieDomain = ''; + + /** + * -------------------------------------------------------------------------- + * Cookie Path + * -------------------------------------------------------------------------- + * + * Typically will be a forward slash. + * + * @deprecated use Config\Cookie::$path property instead. + */ + public string $cookiePath = '/'; + + /** + * -------------------------------------------------------------------------- + * Cookie Secure + * -------------------------------------------------------------------------- + * + * Cookie will only be set if a secure HTTPS connection exists. + * + * @deprecated use Config\Cookie::$secure property instead. + */ + public bool $cookieSecure = false; + + /** + * -------------------------------------------------------------------------- + * Cookie HttpOnly + * -------------------------------------------------------------------------- + * + * Cookie will only be accessible via HTTP(S) (no JavaScript). + * + * @deprecated use Config\Cookie::$httponly property instead. + */ + public bool $cookieHTTPOnly = true; + + /** + * -------------------------------------------------------------------------- + * Cookie SameSite + * -------------------------------------------------------------------------- + * + * Configure cookie SameSite setting. Allowed values are: + * - None + * - Lax + * - Strict + * - '' + * + * Alternatively, you can use the constant names: + * - `Cookie::SAMESITE_NONE` + * - `Cookie::SAMESITE_LAX` + * - `Cookie::SAMESITE_STRICT` + * + * Defaults to `Lax` for compatibility with modern browsers. Setting `''` + * (empty string) means default SameSite attribute set by browsers (`Lax`) + * will be set on cookies. If set to `None`, `$cookieSecure` must also be set. + * + * @deprecated use Config\Cookie::$samesite property instead. + */ + public ?string $cookieSameSite = 'Lax'; + + /** + * -------------------------------------------------------------------------- + * Reverse Proxy IPs + * -------------------------------------------------------------------------- + * + * If your server is behind a reverse proxy, you must whitelist the proxy + * IP addresses from which CodeIgniter should trust headers such as + * X-Forwarded-For or Client-IP in order to properly identify + * the visitor's IP address. + * + * You need to set a proxy IP address or IP address with subnets and + * the HTTP header for the client IP address. + * + * Here are some examples: + * [ + * '10.0.1.200' => 'X-Forwarded-For', + * '192.168.5.0/24' => 'X-Real-IP', + * ] + * + * @var array + */ + public array $proxyIPs = []; + + /** + * -------------------------------------------------------------------------- + * CSRF Token Name + * -------------------------------------------------------------------------- + * + * The token name. + * + * @deprecated Use `Config\Security` $tokenName property instead of using this property. + */ + public string $CSRFTokenName = 'csrf_test_name'; + + /** + * -------------------------------------------------------------------------- + * CSRF Header Name + * -------------------------------------------------------------------------- + * + * The header name. + * + * @deprecated Use `Config\Security` $headerName property instead of using this property. + */ + public string $CSRFHeaderName = 'X-CSRF-TOKEN'; + + /** + * -------------------------------------------------------------------------- + * CSRF Cookie Name + * -------------------------------------------------------------------------- + * + * The cookie name. + * + * @deprecated Use `Config\Security` $cookieName property instead of using this property. + */ + public string $CSRFCookieName = 'csrf_cookie_name'; + + /** + * -------------------------------------------------------------------------- + * CSRF Expire + * -------------------------------------------------------------------------- + * + * The number in seconds the token should expire. + * + * @deprecated Use `Config\Security` $expire property instead of using this property. + */ + public int $CSRFExpire = 7200; + + /** + * -------------------------------------------------------------------------- + * CSRF Regenerate + * -------------------------------------------------------------------------- + * + * Regenerate token on every submission? + * + * @deprecated Use `Config\Security` $regenerate property instead of using this property. + */ + public bool $CSRFRegenerate = true; + + /** + * -------------------------------------------------------------------------- + * CSRF Redirect + * -------------------------------------------------------------------------- + * + * Redirect to previous page with error on failure? + * + * @deprecated Use `Config\Security` $redirect property instead of using this property. + */ + public bool $CSRFRedirect = false; + + /** + * -------------------------------------------------------------------------- + * CSRF SameSite + * -------------------------------------------------------------------------- + * + * Setting for CSRF SameSite cookie token. Allowed values are: + * - None + * - Lax + * - Strict + * - '' + * + * Defaults to `Lax` as recommended in this link: + * + * @see https://portswigger.net/web-security/csrf/samesite-cookies + * + * @deprecated `Config\Cookie` $samesite property is used. + */ + public string $CSRFSameSite = 'Lax'; + + /** + * -------------------------------------------------------------------------- + * Content Security Policy + * -------------------------------------------------------------------------- + * + * Enables the Response's Content Secure Policy to restrict the sources that + * can be used for images, scripts, CSS files, audio, video, etc. If enabled, + * the Response object will populate default values for the policy from the + * `ContentSecurityPolicy.php` file. Controllers can always add to those + * restrictions at run time. + * + * For a better understanding of CSP, see these documents: + * + * @see http://www.html5rocks.com/en/tutorials/security/content-security-policy/ + * @see http://www.w3.org/TR/CSP/ + */ + public bool $CSPEnabled = false; +} diff --git a/app/Config/Autoload.php b/app/Config/Autoload.php new file mode 100644 index 0000000..abd9df9 --- /dev/null +++ b/app/Config/Autoload.php @@ -0,0 +1,97 @@ + SYSTEMPATH, + * 'App' => APPPATH + * ]; + * + * @var array|string> + * @phpstan-var array> + */ + public $psr4 = [ + APP_NAMESPACE => APPPATH, // For custom app namespace + 'Config' => APPPATH . 'Config', + ]; + + /** + * ------------------------------------------------------------------- + * Class Map + * ------------------------------------------------------------------- + * The class map provides a map of class names and their exact + * location on the drive. Classes loaded in this manner will have + * slightly faster performance because they will not have to be + * searched for within one or more directories as they would if they + * were being autoloaded through a namespace. + * + * Prototype: + * $classmap = [ + * 'MyClass' => '/path/to/class/file.php' + * ]; + * + * @var array + */ + public $classmap = []; + + /** + * ------------------------------------------------------------------- + * Files + * ------------------------------------------------------------------- + * The files array provides a list of paths to __non-class__ files + * that will be autoloaded. This can be useful for bootstrap operations + * or for loading functions. + * + * Prototype: + * $files = [ + * '/path/to/my/file.php', + * ]; + * + * @var string[] + * @phpstan-var list + */ + public $files = []; + + /** + * ------------------------------------------------------------------- + * Helpers + * ------------------------------------------------------------------- + * Prototype: + * $helpers = [ + * 'form', + * ]; + * + * @var string[] + * @phpstan-var list + */ + public $helpers = []; +} diff --git a/app/Config/Boot/development.php b/app/Config/Boot/development.php new file mode 100644 index 0000000..05a8612 --- /dev/null +++ b/app/Config/Boot/development.php @@ -0,0 +1,32 @@ + + */ + public array $file = [ + 'storePath' => WRITEPATH . 'cache/', + 'mode' => 0640, + ]; + + /** + * ------------------------------------------------------------------------- + * Memcached settings + * ------------------------------------------------------------------------- + * Your Memcached servers can be specified below, if you are using + * the Memcached drivers. + * + * @see https://codeigniter.com/user_guide/libraries/caching.html#memcached + * + * @var array + */ + public array $memcached = [ + 'host' => '127.0.0.1', + 'port' => 11211, + 'weight' => 1, + 'raw' => false, + ]; + + /** + * ------------------------------------------------------------------------- + * Redis settings + * ------------------------------------------------------------------------- + * Your Redis server can be specified below, if you are using + * the Redis or Predis drivers. + * + * @var array + */ + public array $redis = [ + 'host' => '127.0.0.1', + 'password' => null, + 'port' => 6379, + 'timeout' => 0, + 'database' => 0, + ]; + + /** + * -------------------------------------------------------------------------- + * Available Cache Handlers + * -------------------------------------------------------------------------- + * + * This is an array of cache engine alias' and class names. Only engines + * that are listed here are allowed to be used. + * + * @var array + */ + public array $validHandlers = [ + 'dummy' => DummyHandler::class, + 'file' => FileHandler::class, + 'memcached' => MemcachedHandler::class, + 'predis' => PredisHandler::class, + 'redis' => RedisHandler::class, + 'wincache' => WincacheHandler::class, + ]; +} diff --git a/app/Config/Constants.php b/app/Config/Constants.php new file mode 100644 index 0000000..08431df --- /dev/null +++ b/app/Config/Constants.php @@ -0,0 +1,202 @@ + [ + 'path' => 'layouts' . DIRECTORY_SEPARATOR . 'empty', + 'stylesheets' => [ + '', + '', + ], + 'javascripts' => [ + '', + ] + ], + 'front' => [ + 'path' => 'layouts' . DIRECTORY_SEPARATOR . 'front', + 'stylesheets' => [ + '', + '', + '', + '', + ], + 'javascripts' => [ + '', + '', + '', + ] + ], + 'admin' => [ + 'path' => 'layouts' . DIRECTORY_SEPARATOR . 'admin', + 'stylesheets' => [ + '', + '', + '', + '', + ], + 'javascripts' => [ + '', + '', + '', + ] + ] +]); + +//Login 관련 +define('LOGINS', [ + 'ISLOGIN' => getenv('login.islogin.name') ? getenv('login.islogin.name') : "isLoggedIn", + 'RETURN_URL' => getenv('login.return_url.name') ? getenv('login.return_url.name') : "return_url", +]); + +//인증 관련 +define('AUTHS', [ + 'DEBUG' => getenv('auth.debug') == 'true' ? true : false, + 'ADAPTERS' => getenv('auth.adapters') ? implode(",", getenv('auth.adapters')) : ['Local', 'Google'], + 'GOOGLE' => [ + 'ICON' => '', + 'CLIENT_ID' => getenv("auth.google.client.id"), + 'CLIENT_KEY' => getenv("auth.google.client.key"), + 'CALLBACK_URL' => getenv("auth.google.client.callback_url"), + 'TOKEN_NAME' => getenv('auth.google.client.token_name') ? getenv('auth.google.client.token_name') : "access_token", + ], +]); + +//SITE_Default 정의 +define('DEFAULTS', [ + 'ROLE' => getenv('default.role') ? getenv('default.role') : "user", + 'STATUS' => getenv('default.status') ? getenv('default.status') : "use", + 'EMPTY' => getenv('default.empty') ? getenv('default.empty') : "", + 'PERPAGE' => getenv('default.perpage') ? getenv('default.perpage') : 20, + 'EXCEL_PATH' => getenv('default.excel_path') ? getenv('default.excel_path') : "../writable/Excel", +]); +if (!is_dir(DEFAULTS['EXCEL_PATH'])) { + mkdir(DEFAULTS['EXCEL_PATH'], 0640); +} + +//Upload , Download 관련 +define('FILES', [ + 'UPLOADS' => ['mode' => 0600, 'path' => 'uploads'], + 'DOWNLOADS' => ['mode' => 0600, 'path' => 'downloads'], +]); + +//아이콘 및 Sound관련 +define('ICONS', [ + 'NEW' => '', + 'DELETE' => '', + 'RELOAD' => '', + 'SETTING' => '', + 'FLAG' => '', + 'EXCEL' => '', +]); +define('AUDIOS', [ + 'Alram_GetEmail' => '', +]); + +//HPILO 관련 +define( + 'HPILOS', + [ + 'PATH' => getenv('hpilo.path') ? getenv('hpilo.path') : "../writable/HPILO", + 'ADAPTER' => getenv('hpilo.adapter') ? getenv('hpilo.adapter') : "\App\Libraries\Adapter\API\GuzzleAdapter", + 'DEBUG' => getenv('hpilo.debug') == 'true' ? true : false, + 'SSL' => getenv('hpilo.ssl') == 'true' ? true : false, + 'GUZZLE_COOKIE' => getenv('hpilo.guzzle.cookie') == 'true' ? true : false, + 'CURL_COOKIE_FILE' => getenv('hpilo.curl.cookie.file') ? getenv('hpilo.curl.cookie.file') : "/cookie.txt", + 'CURL_DEBUG_FILE' => getenv('hpilo.curl.debug.file') ? getenv('hpilo.curl.debug.file') : "/debug.txt", + ] +); +if (!is_dir(HPILOS['PATH'])) { + mkdir(HPILOS['PATH'], 0640); +} diff --git a/app/Config/ContentSecurityPolicy.php b/app/Config/ContentSecurityPolicy.php new file mode 100644 index 0000000..18612e1 --- /dev/null +++ b/app/Config/ContentSecurityPolicy.php @@ -0,0 +1,176 @@ +` element. + * + * Will default to self if not overridden + * + * @var string|string[]|null + */ + public $baseURI; + + /** + * Lists the URLs for workers and embedded frame contents + * + * @var string|string[] + */ + public $childSrc = 'self'; + + /** + * Limits the origins that you can connect to (via XHR, + * WebSockets, and EventSource). + * + * @var string|string[] + */ + public $connectSrc = 'self'; + + /** + * Specifies the origins that can serve web fonts. + * + * @var string|string[] + */ + public $fontSrc; + + /** + * Lists valid endpoints for submission from `
` tags. + * + * @var string|string[] + */ + public $formAction = 'self'; + + /** + * Specifies the sources that can embed the current page. + * This directive applies to ``, ` + +
+include('templates/admin/footer'); ?> +endSection() ?> \ No newline at end of file diff --git a/app/Views/admin/hpilo/console_info.php b/app/Views/admin/hpilo/console_info.php new file mode 100644 index 0000000..f5f9b22 --- /dev/null +++ b/app/Views/admin/hpilo/console_info.php @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + + + + \ No newline at end of file diff --git a/app/Views/admin/hpilo/console_irc.php b/app/Views/admin/hpilo/console_irc.php new file mode 100644 index 0000000..57caa0c --- /dev/null +++ b/app/Views/admin/hpilo/console_irc.php @@ -0,0 +1,1523 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+
+ + + +
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+ + + + SSL + + + + +
+
+
+
+ + + + + + + + + + \ No newline at end of file diff --git a/app/Views/admin/hpilo/console_shell.php b/app/Views/admin/hpilo/console_shell.php new file mode 100644 index 0000000..b2952b1 --- /dev/null +++ b/app/Views/admin/hpilo/console_shell.php @@ -0,0 +1,139 @@ +#!/bin/bash +#####참고 : https://gist.github.com/kiler129/904fe463b008e740315c4abaf33c68af +### HANDLE VERSION PICK +if [[ -z "$ILO_VERSION" ]]; then ILO_VERSION="4"; fi; +case $ILO_VERSION in + "2") + ILO_JAR=html/intgapp_228.jar; ;; + "3") + ILO_JAR=html/intgapp3_231.jar; ;; + "4") + ILO_JAR=html/intgapp4_231.jar; ;; + *) + echo "iLO $ILO_VERSION is not supported" + exit 1; +esac +echo "Connecting to iLO $ILO_VERSION (set ILO_VERSION to change)" + +### HOST +echo -n 'iLO Host' +if [[ ! -z "$ILO_HOST" ]]; then + if [[ -z "$ILO_SKIP_DEFAULTS" ]]; then + echo -n " [$ILO_HOST]: " + read ILO_NEW_HOST + if [[ ! -z $ILO_NEW_HOST ]]; then ILO_HOST=$ILO_NEW_HOST; fi; + else + echo ": $ILO_HOST" + fi; +else + echo -n ': ' + read ILO_HOST +fi; +if [[ -z "$ILO_HOST" ]]; then + echo "Empty host - aborted." + exit 1 +fi; + +### LOGIN +# While -i exists it's not portable +echo -n 'iLO Login' +if [[ ! -z "$ILO_LOGIN" ]]; then + if [[ -z "$ILO_SKIP_DEFAULTS" ]]; then + echo -n " [$ILO_LOGIN]: " + read ILO_NEW_LOGIN; + if [[ ! -z $ILO_NEW_LOGIN ]]; then ILO_LOGIN=$ILO_NEW_LOGIN; fi; + else + echo ": $ILO_LOGIN" + fi; +else + echo -n ': ' + read ILO_LOGIN +fi; +if [[ -z "$ILO_LOGIN" ]]; then + echo "Empty login - aborted." + exit 1 +fi; + +### PASSWORD +echo -n 'iLO Password: ' +read -s ILO_PASSWORD +echo; + +ILO_ADDRESS="$ILO_HOST" +if [[ ! "$ILO_ADDRESS" =~ ^"https://".* ]]; then ILO_ADDRESS="https://$ILO_ADDRESS"; fi; +if [[ ! "$ILO_ADDRESS" =~ .*"/$" ]]; then ILO_ADDRESS="$ILO_ADDRESS/"; fi; + +### AUTO-PROXY +if [[ ! -z "$ILO_AUTOPROXY" ]]; then + ILO_AUTOPROXY_HOST=$(echo $ILO_ADDRESS|cut -d/ -f3) + + if ! command -v mitmdump &> /dev/null; then + echo "Cannot find mitmdump (part of mitmproxy package) - it is required for ILO_AUTOPROXY" + exit 1 + fi + + if ! command -v socat &> /dev/null; then + echo "Cannot find socat - it is required for ILO_AUTOPROXY" + exit 1 + fi + + trap "kill 0" EXIT + # See https://support.hpe.com/hpesc/public/docDisplay?docId=emr_na-a00045334en_us + mitmdump --ssl-insecure -p 9443 --set tls_version_server_min=UNBOUNDED --mode reverse:$ILO_ADDRESS & + socat TCP4-LISTEN:17988,fork,reuseaddr,bind=127.0.0.1 TCP4:$ILO_AUTOPROXY_HOST:17988 & + socat TCP4-LISTEN:17990,fork,reuseaddr,bind=127.0.0.1 TCP4:$ILO_AUTOPROXY_HOST:17990 & + sleep 2 # let mitmdump start + ILO_ADDRESS="https://127.0.0.1:9443/" +fi; + +ILO_SESSKEY=$( + curl -fsS \ + --insecure \ + "${ILO_ADDRESS}json/login_session" \ + --data "{\"method\":\"login\",\"user_login\":\"$ILO_LOGIN\",\"password\":\"$ILO_PASSWORD\"}" | + sed 's/.*"session_key":"\([a-f0-9]\{32\}\)".*/\1/' +); +if [[ -z "$ILO_SESSKEY" ]]; then + echo "Failed to retrieve key. Wrong password or banned?" + exit 1 +fi; + + +# normal mktemp will not work with higher Java security settings +ILO_JNLP="$HOME/.iLO.jnlp" + +cat >"$ILO_JNLP" < + + + Integrated Remote Console + HPE + + + + + + + + + + + + + + + + + + + +eof + +echo "Starting iLO console..." +if [[ ! -z "$ILO_AUTOPROXY" ]]; then + echo "Console will appear soon. DO NOT close this window! (using autoproxy)" + javaws -wait $ILO_JNLP; rm $ILO_JNLP +else + nohup sh -c "/usr/bin/env javaws -wait $ILO_JNLP; rm $ILO_JNLP" >/dev/null 2>&1 & + echo "Console started. You CAN close this window." +fi; \ No newline at end of file diff --git a/app/Views/admin/hpilo/index.php b/app/Views/admin/hpilo/index.php new file mode 100644 index 0000000..950bb91 --- /dev/null +++ b/app/Views/admin/hpilo/index.php @@ -0,0 +1,47 @@ +extend('layouts/admin') ?> +section('content') ?> +include('templates/admin/header'); ?> +
+
+ "get")) ?> + + +
+
+ + + + + + + + + + onClick="indexRowCheckBoxToggle(this);"> + + + + + + + + +
번호작업
+ "checkbox_uid_{$row['uid']}", "name" => "batchjob_uids[]", "value" => $row['uid'], "class" => "batchjobuids_checkboxs"]); ?> + "_self"]) ?> + "btn btn-sm btn-danger btn-circle", "target" => "_self"]) ?>
+ + +
+
+ +
+
+include('templates/admin/footer'); ?> +endSection() ?> \ No newline at end of file diff --git a/app/Views/admin/hpilo/insert.php b/app/Views/admin/hpilo/insert.php new file mode 100644 index 0000000..46843a0 --- /dev/null +++ b/app/Views/admin/hpilo/insert.php @@ -0,0 +1,24 @@ +extend('layouts/admin') ?> +section('content') ?> +include('templates/admin/header'); ?> + + + + + + + + + + + +
+ + + + +
"btn btn-outline btn-primary")); ?>
+ +getFlashdata('error')) : ?>getFlashdata('error') ?> +include('templates/admin/footer'); ?> +endSection() ?> \ No newline at end of file diff --git a/app/Views/admin/hpilo/update.php b/app/Views/admin/hpilo/update.php new file mode 100644 index 0000000..4d27080 --- /dev/null +++ b/app/Views/admin/hpilo/update.php @@ -0,0 +1,24 @@ +extend('layouts/admin') ?> +section('content') ?> +include('templates/admin/header'); ?> + + + + + + + + + + + +
+ + + $field : old($field), $fieldFormOptions) ?> + +
"btn btn-outline btn-primary")); ?>
+ +getFlashdata('error')) : ?>getFlashdata('error') ?> +include('templates/admin/footer'); ?> +endSection() ?> \ No newline at end of file diff --git a/app/Views/admin/hpilo/view.php b/app/Views/admin/hpilo/view.php new file mode 100644 index 0000000..3084165 --- /dev/null +++ b/app/Views/admin/hpilo/view.php @@ -0,0 +1,15 @@ +extend('layouts/admin') ?> +section('content') ?> +include('templates/admin/header'); ?> + + + + + + + +
+ +
+include('templates/admin/footer'); ?> +endSection() ?> \ No newline at end of file diff --git a/app/Views/admin/index.php b/app/Views/admin/index.php new file mode 100644 index 0000000..7c940c3 --- /dev/null +++ b/app/Views/admin/index.php @@ -0,0 +1,89 @@ +extend('layouts/admin') ?> +section('content') ?> + +
+ +
+
+
+
+
+
+
+ + +
+
+
+
+ +
+
+ + +
+
+
+
+
+
+
day7_server
+
최근 7일간 신규서버 대수
+
+
+
+ +
+
+ + +
+
+
+
+
+
+
0
+
요청업무 알림
+
+
+
+ +
+
+ + +
+
+
+
+
+
+
deposit_server
+
금일 기준 미납 서버
+
+
+
+ +
+
+ +
+ +endSection() ?> \ No newline at end of file diff --git a/app/Views/admin/logger/index.php b/app/Views/admin/logger/index.php new file mode 100644 index 0000000..1eaa5c4 --- /dev/null +++ b/app/Views/admin/logger/index.php @@ -0,0 +1,46 @@ +extend('layouts/admin') ?> +section('content') ?> +include('templates/admin/header'); ?> +
+
+ "get")) ?> + + +
+
+ + + + + + + + + + + + + + + + +
번호
+ "checkbox_uid_{$row['uid']}", "name" => "batchjob_uids[]", "value" => $row['uid'], "class" => "batchjobuids_checkboxs"]); ?> + +
+ + +
+
+ +
+
+include('templates/admin/footer'); ?> +endSection() ?> \ No newline at end of file diff --git a/app/Views/admin/logger/view.php b/app/Views/admin/logger/view.php new file mode 100644 index 0000000..8b930a7 --- /dev/null +++ b/app/Views/admin/logger/view.php @@ -0,0 +1,15 @@ +extend('layouts/admin') ?> +section('content') ?> +include('templates/admin/header'); ?> + + + + + + + +
+ +
+include('templates/admin/footer'); ?> +endSection() ?> \ No newline at end of file diff --git a/app/Views/admin/user/index.php b/app/Views/admin/user/index.php new file mode 100644 index 0000000..60e0415 --- /dev/null +++ b/app/Views/admin/user/index.php @@ -0,0 +1,49 @@ +extend('layouts/admin') ?> +section('content') ?> +include('templates/admin/header'); ?> +
+
+ "get")) ?> + + +
+
+ + + + + + + + + + onClick="indexRowCheckBoxToggle(this);"> + + + + + + + + +
번호작업
+ "checkbox_uid_{$row['uid']}", "name" => "batchjob_uids[]", "value" => $row['uid'], "class" => "batchjobuids_checkboxs"]); ?> + "_self"]) ?> + "btn btn-sm btn-danger btn-circle", "target" => "_self"]) ?>
+ + +
+
+ +
+
+include('templates/admin/footer'); ?> +endSection() ?> \ No newline at end of file diff --git a/app/Views/admin/user/insert.php b/app/Views/admin/user/insert.php new file mode 100644 index 0000000..92c5033 --- /dev/null +++ b/app/Views/admin/user/insert.php @@ -0,0 +1,24 @@ +extend('layouts/admin') ?> +section('content') ?> +include('templates/admin/header'); ?> + + + + + + + + + + + +
+ + + + +
"btn btn-outline btn-primary")); ?>
+ +getFlashdata('error')) : ?>getFlashdata('error') ?> +include('templates/admin/footer'); ?> +endSection() ?> \ No newline at end of file diff --git a/app/Views/admin/user/update.php b/app/Views/admin/user/update.php new file mode 100644 index 0000000..164f1c1 --- /dev/null +++ b/app/Views/admin/user/update.php @@ -0,0 +1,22 @@ +extend('layouts/admin') ?> +section('content') ?> +include('templates/admin/header'); ?> + + + + + + + + + +
+ + + $field:old($field),$fieldFormOptions) ?> + +
"btn btn-outline btn-primary")); ?>
+ +getFlashdata('error')):?>getFlashdata('error') ?> +include('templates/admin/footer'); ?> +endSection() ?> \ No newline at end of file diff --git a/app/Views/admin/user/view.php b/app/Views/admin/user/view.php new file mode 100644 index 0000000..42f6d8d --- /dev/null +++ b/app/Views/admin/user/view.php @@ -0,0 +1,15 @@ +extend('layouts/admin') ?> +section('content') ?> +include('templates/admin/header'); ?> + + + + + + + +
+ +
+include('templates/admin/footer'); ?> +endSection() ?> \ No newline at end of file diff --git a/app/Views/admin/usersns/index.php b/app/Views/admin/usersns/index.php new file mode 100644 index 0000000..b2f35d9 --- /dev/null +++ b/app/Views/admin/usersns/index.php @@ -0,0 +1,48 @@ +extend('layouts/admin') ?> +section('content') ?> +include('templates/admin/header'); ?> +
+
+ "get")) ?> + + +
+
+ + + + + + + + + + + + + + + + + + +
번호작업
+ "checkbox_uid_{$row['uid']}", "name" => "batchjob_uids[]", "value" => $row['uid'], "class" => "batchjobuids_checkboxs"]); ?> + + "btn btn-sm btn-danger btn-circle", "target" => "_self"]) ?>
+ + +
+
+ +
+
+include('templates/admin/footer'); ?> +endSection() ?> \ No newline at end of file diff --git a/app/Views/auth/login.php b/app/Views/auth/login.php new file mode 100644 index 0000000..a01e687 --- /dev/null +++ b/app/Views/auth/login.php @@ -0,0 +1,38 @@ +extend('layouts/empty') ?> +section('content') ?> +
+ + + + + + + + + + getFlashdata('error')) : ?> + + + + +
+ $login_button) : ?> + + +
+ + + + + + + + + +
계정
암호
+
+ getFlashdata('error') ?> +
+ +
+endSection() ?> \ No newline at end of file diff --git a/app/Views/auth/login_v1.php b/app/Views/auth/login_v1.php new file mode 100644 index 0000000..fc0369d --- /dev/null +++ b/app/Views/auth/login_v1.php @@ -0,0 +1,58 @@ +extend('layouts/empty') ?> +section('content') ?> + +
+
+
+
Sample image
+
+
+
+

Sign in with

+
+
+

Or

+
+ +
+ +
+
+ +
Forgot password? +
+
+

Don't have an account? Register

+
+
+
+
+
+
+ +
Copyright © 2020. All rights reserved.
+ + +
+ +
+
+endSection() ?> \ No newline at end of file diff --git a/app/Views/errors/cli/error_404.php b/app/Views/errors/cli/error_404.php new file mode 100644 index 0000000..456ea3e --- /dev/null +++ b/app/Views/errors/cli/error_404.php @@ -0,0 +1,7 @@ +getFile()) . ':' . $exception->getLine(), 'green')); +CLI::newLine(); + +// The backtrace +if (defined('SHOW_DEBUG_BACKTRACE') && SHOW_DEBUG_BACKTRACE) { + $backtraces = $exception->getTrace(); + + if ($backtraces) { + CLI::write('Backtrace:', 'green'); + } + + foreach ($backtraces as $i => $error) { + $padFile = ' '; // 4 spaces + $padClass = ' '; // 7 spaces + $c = str_pad($i + 1, 3, ' ', STR_PAD_LEFT); + + if (isset($error['file'])) { + $filepath = clean_path($error['file']) . ':' . $error['line']; + + CLI::write($c . $padFile . CLI::color($filepath, 'yellow')); + } else { + CLI::write($c . $padFile . CLI::color('[internal function]', 'yellow')); + } + + $function = ''; + + if (isset($error['class'])) { + $type = ($error['type'] === '->') ? '()' . $error['type'] : $error['type']; + $function .= $padClass . $error['class'] . $type . $error['function']; + } elseif (! isset($error['class']) && isset($error['function'])) { + $function .= $padClass . $error['function']; + } + + $args = implode(', ', array_map(static function ($value) { + switch (true) { + case is_object($value): + return 'Object(' . get_class($value) . ')'; + + case is_array($value): + return count($value) ? '[...]' : '[]'; + + case $value === null: + return 'null'; // return the lowercased version + + default: + return var_export($value, true); + } + }, array_values($error['args'] ?? []))); + + $function .= '(' . $args . ')'; + + CLI::write($function); + CLI::newLine(); + } +} diff --git a/app/Views/errors/cli/production.php b/app/Views/errors/cli/production.php new file mode 100644 index 0000000..7db744e --- /dev/null +++ b/app/Views/errors/cli/production.php @@ -0,0 +1,5 @@ + + + + + <?= lang('Errors.pageNotFound') ?> + + + + +
+

404

+ +

+ + + + + +

+
+ + diff --git a/app/Views/errors/html/error_exception.php b/app/Views/errors/html/error_exception.php new file mode 100644 index 0000000..ae46d30 --- /dev/null +++ b/app/Views/errors/html/error_exception.php @@ -0,0 +1,397 @@ + + + + + + + + <?= esc($title) ?> + + + + + + + +
+
+

getCode() ? ' #' . $exception->getCode() : '') ?>

+

+ getMessage())) ?> + getMessage())) ?>" + rel="noreferrer" target="_blank">search → +

+
+
+ + +
+

at line

+ + +
+ +
+ +
+ +
+ + + +
+ + +
+ +
    + $row) : ?> + +
  1. +

    + + + + + {PHP internal code} + + + + +   —   + + + ( arguments ) +

    + + + getParameters(); + } + + foreach ($row['args'] as $key => $value) : ?> + + + + + + +
    name : "#{$key}") ?>
    +
    + + () + + + + +   —   () + +

    + + + +
    + +
    + +
  2. + + +
+ +
+ + +
+ + + +

$

+ + + + + + + + + + $value) : ?> + + + + + + +
KeyValue
+ + + +
+ +
+ + + + + + +

Constants

+ + + + + + + + + + $value) : ?> + + + + + + +
KeyValue
+ + + +
+ +
+ +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PathgetUri()) ?>
HTTP MethodgetMethod())) ?>
IP AddressgetIPAddress()) ?>
Is AJAX Request?isAJAX() ? 'yes' : 'no' ?>
Is CLI Request?isCLI() ? 'yes' : 'no' ?>
Is Secure Request?isSecure() ? 'yes' : 'no' ?>
User AgentgetUserAgent()->getAgentString()) ?>
+ + + + + + + + +

$

+ + + + + + + + + + $value) : ?> + + + + + + +
KeyValue
+ + + +
+ +
+ + + + + +
+ No $_GET, $_POST, or $_COOKIE Information to show. +
+ + + + headers(); ?> + + +

Headers

+ + + + + + + + + + + + + + + + + + + +
HeaderValue
getName(), 'html') ?>getValueLine(), 'html') ?>
+ + +
+ + + setStatusCode(http_response_code()); + ?> +
+ + + + + +
Response StatusgetStatusCode() . ' - ' . $response->getReasonPhrase()) ?>
+ + headers(); ?> + + + +

Headers

+ + + + + + + + + + $value) : ?> + + + + + + +
HeaderValue
getHeaderLine($name), 'html') ?>
+ + +
+ + +
+ + +
    + +
  1. + +
+
+ + +
+ + + + + + + + + + + + + + + + +
Memory Usage
Peak Memory Usage:
Memory Limit:
+ +
+ +
+ +
+ + + + + diff --git a/app/Views/errors/html/production.php b/app/Views/errors/html/production.php new file mode 100644 index 0000000..2f59a8d --- /dev/null +++ b/app/Views/errors/html/production.php @@ -0,0 +1,25 @@ + + + + + + + <?= lang('Errors.whoops') ?> + + + + + +
+ +

+ +

+ +
+ + + + diff --git a/app/Views/layouts/admin.php b/app/Views/layouts/admin.php new file mode 100644 index 0000000..1881ce6 --- /dev/null +++ b/app/Views/layouts/admin.php @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + <?php echo $title ?> + + + + + include($layout['path'] . '/top_menu'); ?> + +
+
+ + include($layout['path'] . '/left_menu'); ?> + +
+
+ + renderSection('content') ?> + +
+
+ + + \ No newline at end of file diff --git a/app/Views/layouts/admin/left_menu.php b/app/Views/layouts/admin/left_menu.php new file mode 100644 index 0000000..9291fc3 --- /dev/null +++ b/app/Views/layouts/admin/left_menu.php @@ -0,0 +1,73 @@ + + + + \ No newline at end of file diff --git a/app/Views/layouts/admin/make_password.php b/app/Views/layouts/admin/make_password.php new file mode 100644 index 0000000..23f0cc2 --- /dev/null +++ b/app/Views/layouts/admin/make_password.php @@ -0,0 +1,4 @@ +
+ + +
\ No newline at end of file diff --git a/app/Views/layouts/admin/member_link.php b/app/Views/layouts/admin/member_link.php new file mode 100644 index 0000000..06cf4ad --- /dev/null +++ b/app/Views/layouts/admin/member_link.php @@ -0,0 +1,17 @@ + + \ No newline at end of file diff --git a/app/Views/layouts/admin/quick_btn.php b/app/Views/layouts/admin/quick_btn.php new file mode 100644 index 0000000..5d7a659 --- /dev/null +++ b/app/Views/layouts/admin/quick_btn.php @@ -0,0 +1,15 @@ + + "post")) ?> + + \ No newline at end of file diff --git a/app/Views/layouts/admin/top_menu.php b/app/Views/layouts/admin/top_menu.php new file mode 100644 index 0000000..6e3d8ac --- /dev/null +++ b/app/Views/layouts/admin/top_menu.php @@ -0,0 +1,14 @@ + + \ No newline at end of file diff --git a/app/Views/layouts/empty.php b/app/Views/layouts/empty.php new file mode 100644 index 0000000..07900f7 --- /dev/null +++ b/app/Views/layouts/empty.php @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + <?= $title ?> + + + + +
+ + renderSection('content') ?> + +
+ + + + \ No newline at end of file diff --git a/app/Views/layouts/front.php b/app/Views/layouts/front.php new file mode 100644 index 0000000..cd0645d --- /dev/null +++ b/app/Views/layouts/front.php @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + <?php echo $title ?> + + + + +
+ + include($layout['path'] . '/top_logo'); ?> + + include($layout['path'] . '/top_menu'); ?> + + + + renderSection('content') ?> + + + include($layout['path'] . '/copyright'); ?> + +
+ + + + \ No newline at end of file diff --git a/app/Views/layouts/front/cfmgr/copyright.php b/app/Views/layouts/front/cfmgr/copyright.php new file mode 100644 index 0000000..3019147 --- /dev/null +++ b/app/Views/layouts/front/cfmgr/copyright.php @@ -0,0 +1,19 @@ + +
+ + diff --git a/app/Views/layouts/front/cfmgr/header.php b/app/Views/layouts/front/cfmgr/header.php new file mode 100644 index 0000000..6bd4c0b --- /dev/null +++ b/app/Views/layouts/front/cfmgr/header.php @@ -0,0 +1,5 @@ +
+ HOME + title_japanese:$parentCategory->title ?> + title_japanese:$currentCategory->title ?> +
diff --git a/app/Views/layouts/front/cfmgr/siteboard_left_banner.php b/app/Views/layouts/front/cfmgr/siteboard_left_banner.php new file mode 100644 index 0000000..a7e11b4 --- /dev/null +++ b/app/Views/layouts/front/cfmgr/siteboard_left_banner.php @@ -0,0 +1,8 @@ + + + +
+
+
+
+ diff --git a/app/Views/layouts/front/cfmgr/sitecontent_left_banner.php b/app/Views/layouts/front/cfmgr/sitecontent_left_banner.php new file mode 100644 index 0000000..2cf1792 --- /dev/null +++ b/app/Views/layouts/front/cfmgr/sitecontent_left_banner.php @@ -0,0 +1,8 @@ + + + +
+
+
+
+ diff --git a/app/Views/layouts/front/cfmgr/top_logo.php b/app/Views/layouts/front/cfmgr/top_logo.php new file mode 100644 index 0000000..6e5a8d2 --- /dev/null +++ b/app/Views/layouts/front/cfmgr/top_logo.php @@ -0,0 +1,13 @@ + +
+ + +
+ + + + + +
+
+ \ No newline at end of file diff --git a/app/Views/layouts/front/cfmgr/welcome_left_banner.php b/app/Views/layouts/front/cfmgr/welcome_left_banner.php new file mode 100644 index 0000000..18c3514 --- /dev/null +++ b/app/Views/layouts/front/cfmgr/welcome_left_banner.php @@ -0,0 +1,5 @@ +
+ +
+
+
diff --git a/app/Views/layouts/front/cfmgr/welcome_partner_banner.php b/app/Views/layouts/front/cfmgr/welcome_partner_banner.php new file mode 100644 index 0000000..95013bf --- /dev/null +++ b/app/Views/layouts/front/cfmgr/welcome_partner_banner.php @@ -0,0 +1,16 @@ +
+     +   +   +   +   +   +   +   +   +   +   +   +   +   +
diff --git a/app/Views/layouts/front/cfmgr/welcome_right_banner.php b/app/Views/layouts/front/cfmgr/welcome_right_banner.php new file mode 100644 index 0000000..45c9c01 --- /dev/null +++ b/app/Views/layouts/front/cfmgr/welcome_right_banner.php @@ -0,0 +1,14 @@ +
+ +
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/Views/templates/Pagers/bootstrap_full.php b/app/Views/templates/Pagers/bootstrap_full.php new file mode 100644 index 0000000..8d0df7a --- /dev/null +++ b/app/Views/templates/Pagers/bootstrap_full.php @@ -0,0 +1,34 @@ +setSurroundCount(2); +?> + \ No newline at end of file diff --git a/app/Views/templates/Pagers/bootstrap_simple.php b/app/Views/templates/Pagers/bootstrap_simple.php new file mode 100644 index 0000000..e728703 --- /dev/null +++ b/app/Views/templates/Pagers/bootstrap_simple.php @@ -0,0 +1,17 @@ +setSurroundCount(0); +?> + \ No newline at end of file diff --git a/app/Views/templates/admin/cloudflare/dns.php b/app/Views/templates/admin/cloudflare/dns.php new file mode 100644 index 0000000..93b8db8 --- /dev/null +++ b/app/Views/templates/admin/cloudflare/dns.php @@ -0,0 +1,51 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
cloudprime001@idcjp.jp(영,숫자)felicity.ns.cloudflare.comtara.ns.cloudflare.com
cloudjp002@idcjp.jp(ㄱ~ㅅ)aida.ns.cloudflare.comkurt.ns.cloudflare.com
jpcf003@gmail.com(ㅇ~ㅎ)natasha.ns.cloudflare.complato.ns.cloudflare.com
cloudwin001@idcjp.jp(영,숫자)alina.ns.cloudflare.comrick.ns.cloudflare.com
cloudwin002@idcjp.jp(ㄱ~ㅅ)hope.ns.cloudflare.compiotr.ns.cloudflare.com
cloudwin003@idcjp.jp(ㅇ~ㅎ)tani.ns.cloudflare.comwoz.ns.cloudflare.com
+
diff --git a/app/Views/templates/admin/cloudflare/select2.php b/app/Views/templates/admin/cloudflare/select2.php new file mode 100644 index 0000000..ce0af78 --- /dev/null +++ b/app/Views/templates/admin/cloudflare/select2.php @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/app/Views/templates/admin/footer.php b/app/Views/templates/admin/footer.php new file mode 100644 index 0000000..5be7005 --- /dev/null +++ b/app/Views/templates/admin/footer.php @@ -0,0 +1,28 @@ + + + + + \ No newline at end of file diff --git a/app/Views/templates/admin/header.php b/app/Views/templates/admin/header.php new file mode 100644 index 0000000..bbdb992 --- /dev/null +++ b/app/Views/templates/admin/header.php @@ -0,0 +1,4 @@ + +
+

+
\ No newline at end of file diff --git a/app/Views/templates/admin/index_head.php b/app/Views/templates/admin/index_head.php new file mode 100644 index 0000000..f934d2c --- /dev/null +++ b/app/Views/templates/admin/index_head.php @@ -0,0 +1,6 @@ + + + \ No newline at end of file diff --git a/app/Views/welcome_message.php b/app/Views/welcome_message.php new file mode 100644 index 0000000..6d5da23 --- /dev/null +++ b/app/Views/welcome_message.php @@ -0,0 +1,325 @@ + + + + + Welcome to CodeIgniter 4! + + + + + + + + + + + +
+ + + +
+ +

Welcome to CodeIgniter

+ +

The small framework with powerful features

+ +
+ +
+ + + +
+ +

About this page

+ +

The page you are looking at is being generated dynamically by CodeIgniter.

+ +

If you would like to edit this page you will find it located at:

+ +
app/Views/welcome_message.php
+ +

The corresponding controller for this page can be found at:

+ +
app/Controllers/Home.php
+ +
+ +
+ +
+ +

Go further

+ +

+ + Learn +

+ +

The User Guide contains an introduction, tutorial, a number of "how to" + guides, and then reference documentation for the components that make up + the framework. Check the User Guide !

+ +

+ + Discuss +

+ +

CodeIgniter is a community-developed open source project, with several + venues for the community members to gather and exchange ideas. View all + the threads on CodeIgniter's forum, or chat on Slack !

+ +

+ + Contribute +

+ +

CodeIgniter is a community driven project and accepts contributions + of code and documentation from the community. Why not + + join us ?

+ +
+ +
+ + + +
+
+ +

Page rendered in {elapsed_time} seconds

+ +

Environment:

+ +
+ +
+ +

© CodeIgniter Foundation. CodeIgniter is open source project released under the MIT + open source licence.

+ +
+ +
+ + + + + + + + + diff --git a/app/index.html b/app/index.html new file mode 100644 index 0000000..69df4e1 --- /dev/null +++ b/app/index.html @@ -0,0 +1,11 @@ + + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + diff --git a/builds b/builds new file mode 100644 index 0000000..cc2ca08 --- /dev/null +++ b/builds @@ -0,0 +1,125 @@ +#!/usr/bin/env php + 'vcs', + 'url' => GITHUB_URL, + ]; + } + + $array['require']['codeigniter4/codeigniter4'] = 'dev-develop'; + unset($array['require']['codeigniter4/framework']); + } else { + unset($array['minimum-stability']); + + if (isset($array['repositories'])) { + foreach ($array['repositories'] as $i => $repository) { + if ($repository['url'] === GITHUB_URL) { + unset($array['repositories'][$i]); + break; + } + } + + if (empty($array['repositories'])) { + unset($array['repositories']); + } + } + + $array['require']['codeigniter4/framework'] = LATEST_RELEASE; + unset($array['require']['codeigniter4/codeigniter4']); + } + + file_put_contents($file, json_encode($array, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . PHP_EOL); + + $modified[] = $file; + } else { + echo 'Warning: Unable to decode composer.json! Skipping...' . PHP_EOL; + } + } else { + echo 'Warning: Unable to read composer.json! Skipping...' . PHP_EOL; + } +} + +$files = [ + __DIR__ . DIRECTORY_SEPARATOR . 'app/Config/Paths.php', + __DIR__ . DIRECTORY_SEPARATOR . 'phpunit.xml.dist', + __DIR__ . DIRECTORY_SEPARATOR . 'phpunit.xml', +]; + +foreach ($files as $file) { + if (is_file($file)) { + $contents = file_get_contents($file); + + if ($dev) { + $contents = str_replace('vendor/codeigniter4/framework', 'vendor/codeigniter4/codeigniter4', $contents); + } else { + $contents = str_replace('vendor/codeigniter4/codeigniter4', 'vendor/codeigniter4/framework', $contents); + } + + file_put_contents($file, $contents); + + $modified[] = $file; + } +} + +if ($modified === []) { + echo 'No files modified.' . PHP_EOL; +} else { + echo 'The following files were modified:' . PHP_EOL; + + foreach ($modified as $file) { + echo " * {$file}" . PHP_EOL; + } + + echo 'Run `composer update` to sync changes with your vendor folder.' . PHP_EOL; +} diff --git a/cfmgr_dataflow.png b/cfmgr_dataflow.png new file mode 100644 index 0000000..4a87b3c Binary files /dev/null and b/cfmgr_dataflow.png differ diff --git a/cfmgr_dataflow.xml b/cfmgr_dataflow.xml new file mode 100644 index 0000000..71160b2 --- /dev/null +++ b/cfmgr_dataflow.xml @@ -0,0 +1 @@ +7Z1bc6M4FoB/javSU+UtLr7gx8RJp3s2vZ1Nuio985IiINtMMPKAHNv9sL99JS6+SAKLGBCeqKurYguBhc7R4dM5R6Jjjufr29BezL5BF/gdQ3PXHfO6Yxi6NrLwH1KySUqGWcE09Ny00q7g0fsFsjPT0qXnguigIoLQR97isNCBQQAcdFBmhyFcHVabQP/wVxf2FDAFj47ts6VPnotmaelQ03YHvgBvOst+Ws+OvNjO6zSEyyD9wQAGIDkyt7PrpFWjme3C1V6RedMxxyGEKPk0X4+BT/o167LkvM85R7dtDkGARE64tVHvP5H57fKvh7e36/m/B6vwr64+Si7zZvvLtDMuHQffD0objTZZJ0Urb+7b+PbMqwkM0GN6RMffbd+bBvizg5sCQlzwBkLk4f69TA8guMClzszz3Tt7A5ekwRHCfZd9u5rB0PuFL2v76TXx4RClqmIMDmo8kjNxsYZLQxDhOvdZL+hU0Td7fVDxzo5QWuBA37cXkfeyvY25HU694AoiBOdppdXMQ+BxYTukzgprP2kImmeNZGWQioV0AFjvFaUyuQVwDlC4wVXSo2aqHunQsXrp99WeIg7SstmhDqYDIFX+6fbSOyXAH1I9KKETmcLu6UTHwLc6sOfk9oOXaLG99T39wPeLYrmF8BWMoQ+xIlzH4wErjOf7VFGmMz6YoFyNiXDPe8H0Lq5z3duVPKQdQYogPnfix0Nr5rkuCIi0IbKRnYiWyHEBvQDFHdW/wv/xHY61f/U7fdzwMf6u777j/6R6iMYwwPdie7FkAdabFSC6U14ligfecUVJNQMPAiHFyOpVrxc6Ry8oJfC9WLiJEmS2VH+XBsyxLH2wE/kPohHXXZ1RC5NVC5OjAr79Avx7GHnIg+T6YVKXUo1j0j9Uby+YgdBDdYq9b4iJ3apL6gbfGmgh8KHtXuBHNx48sWnHf31v7qFP2Fb4pFNewgPtGPy9hHExDF0Qdp2kEy/ji4cX3e5++ae4T7Mz8Kdp8pf88sQDfvq7WK3Ac2DPwSdljxq2RwPBB1W/tueUyWjmn1v8UuDSMLiMRPUBY3VdCtFT4FK7odiOujMCl74Cl1PBpbzYpYPLQIGLskcngEuNM+who5oPwMFKpNhFCrvoel9UJ3q16YSl4KV+YzEU1pTWwAvroVXwUhZeSotdNryYOT5YBS8f3B6JwotV13PKZL3An70QrGxyqqIXGfRi6qL0YtamFTleYkUvFVoLU1xT2kIvJuujVfRSkl7Ki106veQ4YhW9fHB7JEovVYQINovfh4sf9+OZt/z+eru+7S0dvdtjn1PXpJPtSMWNGqIXyzjEl6HZpD+OrxW8p5Sil3dbi+Kh10p64TeZ9xxT9JJHLxWJvUF64beYFy4kDBHZb+ACeQh3sDHG5hotI4IvcBopkmjaNjSZfTJYrC3j6VVbwpvPg59fvk9Hf5hdnQ0vfvZ8RRGSKMJqNKrH1wg2qqco4gRLUTzsWkkR/CbzInuKIvIooiKxN0gR/Bbz4naKItplG6TnsLLBlDs4VQwhhyH6Q1GGqC8LRCFE/anubSYIvqNVAcTJC29azA/cBueFUAgxeA75Rde9OIia7Ic7iiBjeMU7KynB4gy48Zd46HWjZOyR8MsiBB1+uAWPAnO0d018+8llkwqZv727NWtxcdxi7v001jLcPc9zEEVktTCvHZQR1nhFw2tlnZu1ztIzYjIY2BuqeKQt3YmP71WxnMbovgsm9tLnG+/SELeVa/awFoW47cL86hWCpfruvuV+xowfJdZI13Yme3v40rUXRAHya6Q99lEtjaAp2Q7Myklv2KtLdXgTAIV6pVCvvNi323lIg72cAPRuyGM2ecwIKccqOCGwEUiNR1HFKUBitdLnASbI3WdlcqrWPUvQ6aAbp2sfN/o2ZENZXhDhO1Dw0owjimYY8U1gtAoYhq8TOcGsDzr8qwlzD1sdvOI3WQWvTk6BKS922SkwQ27wyom7Z+mgi8v7r3jw3EEsOb4LCqyBs0TgomP0cN94aKNiW02bDlG/SBWxDG6TLdYvsly4GFEVVsjBCvEtWmrDCou3h5gKcFVrK6za/B61YYal/B4nY0Z5scvGDIvr9lCYcU6mQz5msJFSF/hAYYYszNC1kXzOyMnhV5xRpbHoCatKaziDtymY4oxynFFa7NI5g+vMVJxxTqZDPmewntBoEziKMiRRxjZ/QyJl5OT4K8qo0lRYwqrSFsoYsZ5PRRllKaO02GVTxojr21SUcU6mQzpljFhH6EO8aU6nP75ceIo2JNGGKbxDbG27lIzULiX1m4zt+Dsj2lC7lJxMG+XFLp02uB7O47RR9d5qClqkW6AmVzFzm6xr7KPpCYavZA2D4hUZvCK8lLmSVTA5SpG3hPE5tk38hYvPscVSJuQkE7Ibj61c+ZLTZvWWnpMx5h2Cb3LtS06buS/qKeE36SRLWu6/5q+HxsfjC1woOmnctLRghYvJxm7UpvXNEspAoz0qwotcqti1nq8WKn5Tv8Uwzy9+w1nRr1CkJIqUF7tsjwpn2X4CD8mqhYu6t6gn2QSKTxq3NtL3pGfnPZeOA5ecxdYKTRpBE/Hlt7WRSc67SxWYVGgq+sJ60hYu4aUxKiwphSWlhS6bStiZ629E4gA9gGjpo6hgD7iUJ2qDFmV9mrQ+0jmFnSz/SSSpIEUKpIyEF9nUphA6b5qsKKXicPDZUYrOm0crTCmXj3JumJK57hnnyRSgR4AQ7vQCUhGok+xIVbsTpiFfT7JCVbmU/pEWuNFX0fBHI5uP8wAcrDSK1iRFu3RLVClqSy3Xc/JxFK5VGR+vLfOmPl5TiTenJ96UFrt0YMtxMSvQUqB1Nrazyb3/uU022FEUp6spypJBWSWynusyqwYboznY+79j9J5D8PcSj5txEuPlTncVk1VoV4zatt216sqGNtS2uyczWXmxbyfksqDM4CUk0gbit8SrdhO496Q72Qr/yyqQ5VhXmyRQWOB7cyZpLPGZvMG40E23q1qYbn0YnlTGq1HjpevC+dYVYNEavt5evwz9m6tv338a9tf/Gj/W3NcYUloAAvcyDGNhpILe6xvgTkEGSbiHZ3AKA9u/2ZViuS0DF7ip1HJZIoLL0El/sfBdPZiY8JBJKv5uPQVXa2N8v7769XJ797P35eFHN7siaVqhFELg42f9GzhoB6+H01PTQZwxTZ9imsGIElJyS+lZOzkxF9pKl4aj7ELJLTMXigW+vZ/36wDrgsx5axHp0TvywMhIc2847unEETvwkqInRxeKVNSBQQCczAJ0tsvhxCE0e2PZiXLv0n4/OJlgM1qHZFg/YDy7OFUw2UO+NZIpK5iTTJ6AE63FJq94BWfdNs/sjw5MVY+er4vaPIM2njoF6Dk2D4vF3uxVSykgt8EG9eZg0zSL22XQ7dIohUtaUOkwZ10TrTLAfWkG+KRxzs7vW2U8K+vVRjtVYLZbqfHEfRhufpIvmOXTr3/sH7teH3zbNGd0M96v2+Yao0OT1NNG77O5vT5l20wxm1uVmWOnzK0yc9Z5mjlObl+r7Fxl3VpXr3InkWxm3HZzN+J6YTpXxQ3y/CaMgDlmOVfmzO5uvUZ3rOf7FziPQBUIKOVLO6IT+SOyFbkZ3ObxtvyjVOCDhwGqF3qDmRnc1nHTtNTGbh/P+jS5GS23eaxPawznczvAFKjhvsJi932yx5t2Mb77yqrHh6SXCvCEmlAJRyUriedwFSEvVyxnk7+PYhfeP/D77cYOtdC4DuwoFrps7OD54MgYd0JgI5CNdKxxpp7YOXJwFRd3M2xImUEZhIp1o8kdXvmgIrAj0nEn7B4z5fp/9vy8cBHLC5ekT3WL0SGsjZOJhv91+PExyot66KgtGgbvFdipkTAqaN8bUBLNcaYyF6I9HDr1qMjx7pYNhOnU7wyL42B09Z6hFdZnuuOw/slxM76us166J/BCIa9C3WpQd9Q61s1dyapg972z3JY72TirJRXuVuBla7ebLW85pKawtzWmQT73iqR1nQP3HslZKBwhAoliZi00PNIqouHB8PBCzLOkIhymk3d1q5iH6fp98wgPDwvr18TDAu9MriG1sRIVzpq6r8Lc/JxkYlH9fI5O5hbTu6PZOkxWeEWJjdR8azAo1kequmU1oY6sc7LJhB/hjBORp9+Ar3R1Z/zwG8M6AJvM+GmwXxvtVoP1JvBfcfMhXQj15/pQFrjZFyMVPpPUe5FaEIFv0WuR+O1Tvok6fBMteikSv33vTAJS70Q6C7PS7CuR+C2Us2Ct7KyueGHaUc/EcMiXw6mLJyiqGNLRCOF5HXWhEf1GgaoWrA2oiV2/eGJH129kZsfZTOdcZ3ZGTnhYysyOsyfNuc7sjvRrs93a9Kq1Ci1ophJHDWjOTPrUTQ4oP+aANnui9pO+kCXoIS7t2LX4Dc5tlyXDfspdClfpOLdaZD8z5fwn2M/ifq2oW/HXEJL1BDvtxmw9+wZd0jU3/wc= \ No newline at end of file diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..de087ae --- /dev/null +++ b/composer.json @@ -0,0 +1,42 @@ +{ + "name": "codeigniter4/appstarter", + "type": "project", + "description": "CodeIgniter4 starter app", + "homepage": "https://codeigniter.com", + "license": "MIT", + "require": { + "php": "^8.2", + "phpoffice/phpspreadsheet": "^1.27", + "codeigniter4/framework": "^4.3", + "onokumus/metismenu": "dev-master", + "twbs/bootstrap": "5.2.3", + "guzzlehttp/guzzle": "^7.7", + "google/apiclient": "2.12.1" + }, + "require-dev": { + "fakerphp/faker": "^1.9", + "mikey179/vfsstream": "^1.6", + "phpunit/phpunit": "^9.1" + }, + "suggest": { + "ext-fileinfo": "Improves mime type detection for files" + }, + "autoload": { + "exclude-from-classmap": [ + "**/Database/Migrations/**" + ] + }, + "autoload-dev": { + "psr-4": { + "Tests\\Support\\": "tests/_support" + } + }, + "scripts": { + "test": "phpunit" + }, + "support": { + "forum": "https://forum.codeigniter.com/", + "source": "https://github.com/codeigniter4/CodeIgniter4", + "slack": "https://codeigniterchat.slack.com" + } +} diff --git a/phpunit.xml.dist b/phpunit.xml.dist new file mode 100644 index 0000000..62a473a --- /dev/null +++ b/phpunit.xml.dist @@ -0,0 +1,57 @@ + + + + + ./app + + + ./app/Views + ./app/Config/Routes.php + + + + + + + + + + + ./tests + + + + + + + + + + + + + + + + + + + diff --git a/preload.php b/preload.php new file mode 100644 index 0000000..63c781c --- /dev/null +++ b/preload.php @@ -0,0 +1,113 @@ + + * + * For the full copyright and license information, please view + * the LICENSE file that was distributed with this source code. + */ + +/* + *--------------------------------------------------------------- + * Sample file for Preloading + *--------------------------------------------------------------- + * See https://www.php.net/manual/en/opcache.preloading.php + * + * How to Use: + * 0. Copy this file to your project root folder. + * 1. Set the $paths property of the preload class below. + * 2. Set opcache.preload in php.ini. + * php.ini: + * opcache.preload=/path/to/preload.php + */ + +// Load the paths config file +require __DIR__ . '/app/Config/Paths.php'; + +// Path to the front controller +define('FCPATH', __DIR__ . DIRECTORY_SEPARATOR . 'public' . DIRECTORY_SEPARATOR); + +/** + * See https://www.php.net/manual/en/function.str-contains.php#126277 + */ +if (! function_exists('str_contains')) { + /** + * Polyfill of str_contains() + */ + function str_contains(string $haystack, string $needle): bool + { + return empty($needle) || strpos($haystack, $needle) !== false; + } +} + +class preload +{ + /** + * @var array Paths to preload. + */ + private array $paths = [ + [ + 'include' => __DIR__ . '/vendor/codeigniter4/framework/system', + 'exclude' => [ + // Not needed if you don't use them. + '/system/Database/OCI8/', + '/system/Database/Postgre/', + '/system/Database/SQLSRV/', + // Not needed. + '/system/Database/Seeder.php', + '/system/Test/', + '/system/Language/', + '/system/CLI/', + '/system/Commands/', + '/system/Publisher/', + '/system/ComposerScripts.php', + '/Views/', + // Errors occur. + '/system/Config/Routes.php', + '/system/ThirdParty/', + ], + ], + ]; + + public function __construct() + { + $this->loadAutoloader(); + } + + private function loadAutoloader() + { + $paths = new Config\Paths(); + require rtrim($paths->systemDirectory, '\\/ ') . DIRECTORY_SEPARATOR . 'bootstrap.php'; + } + + /** + * Load PHP files. + */ + public function load() + { + foreach ($this->paths as $path) { + $directory = new RecursiveDirectoryIterator($path['include']); + $fullTree = new RecursiveIteratorIterator($directory); + $phpFiles = new RegexIterator( + $fullTree, + '/.+((? $file) { + foreach ($path['exclude'] as $exclude) { + if (str_contains($file[0], $exclude)) { + continue 2; + } + } + + require_once $file[0]; + echo 'Loaded: ' . $file[0] . "\n"; + } + } + } +} + +(new preload())->load(); diff --git a/public/.htaccess b/public/.htaccess new file mode 100644 index 0000000..a5d6c2a --- /dev/null +++ b/public/.htaccess @@ -0,0 +1,49 @@ +# Disable directory browsing +Options All -Indexes + +# ---------------------------------------------------------------------- +# Rewrite engine +# ---------------------------------------------------------------------- + +# Turning on the rewrite engine is necessary for the following rules and features. +# FollowSymLinks must be enabled for this to work. + + Options +FollowSymlinks + RewriteEngine On + + # If you installed CodeIgniter in a subfolder, you will need to + # change the following line to match the subfolder you need. + # http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritebase + # RewriteBase / + + # Redirect Trailing Slashes... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_URI} (.+)/$ + RewriteRule ^ %1 [L,R=301] + + # Rewrite "www.example.com -> example.com" + RewriteCond %{HTTPS} !=on + RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] + RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L] + + # Checks to see if the user is attempting to access a valid file, + # such as an image or css document, if this isn't true it sends the + # request to the front controller, index.php + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule ^([\s\S]*)$ index.php/$1 [L,NC,QSA] + + # Ensure Authorization header is passed along + RewriteCond %{HTTP:Authorization} . + RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + + + + # If we don't have mod_rewrite installed, all 404's + # can be sent to index.php, and everything works as normal. + ErrorDocument 404 index.php + + +# Disable server signature start + ServerSignature Off +# Disable server signature end diff --git a/public/css/admin.css b/public/css/admin.css new file mode 100644 index 0000000..6e25e12 --- /dev/null +++ b/public/css/admin.css @@ -0,0 +1,103 @@ +/* ------------------------------------------------------------ + * Name : admin.css + * Desc : Admin StyleSheet + * Created : 2016/9/11 Tri-aBility by Junheum,Choi + * Updated : + ------------------------------------------------------------ */ + +@charset "utf-8"; +/*########################################################################################### +#############################공통 레이아웃################################################### +#############################################################################################*/ +/* CSS Document */ + +/* + * * Start Bootstrap - SB Admin 2 Bootstrap Admin Theme (http://startbootstrap.com) + * * Code licensed under the Apache License v2.0. + * * For details, see http://www.apache.org/licenses/LICENSE-2.0. + */ + +* { + margin:0px; + padding:0px; + border:0px; + font-size:14px; +} + +body { + background-color: #eee; +} + +input[type=text],input[type=password]{ + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; + white-space: nowrap; +} +select,textarea,button { + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; + white-space: nowrap; +} +a:link { text-decoration: none; } +a:visited { text-decoration: none; } +a:hover { text-decoration: underline; } +a:active { text-decoration: underline; } + +div#main{ + padding-top:10px; + padding-bottom:10px; + /* border:1px solid blue; */ + width:100%; +} + +div#main div#content{ + padding-top:10px; + padding-left:30px; + /* border:1px solid red; */ + width:100%; +} + +div.indexTable_wrapper{ + width: 100%; +} +div.indexTable_wrapper div.indexTable_head { + padding:5px 0; +} +div.indexTable_wrapper div.indexTable_head ul.nav li.nav-item{ + /* border:1px solid red; */ + margin-left:15px; +} +div.indexTable_wrapper div.indexTable_body { + width:100%; + overflow-x: auto; + padding-top:5px; + padding-bottom:5px; +} +div.indexTable_wrapper div.indexTable_body table.indexTable{ + white-space: nowrap; +} +div.indexTable_wrapper div.indexTable_body table.indexTable th{ + text-align:center; + font-size: 16px; +} +div.indexTable_wrapper div.indexTable_body table.indexTable td{ + text-align:center; +} + +div.indexTable_wrapper div.indexTable_body ul.nav li.nav-item{ + /* border:1px solid red; */ + margin-left:15px; +} + + +div.indexTable_wrapper div.indexTable_tail { + text-align:center; +} +div.indexTable_wrapper div.indexTable_tail ul.justify-content-center { + /* border:1px solid red; */ + margin-top:20px; +} diff --git a/public/css/admin/header.css b/public/css/admin/header.css new file mode 100644 index 0000000..b48f800 --- /dev/null +++ b/public/css/admin/header.css @@ -0,0 +1,15 @@ +div#main div#content div.header{ + border-radius: 10px; + border: 1px solid silver; + background-color: #e7e7e7; +} + +div#main div#content div.header div.header-head{ + padding:10px; +} + +div#main div#content div.header div.header-body{ + padding:10px; + border-radius: 0px 0px 10px 10px; + background-color:white; +} \ No newline at end of file diff --git a/public/css/admin/left_menu.css b/public/css/admin/left_menu.css new file mode 100644 index 0000000..bf294e8 --- /dev/null +++ b/public/css/admin/left_menu.css @@ -0,0 +1,32 @@ +div#main div#left_menu{ + position:fixed; + margin-top:139px; + z-index:100; + width:28px; + border:1px solid #e7e7e7; + padding:0px; +} + +div#main div#left_menu div#menu div#menu_button{ + float:right; + height: 100px; + width: 20px; + cursor: ew-resize; + border-radius: 0px 5px 5px 0px; + border: 1px solid silver; + background-color: #eaeaea; + padding:0px; +} +div#main div#left_menu div#menu div.accordion { + display:none; + background-color: white; +} +div#main div#left_menu div#menu div.accordion div.accordion-item:hover { + background-color: #e7e7e7; +} +div#main div#left_menu div#menu div.accordion div.accordion-item a{ + padding-left:20px; +} +div#main div#left_menu div#menu div.accordion div.accordion-collapse a{ + padding-left:40px; +} \ No newline at end of file diff --git a/public/css/admin/member_link.css b/public/css/admin/member_link.css new file mode 100644 index 0000000..38ed839 --- /dev/null +++ b/public/css/admin/member_link.css @@ -0,0 +1,17 @@ +nav.top_menu ul.member-link{ + /* border:1px solid red; */ + color:#3a37f3; + padding-right:20px; +} + +nav.top_menu ul.member-link a{ + color:#3a37f3; +} + +nav.top_menu ul.member-link ul.dropdown-menu li:hover{ + background-color: #eaeaea; +} + +nav.top_menu ul.member-link ul.dropdown-menu li a{ + padding-left:10px; +} \ No newline at end of file diff --git a/public/css/admin/quick_btn.css b/public/css/admin/quick_btn.css new file mode 100644 index 0000000..87af879 --- /dev/null +++ b/public/css/admin/quick_btn.css @@ -0,0 +1,10 @@ +.quick1 ul li{ + list-style:none; + float:left; +} + + +.quick1 ul li ul li{ + list-style:none; + float:left; +} \ No newline at end of file diff --git a/public/css/admin/top_menu.css b/public/css/admin/top_menu.css new file mode 100644 index 0000000..089bcdd --- /dev/null +++ b/public/css/admin/top_menu.css @@ -0,0 +1,34 @@ +nav.top_menu{ + position:relative; + border: 1px solid #ccc; +} + +nav.top_menu a.navbar-brand{ + padding-left:30px; + font-size:20px; + font-weight: bold; + color:#3a37f3 +} + +nav.top_menu div#cloudflare { + position:absolute; + top:0px; + left: 30%; + height: 120px; + overflow-y: scroll; +} +nav.top_menu div#cloudflare table.cloudflare { + font-size: 14px; + border: thin solid; +} + +nav.top_menu div#cloudflare table.cloudflare td { + border: thin solid; + text-align: center; + padding: 0px 5px 0px 5px; +} + +nav.top_menu div#cloudflare table.cloudflare td.dnsname:hover { + cursor: pointer; + background-color: #fde9bf; +} \ No newline at end of file diff --git a/public/css/empty.css b/public/css/empty.css new file mode 100644 index 0000000..e373fed --- /dev/null +++ b/public/css/empty.css @@ -0,0 +1,43 @@ +/* ------------------------------------------------------------ + * Name : default.css + * Desc : GIGSNS Layout + * Created : 2012/07 GIGAKOREA by Donghee,kim + * Updated : + ------------------------------------------------------------ */ +@charset "utf-8"; +/*########################################################################################### +#############################공통 레이아웃################################################### +#############################################################################################*/ + +* { + margin:0px; + padding:0px; + border:0px; + font-size:14px; +} + +body { + background-color: white; +} + +input[type=text],input[type=password]{ + display: inline-block; + width:300px; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; + white-space: nowrap; +} + +select,textarea,button { + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; + white-space: nowrap; +} + +div.pagination { + text-align:center; + padding-top:5px; +} diff --git a/public/css/front.css b/public/css/front.css new file mode 100644 index 0000000..5959ae7 --- /dev/null +++ b/public/css/front.css @@ -0,0 +1,63 @@ +/* ------------------------------------------------------------ + * Name : front.css + * Desc : Admin StyleSheet + * Created : 2016/9/11 Tri-aBility by Junheum,Choi + * Updated : + ------------------------------------------------------------ */ + +@charset "utf-8"; +/*########################################################################################### +#############################공통 레이아웃################################################### +#############################################################################################*/ +/* CSS Document */ + +/* + * * Start Bootstrap - SB Admin 2 Bootstrap Admin Theme (http://startbootstrap.com) + * * Code licensed under the Apache License v2.0. + * * For details, see http://www.apache.org/licenses/LICENSE-2.0. + */ + +* { + margin:0px; + padding:0px; + border:0px; + font-size:14px; +} + +body { + background-color: white; +} + +input[type=text],input[type=password]{ + display: inline-block; + width:100px; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; + white-space: nowrap; +} + +select,textarea,button { + display: inline-block; + border: 1px solid #ccc; + border-radius: 4px; + box-sizing: border-box; + white-space: nowrap; +} + +a:hover, a:visited, a:link, a:active { + text-decoration: none !important; +} + +div.mainContent{ + border:1px solid red; + padding-top:20px; + padding-left:30px; + padding-right:10px; +} + +div.pagination { + border: 1px solid blue; + text-align:center; + padding-top:5px; +} diff --git a/public/css/front/top_banner.css b/public/css/front/top_banner.css new file mode 100644 index 0000000..6ee3e95 --- /dev/null +++ b/public/css/front/top_banner.css @@ -0,0 +1,56 @@ +@CHARSET "UTF-8"; + +/* jssor slider bullet navigator skin 05 css */ +/* +.jssorb05 div (normal) +.jssorb05 div:hover (normal mouseover) +.jssorb05 .av (active) +.jssorb05 .av:hover (active mouseover) +.jssorb05 .dn (mousedown) +*/ +.jssorb05 { + position: absolute; +} +.jssorb05 div, .jssorb05 div:hover, .jssorb05 .av { + position: absolute; + /* size of bullet elment */ + width: 16px; + height: 16px; + background: url('/js/slider/img/b05.png') no-repeat; + overflow: hidden; + cursor: pointer; +} +.jssorb05 div { background-position: -7px -7px; } +.jssorb05 div:hover, .jssorb05 .av:hover { background-position: -37px -7px; } +.jssorb05 .av { background-position: -67px -7px; } +.jssorb05 .dn, .jssorb05 .dn:hover { background-position: -97px -7px; } + +/* jssor slider arrow navigator skin 22 css */ +/* +.jssora22l (normal) +.jssora22r (normal) +.jssora22l:hover (normal mouseover) +.jssora22r:hover (normal mouseover) +.jssora22l.jssora22ldn (mousedown) +.jssora22r.jssora22rdn (mousedown) +.jssora22l.jssora22lds (disabled) +.jssora22r.jssora22rds (disabled) +*/ +.jssora22l, .jssora22r { + display: block; + position: absolute; + /* size of arrow element */ + width: 40px; + height: 58px; + cursor: pointer; + background: url('/js/slider/img/a22.png') center center no-repeat; + overflow: hidden; +} +.jssora22l { background-position: -10px -31px; } +.jssora22r { background-position: -70px -31px; } +.jssora22l:hover { background-position: -130px -31px; } +.jssora22r:hover { background-position: -190px -31px; } +.jssora22l.jssora22ldn { background-position: -250px -31px; } +.jssora22r.jssora22rdn { background-position: -310px -31px; } +.jssora22l.jssora22lds { background-position: -10px -31px; opacity: .3; pointer-events: none; } +.jssora22r.jssora22rds { background-position: -70px -31px; opacity: .3; pointer-events: none; } \ No newline at end of file diff --git a/public/css/front/welcome_left_banner.css b/public/css/front/welcome_left_banner.css new file mode 100644 index 0000000..f2819aa --- /dev/null +++ b/public/css/front/welcome_left_banner.css @@ -0,0 +1,25 @@ +@CHARSET "UTF-8"; +div#left_menu_slideshow { + position: relative; + width: 352px; + height: 296px; +} + +div#left_menu_slideshow > div { + top:9px; + left:53px; + position: absolute; +} + + +/*npy-scorecount.js용*/ +#event_alarm { position:relative; width:100%; max-width:1081px; } +#event_alarm .npy-scwrap { position:absolute !important; top:0; left:0; width:100%; height:100%; } +#event_alarm .npy-scdigit { position:absolute !important; top:24.95%; } +#event_alarm .npy-scdigit._0 { left:18.36%; } +#event_alarm .npy-scdigit._1 { left:28.12%; } +#event_alarm .npy-scdigit._2 { left:40.53%; } +#event_alarm .npy-scdigit._3 { left:50.35%; } +#event_alarm .npy-scdigit._4 { left:62.72%; } +#event_alarm .npy-scdigit._5 { left:72.53%; } +/*npy-scorecount.js용*/ \ No newline at end of file diff --git a/public/css/front/welcome_partner_banner.css b/public/css/front/welcome_partner_banner.css new file mode 100644 index 0000000..5591fc3 --- /dev/null +++ b/public/css/front/welcome_partner_banner.css @@ -0,0 +1,41 @@ +@CHARSET "UTF-8"; +.partner_banner{ + position:relative; + //border:1px solid red; + margin:0 auto; + width:1165px; +} +.partner_banner > .RollDiv{ + margin:0 auto; + width:1165px; + height:60px; + overflow:hidden; +} +.partner_banner > .RollDiv > div{ + overflow:hidden; + height:60px; + width:1200px} +.partner_banner > .RollDiv > div > a{ + float:left; + display:block; +} +.partner_banner > .RollDiv > div > a > img{ + width:180px; + height:60px; + margin-right:10px; +} +.partner_banner > .btn_left{ + position:absolute; + left:0; + top:0; + background:blue; + height:100%; + width:25px; +} +.partner_banner > .btn_right{ + position:absolute; + right:0;top:0; + background:blue; + height:100%; + width:25px; +} \ No newline at end of file diff --git a/public/css/front/zeta-menu.css b/public/css/front/zeta-menu.css new file mode 100644 index 0000000..8e1fdae --- /dev/null +++ b/public/css/front/zeta-menu.css @@ -0,0 +1,54 @@ +@CHARSET "UTF-8"; + +.zeta-menu-bar { + position:relative; + z-index:100; + background: #eee; + display: inline-block; + width: 100%; + + /* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#efefef+7,c8c8c8+56,c3c3c3+58,c3c3c3+58,c8c8c8+72,c8c8c8+75,c8c8c8+75,dadada+100 */ + background: rgb(239,239,239); /* Old browsers */ + background: -moz-linear-gradient(top, rgba(239,239,239,1) 7%, rgba(200,200,200,1) 56%, rgba(195,195,195,1) 58%, rgba(195,195,195,1) 58%, rgba(200,200,200,1) 72%, rgba(200,200,200,1) 75%, rgba(200,200,200,1) 75%, rgba(218,218,218,1) 100%); /* FF3.6-15 */ + background: -webkit-linear-gradient(top, rgba(239,239,239,1) 7%,rgba(200,200,200,1) 56%,rgba(195,195,195,1) 58%,rgba(195,195,195,1) 58%,rgba(200,200,200,1) 72%,rgba(200,200,200,1) 75%,rgba(200,200,200,1) 75%,rgba(218,218,218,1) 100%); /* Chrome10-25,Safari5.1-6 */ + background: linear-gradient(to bottom, rgba(239,239,239,1) 7%,rgba(200,200,200,1) 56%,rgba(195,195,195,1) 58%,rgba(195,195,195,1) 58%,rgba(200,200,200,1) 72%,rgba(200,200,200,1) 75%,rgba(200,200,200,1) 75%,rgba(218,218,218,1) 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#efefef', endColorstr='#dadada',GradientType=0 ); +} +.zeta-menu { margin: 0px; padding: 0px; } +.zeta-menu li { + float: left; + list-style:none; + position: relative; +} +.zeta-menu li:hover { background: #ddd; } +.zeta-menu li:hover>a { color: black; } +.zeta-menu a { + color: black; + display: block; + padding: 10px 20px; + text-decoration: none; +} +.zeta-menu ul { + background: #eee; + border: 1px solid silver; + display: none; + padding: 0px; + position: absolute; + left: 0px; + top: 100%; + width: 180px; +} +.zeta-menu ul li { + float: none; + /* Permalink - use to edit and share this gradient: http://colorzilla.com/gradient-editor/#efefef+7,c8c8c8+56,c3c3c3+58,c3c3c3+58,c8c8c8+72,c8c8c8+75,c8c8c8+75,dadada+100 */ + background: rgb(239,239,239); /* Old browsers */ + background: -moz-linear-gradient(top, rgba(239,239,239,1) 7%, rgba(200,200,200,1) 56%, rgba(195,195,195,1) 58%, rgba(195,195,195,1) 58%, rgba(200,200,200,1) 72%, rgba(200,200,200,1) 75%, rgba(200,200,200,1) 75%, rgba(218,218,218,1) 100%); /* FF3.6-15 */ + background: -webkit-linear-gradient(top, rgba(239,239,239,1) 7%,rgba(200,200,200,1) 56%,rgba(195,195,195,1) 58%,rgba(195,195,195,1) 58%,rgba(200,200,200,1) 72%,rgba(200,200,200,1) 75%,rgba(200,200,200,1) 75%,rgba(218,218,218,1) 100%); /* Chrome10-25,Safari5.1-6 */ + background: linear-gradient(to bottom, rgba(239,239,239,1) 7%,rgba(200,200,200,1) 56%,rgba(195,195,195,1) 58%,rgba(195,195,195,1) 58%,rgba(200,200,200,1) 72%,rgba(200,200,200,1) 75%,rgba(200,200,200,1) 75%,rgba(218,218,218,1) 100%); /* W3C, IE10+, FF16+, Chrome26+, Opera12+, Safari7+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#efefef', endColorstr='#dadada',GradientType=0 ); +} +.zeta-menu ul li:hover { background: #ddd; } +.zeta-menu ul li:hover a { color: black; } +.zeta-menu ul a { color: black; } +.zeta-menu ul ul { left: 100%; top: 0; } +.zeta-menu ul ul li {float:left; margin-right:10px;} \ No newline at end of file diff --git a/public/css/login.css b/public/css/login.css new file mode 100644 index 0000000..d3ec7af --- /dev/null +++ b/public/css/login.css @@ -0,0 +1,19 @@ +@charset "utf-8"; +/* ------------------------------------------------------------ +* Name : login.css +* Desc : GIGSNS Default +* Created : 2012/07 GIGAKOREA by Donghee,kim +* Updated : +------------------------------------------------------------ */ + +div.header { + margin-top:120px; +} + +input.loginform{ + width:245px; + height:27px; + border:1px solid #bababa; + font-size:120%; + font-weight:700; color:#666 +} \ No newline at end of file diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..7ecfce2 Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/hpilo/alt/css/style.css b/public/hpilo/alt/css/style.css new file mode 100644 index 0000000..f5ae781 --- /dev/null +++ b/public/hpilo/alt/css/style.css @@ -0,0 +1,1736 @@ +@charset "UTF-8"; +dfn,img{font-style:italic} +img,legend{border:0} +a,ins,u{text-decoration:none} +a,a:visited{color:#2883d7} +code.hljs{border:1px solid #ccc} +.menu:focus,.search:focus,a:active,a:hover,input,input[type=range]:focus,select,textarea{outline:0} +.brand-font,html{font-family:Arial,sans-serif} +.large-number-font{font-family:Arial,sans-serif} +div,span,table,td,th,tr{font-family:Arial,sans-serif,Verdana,Helvetica,LuzSans Book,HPFutura Book,Futura Bk;font-size:1em} +body{background-color:#fff;font-family:Arial,sans-serif,Verdana,Helvetica,LuzSans Book,HPFutura Book,Futura Bk;font-size:1em;color:initial} +a{font-size:inherit} +h1,h2,h3,h4,h5{font-size:initial;font-weight:initial;color:#000;border:0;min-height:initial;background:0 0;background-image:none;background-repeat:no-repeat;padding:initial;margin:initial;margin-bottom:initial} +input.password,input.textfield,input[type=text],input[type=password],select{color:initial;font-size:1rem;line-height:1.5;font-family:Arial,Verdana,Helvetica,sans-serif;width:auto;padding:6px 23px;border:1px solid #ccc;background-color:initial;margin-right:12px} +input.long_table_data,input[type=text].long_table_data,input[type=password].long_table_data{font-family:Arial,sans-serif,Verdana,Helvetica,LuzSans Book,HPFutura Book,Futura Bk;color:#000;line-height:1em;font-size:1em} +table.data_table td{font-size:1em;font-family:Arial,Verdana,Helvetica,sans-serif;background-color:inherit;border-right:1px solid #ccc;border-bottom:1px solid #ccc;padding:0 5px 0 5px;white-space:nowrap} +table.data_table tbody tr{border-bottom:1px solid #ccc} +table.data_table tbody tr:hover{background-color:#ddd;color:#000} +table.key-value-table td:first-child,table.key-value-table td:first-child>span{line-height:1.8rem;font-weight:300} +.login-body{background:#fff;background-image:initial} +table.login-banner-table{height:280px} +td.login-banner-left{background-color:inherit;background:inherit;background-image:inherit} +td.login-banner-right{border:0;background-color:transparent;background-image:none} +.login-banner-title{margin-right:30px;margin-bottom:10px} +.login-banner-title h1,.login-banner-title h2,.login-banner-title span{font-family:LuzSans Book,HPFutura Book,Futura Bk,Arial,Verdana,Helvetica,sans-serif;font:Arial,sans-serif;font-size:initial;font-weight:400;color:inherit} +div.login-logo{margin-left:initial;margin-top:-30px;margin-bottom:90px;background-image:none} +#login-middle-table{width:100%} +#tr2-td3-login-middle-table{display:initial} +#login_fields_table{width:initial} +td.login_fields_label{font-family:Arial,Verdana,Helvetica,sans-serif} +#login_rec_browsers{font-size:small;display:inline-block;padding-left:10px;background-color:#000;background:rgba(0,0,0,.6);filter:alpha(opacity=80)} +.remember_cb,.remember_text{font-family:Arial,Verdana,Helvetica,sans-serif} +#appContent,#appNavigator{padding-top:0} +#appContent{right:0} +#appNavigator{left:0;width:300px;padding-top:0} +#toggleExpandCollapseAll{color:#ccc} +button::-moz-focus-inner{border:initial} +button,button.active,button.disabled,button.enter,button.focus,button.hover,button:active,button:focus,button:hover,button[disabled]{text-decoration:initial;-moz-box-sizing:initial;outline-color:#2ad2c9;text-shadow:none;text-overflow:initial;overflow:initial;-webkit-box-shadow:initial;-moz-box-shadow:initial;display:initial;font-size:initial;font-family:inherit;font-weight:initial;color:initial;-webkit-transition:initial;-moz-transition:initial;width:initial;min-width:initial;max-width:initial;text-align:center;line-height:initial;background-color:initial;vertical-align:initial;height:auto;padding:initial;border-width:initial;border-style:initial;border-color:initial;-moz-border-bottom-colors:initial;-moz-border-top-colors:initial;-moz-border-left-colors:initial;-moz-border-right-colors:initial;background-image:none;-webkit-border-radius:initial;-moz-border-radius:initial;border-radius:initial} +th::selection{outline-color:#2ad2c9} +th{outline-color:#2ad2c9} +button[type]{padding:initial} +table.data_table{font-family:Arial,Verdana,Helvetica,sans-serif;color:#000;border:0;font-size:1em} +table.data_table thead{background-color:#fff} +table.data_table th{background-color:inherit;background-image:none;vertical-align:bottom;height:20px;padding-right:15px;padding-left:5px;border-right:inherit;font-weight:100;font-size:20px;font-size:1rem;line-height:1.2;border-bottom:1px solid #ccc;white-space:normal} +table.data_table th.sorted{background-color:inherit;background-image:none} +table.data_table th.headerSortDown,table.data_table th.headerSortUp,table.data_table th.tablesorter-headerAsc,table.data_table th.tablesorter-headerDesc{background-color:#eee} +table.data_table td:first-child,table.data_table th:first-child{padding-left:0} +table.data_table th div{font-weight:inherit} +table.data_table tr.odd td,table.data_table tr.odd tr.even td,table.data_table tr.trclick td,table.data_table tr.trover td{background-color:inherit} +table.data_table tbody tr.trclick,table.data_table tbody tr.trclick:hover{background-color:#d0f3eb} +.groupingBox,table.groupingBox,td.groupingBox{padding:0;border:0} +#masthead_body{background:0 0;background-color:rgba(66,85,99,.9);overflow:hidden} +div.tray,table.masthead{color:inherit;font-family:Arial,Helvetica,sans-serif,Verdana;background:0 0} +table.bdf_table td{background-color:inherit;color:inherit} +.normal-body,.normal-header{border:inherit;height:initial;background:inherit;background-image:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0} +#td_masthead_logo{width:1%;padding:0} +div.masthead_logo{background:url(../../images/hpesm_pri_wht_rev_rgb.svg);padding:0;height:100%;background-position:-60px -55px;background-size:245px;width:220px} +table.masthead span.app_name,table.masthead span.user_field,table.masthead td#platform_name,td.home_link_col,td.hostname{font-family:Arial,Helvetica,sans-serif,Verdana;color:rgba(255,255,255,.9)} +table.masthead td#platform_name{color:rgba(255,255,255,.6)} +table.masthead span.app_name{font-weight:800;font-size:1.35rem} +table.masthead a,table.masthead a:active,table.masthead a:hover,table.masthead a:visited{color:rgba(255,255,255,.7);text-decoration:none;vertical-align:top} +table.nowrap_table td{white-space:nowrap} +.subtree a.no-adv{color:inherit} +.navigation-tree .tree-control{background-color:inherit;color:inherit;border:0;background-image:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0} +.mainContent{border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;top:36px;bottom:0} +.content-with-tabs{border:0;border-bottom:4px solid #eee;-webkit-border-radius:0;-webkit-border-top-left-radius:0;-moz-border-radius:0;-moz-border-radius-topleft:0;border-radius:0;border-top-left-radius:0} +.content-title{top:0;left:0;right:0;border:0;border-bottom:4px solid #eee;height:40px;background:0 0;background-color:rgba(66,85,99,.9);-webkit-border-radius:0;-moz-border-radius:0;border-radius:0} +.content-title div{margin-top:5px} +#contextHelpDiv{margin-top:5px;margin-left:4px;position:absolute;top:-11px;right:0} +#titleWrapper{height:36px} +#titleWrapper h4{display:inline-block;margin-top:6px} +td.statusDisplay{width:62px;top:1px;left:3px;position:relative} +.rebranding_help_div{background:0 0} +input[type=file]{font-family:inherit} +.ui-widget{line-height:normal} +/*! + * inuitcss, by @csswizardry + * + * github.com/inuitcss | inuitcss.com + */ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +input[type=checkbox]:focus,input[type=radio]:focus{padding:6px 23px;border-width:1px;outline:1px solid #2AD2C9} +body{margin:0} +article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block} +audio,canvas,progress,video{display:inline-block;vertical-align:baseline} +audio:not([controls]){display:none;height:0} +[hidden],template{display:none} +abbr[title]{border-bottom:1px dotted} +b,optgroup,strong{font-weight:700} +dfn{font-style:italic} +mark{background:#ff0;color:#000} +small{font-size:80%} +sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline} +sup{top:-.5em} +sub{bottom:-.25em} +svg:not(:root){overflow:hidden} +hr{box-sizing:content-box;height:0} +pre,textarea{overflow:auto} +code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em} +button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0} +blockquote,h2,h4,h5{line-height:1.33333} +#loading,.list__empty,.tbd,img{font-style:italic} +button{overflow:visible} +button,select{text-transform:none} +button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer} +button[disabled],html input[disabled]{cursor:default} +button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0} +input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0} +input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto} +input[type=search]{-webkit-appearance:textfield;box-sizing:content-box} +input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none} +fieldset{border:1px solid silver} +table{border-collapse:collapse;border-spacing:0} +blockquote,body,caption,dd,dl,fieldset,figure,form,h1,h2,h3,h4,h5,h6,hr,legend,ol,p,pre,table,td,th,ul{margin:0;padding:0} +abbr[title],dfn[title]{cursor:help} +ins,u{text-decoration:none} +ins{border-bottom:1px solid} +html{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;background-color:#fff;color:#333;overflow-y:scroll;min-height:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased} +.box--full,.box--full-vertical{min-height:100vh} +*,:after,:before{-webkit-box-sizing:inherit;-moz-box-sizing:inherit;box-sizing:inherit} +.search__drop input,.tiles>.tile--wide,.tiles>.tile>*{box-sizing:border-box} +address,blockquote,dl,fieldset,figure,h1,h2,h3,h4,h5,h6,hr,ol,p,pre,table,ul{margin-bottom:1.5rem} +dd,ol,ul{margin-left:3rem} +h6{font-size:14px;font-size:.875rem;line-height:1.71429} +li>ol,li>ul{margin-bottom:0} +img{max-width:100%;vertical-align:middle} +.gm-style img,img[height],img[width]{max-width:none} +.brand-font,html{font-family:Arial,sans-serif} +.distribution__label,.large-number-font{font-family:Simple,Arial,sans-serif} +body,html{font-size:16px;font-size:1rem;line-height:24px} +h1{font-size:48px;font-size:3rem;line-height:1} +h2{font-size:36px;font-size:2.25rem} +h3{font-size:24px;font-size:1.5rem;line-height:28px} +h4,h5{font-size:18px;font-size:1.125rem} +h1,h2,h3,h4,h5{font-weight:100;max-width:100%} +h1.header--strong,h1>strong,h2.header--strong,h2>strong,h3.header--strong,h3>strong,h4.header--strong,h4>strong,h5.header--strong,h5>strong{font-weight:600} +h1 a,h1 a.anchor,h2 a,h2 a.anchor,h3 a,h3 a.anchor,h4 a,h4 a.anchor,h5 a,h5 a.anchor{color:inherit;text-decoration:none} +h1 a.anchor:hover,h1 a:hover,h2 a.anchor:hover,h2 a:hover,h3 a.anchor:hover,h3 a:hover,h4 a.anchor:hover,h4 a:hover,h5 a.anchor:hover,h5 a:hover{text-decoration:none} +dd,li,p{max-width:576px} +p{margin-top:24px;margin-bottom:24px} +blockquote{font-size:36px;font-size:2.25rem} +.secondary{color:#777} +@-webkit-keyframes fadein{from{opacity:0} +to{opacity:1} +} +@keyframes fadein{from{opacity:0} +to{opacity:1} +} +input,select,textarea{font-size:16px;font-size:1rem;line-height:1.5;padding:11px 23px;border-radius:0;outline:0;margin-right:12px} +input:focus,select:focus,textarea:focus{padding:10px 22px;border-width:2px;border-color:#2AD2C9} +input::-moz-focus-inner,select::-moz-focus-inner,textarea::-moz-focus-inner{border:none;outline:0} +input::-webkit-input-placeholder,select::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#aaa} +input::-moz-placeholder,select::-moz-placeholder,textarea::-moz-placeholder{color:#aaa} +input:-ms-input-placeholder,select:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#aaa} +input.error,select.error,textarea.error{border-color:#F04953} +select{border-color:#ccc;padding-right:24px;-moz-appearance:none;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAOhJREFUSA3tksENgzAMRUmrrlApuTAAxxw6QvfojYmYKtw6QpUDI1Rq6o8MStsAMT1UlbAUcMB+33FcFJttHfifDlhrT7QO31YMBlgDZw8HH5RSF3JLY0zrvX8MAZI3F1gT66y17ohz2zGgDSFc6UdF+5oDJWwUidMDXoFFfgtAfwJUjMppX7KI6CQJeOOcu48CcNaKzMFfBNaILME/BCQiOfCkQI5ILhwshceUpUAcG0/LeKEpzqwAEhIiRTSKs3Dk92MKZ8rep4vgR57zRTiYiwIIikVo29HKgiNXZGgXt0yUtwX/tgNPQqatJ1aBLFMAAAAASUVORK5CYII=) center right no-repeat} +select::-moz-focus-inner{border:none} +select.plain{border:none} +input[type=range]{position:relative;border-color:transparent;height:24px;padding:0;overflow-x:hidden} +input[type=range]::-moz-focus-inner{border:none} +input[type=range]::-moz-focus-outer{border:none} +input[type=range]::-webkit-slider-runnable-track{width:100%;height:2px;background-color:#b2b2b2} +input[type=range]::-webkit-slider-thumb{position:relative;height:24px;width:24px;overflow:visible;-webkit-appearance:none;margin-top:-11px} +input[type=range]::-webkit-slider-thumb:before{content:"";position:absolute;left:-3000px;right:12px;top:9px;bottom:9px;background-color:#01a982;pointer-events:none} +.carousel .control-icon-previous,.carousel__arrow--prev{left:0} +input[type=range]::-webkit-slider-thumb:after{content:"";position:absolute;border:2px solid #01a982;height:20px;width:20px;border-radius:24px;background-color:#fff;cursor:pointer} +input[type=range]:hover::-webkit-slider-thumb:after{content:"";border-color:#000} +input[type=range]::-moz-range-track{width:100%;height:2px;background-color:#b2b2b2} +input[type=range]::-moz-range-thumb{position:relative;overflow:visible;border:2px solid #01a982;height:20px;width:20px;border-radius:24px;background-color:#fff} +input[type=range]::-ms-track{width:100%;height:2px;background-color:#b2b2b2;border-color:transparent;color:transparent} +.anchor,.anchor:visited,a,a:visited{color:inherit} +input[type=range]::-ms-fill-lower{background:#01a982;border-color:transparent} +input[type=range]::-ms-fill-upper{background:#b2b2b2;border-color:transparent} +input[type=range]::-ms-thumb{position:relative;overflow:visible;border:2px solid #999;height:20px;width:20px;border-radius:24px;background-color:#fff} +#loading,article:not(.article){width:100%} +input[type=range]:hover::-ms-thumb{border-color:#000} +.i-list-bare{margin:0;padding:0;list-style:none} +.anchor,a{text-decoration:underline;cursor:pointer} +.anchor.active,a.active{color:#333} +.anchor:hover,a:hover{text-decoration:underline;color:#000} +.anchor.anchor--primary,.header a,.header a:hover,.menu a:not(.button),.menu--inline.menu a,.menu__drop a,.menu__drop a:focus,.menu__drop a:hover,.paragraph--small a,.tab a,.title a,.title a:hover,a.anchor--primary{text-decoration:none} +[class*=background-color-index-]:not([class*=background-color-index-light]) .anchor,[class*=background-color-index-]:not([class*=background-color-index-light]) .menu .anchor:not(.button),[class*=background-color-index-]:not([class*=background-color-index-light]) .menu a:not(.button),[class*=background-color-index-]:not([class*=background-color-index-light]) a{color:#dbdbdb} +[class*=background-color-index-]:not([class*=background-color-index-light]) .anchor .control-icon,[class*=background-color-index-]:not([class*=background-color-index-light]) .menu .anchor:not(.button) .control-icon,[class*=background-color-index-]:not([class*=background-color-index-light]) .menu a:not(.button) .control-icon,[class*=background-color-index-]:not([class*=background-color-index-light]) a .control-icon{fill:#dbdbdb;stroke:#dbdbdb} +[class*=background-color-index-]:not([class*=background-color-index-light]) .anchor:hover,[class*=background-color-index-]:not([class*=background-color-index-light]) .menu .anchor:not(.button):hover,[class*=background-color-index-]:not([class*=background-color-index-light]) .menu a:not(.button):hover,[class*=background-color-index-]:not([class*=background-color-index-light]) a:hover{color:#fff} +[class*=background-color-index-]:not([class*=background-color-index-light]) .anchor:hover .control-icon,[class*=background-color-index-]:not([class*=background-color-index-light]) .menu .anchor:not(.button):hover .control-icon,[class*=background-color-index-]:not([class*=background-color-index-light]) .menu a:not(.button):hover .control-icon,[class*=background-color-index-]:not([class*=background-color-index-light]) a:hover .control-icon{fill:#fff;stroke:#fff} +.anchor.anchor--primary,a.anchor--primary{font-size:19px;font-size:1.1875rem;line-height:24px;font-weight:600;color:#049371} +.anchor.anchor--primary .control-icon,a.anchor--primary .control-icon{stroke:#049371} +.anchor.anchor--primary:hover .control-icon path,.anchor.anchor--primary:hover .control-icon polyline,a.anchor--primary:hover .control-icon path,a.anchor--primary:hover .control-icon polyline{stroke-width:3px} +[class*=background-color-index-] .anchor.anchor--primary,[class*=background-color-index-] a.anchor--primary{color:#dbdbdb} +[class*=background-color-index-] .anchor.anchor--primary .control-icon,[class*=background-color-index-] a.anchor--primary .control-icon{fill:#dbdbdb;stroke:#dbdbdb} +[class*=background-color-index-] .anchor.anchor--primary:hover,[class*=background-color-index-] a.anchor--primary:hover{color:#fff} +[class*=background-color-index-] .anchor.anchor--primary:hover .control-icon,[class*=background-color-index-] a.anchor--primary:hover .control-icon{fill:#fff;stroke:#fff} +#loading{position:absolute;height:100%;background-color:#ddd;padding-top:100px;font-size:48px;color:#ccc} +@media screen and (min-width:45em){body,html{height:100%;width:100%;overflow:visible} +.app{position:absolute;top:0;bottom:0;left:0;right:0;overflow:auto} +button:not(.button),input[type=button],input[type=submit]{transition:.1s ease-in-out} +} +.app--inline,.article,.calendar{position:relative} +.app--centered>.split{width:100%;max-width:960px;margin-left:auto;margin-right:auto} +.article>*{flex:0 0 auto} +.article.box--pad-horizontal-small{padding-left:0;padding-right:0} +.article.box--pad-horizontal-small>*{padding-left:12px;padding-right:12px} +.article.box--pad-horizontal-medium{padding-left:0;padding-right:0} +.article.box--pad-horizontal-medium>*{padding-left:24px;padding-right:24px} +.article.box--pad-horizontal-large{padding-left:0;padding-right:0} +.article.box--pad-horizontal-large>*{padding-left:48px;padding-right:48px} +.attribute{margin-bottom:12px} +@media screen and (max-width:44.9375em){.attribute{width:100%} +} +.attribute__label{display:block;text-align:left;font-size:14px;font-size:.875rem;line-height:24px;color:#777} +.box{display:flex;background-position:center center;background-size:cover;background-repeat:no-repeat} +.box__container{padding-left:24px;padding-right:24px} +.box__container--full,.box__container--full-horizontal{max-width:100%;width:100vw} +.app--centered .box__container>.box{width:100%;max-width:960px;margin-left:auto;margin-right:auto} +.box--direction-column>*,.box--full{max-width:100%} +@media screen and (max-width:44.9375em){.app--centered .box__container>.box{padding-left:0;padding-right:0} +} +.box--pad-none{padding:0} +.box--pad-small{padding:12px} +.box--pad-medium{padding:24px} +.box--pad-large{padding:48px} +.box--pad-horizontal-none{padding-left:0;padding-right:0} +.box--pad-horizontal-small{padding-left:12px;padding-right:12px} +.box--pad-horizontal-medium{padding-left:24px;padding-right:24px} +.box--pad-horizontal-large{padding-left:48px;padding-right:48px} +.box--pad-vertical-none{padding-top:0;padding-bottom:0} +.box--pad-vertical-small{padding-top:12px;padding-bottom:12px} +.box--pad-vertical-medium{padding-top:24px;padding-bottom:24px} +.box--pad-vertical-large{padding-top:48px;padding-bottom:48px} +.box--full{width:100vw;height:100%} +.box--full-horizontal{max-width:100%;width:100vw} +.box--direction-row{flex-direction:row} +.box--direction-row.box--reverse{flex-direction:row-reverse} +@media screen and (max-width:44.9375em){.box--direction-row.box--responsive{flex-direction:column} +.box--direction-row.box--responsive.box--reverse{flex-direction:column-reverse} +} +.box--direction-column{flex-direction:column} +.box--direction-column.box--reverse{flex-direction:column-reverse} +.box--direction-column>.footer.box--direction-row,.box--direction-column>.header.box--direction-row,.box--direction-column>.header__container--fixed{flex:0 0 auto} +.box--justify-start{justify-content:flex-start} +.box--justify-center{justify-content:center} +.box--justify-between{justify-content:space-between} +.box--justify-end{justify-content:flex-end} +.box--align-start{align-items:flex-start} +.box--align-center{align-items:center} +.box--align-end{align-items:flex-end} +.box--separator-top{border-top:1px solid #ccc} +.box--separator-bottom{border-bottom:1px solid #ccc} +.box--separator-left{border-left:1px solid #ccc} +.box--separator-right{border-right:1px solid #ccc} +@media screen and (max-width:44.9375em){.box--separator-left{border-left:none;border-bottom:1px solid #ccc} +.box--separator-right{border-right:none;border-bottom:1px solid #ccc} +} +[class*=background-color-index-] .box[class*=box--separator]{border-color:#eee} +.box--text-align-left{text-align:left} +.box--text-align-center{text-align:center} +.box--text-align-right{text-align:right} +.box>.flex,.box>.flex-grow-1{flex-grow:1} +.box--direction-down,.box--direction-up{flex-direction:column} +.box--direction-left{justify-content:flex-end} +.box--flush{padding:0} +.button,button:not(.button),input[type=button],input[type=submit]{padding:6px 22px;background-color:transparent;color:#333;line-height:24px;font-weight:600;cursor:pointer;min-width:120px;text-align:center;outline:0} +button:not(.button),input[type=button],input[type=submit]{border:2px solid #01a982;border-radius:0;font-size:19px;font-size:1.1875rem} +.button,.menu{font-size:19px} +button:not(.button):focus:not(.button--disabled),input[type=button]:focus:not(.button--disabled),input[type=submit]:focus:not(.button--disabled){border-color:#2AD2C9;box-shadow:0 0 1px 1px #2AD2C9} +.button{border:2px solid #01a982;border-radius:0;font-size:1.1875rem;letter-spacing:.04167em} +.button:focus:not(.button--disabled){border-color:#2AD2C9;box-shadow:0 0 1px 1px #2AD2C9} +@media screen and (min-width:45em){.button{transition:.1s ease-in-out} +} +.button--primary{border-color:#01a982;background-color:#01a982;color:#dbdbdb} +.button--secondary{border-color:rgba(51,51,51,.6)} +.button--accent{border-color:#ff8d6d} +.button--icon{border:none;padding:0;width:48px;height:48px} +.button--fill,.calendar__grid,.calendar__grid table{width:100%} +[class*=background-color-index-] .button:not(.button--primary){border-color:#eee;color:#dbdbdb} +[class*=background-color-index-] .button:not(.button--primary).button--accent{border-color:#ff8d6d} +.button--disabled{opacity:.3;cursor:default} +.calendar{display:inline-block;min-width:288px} +.calendar__input{width:100%;height:100%;display:block;padding-right:60px} +.calendar__input:focus{padding-right:59px} +.calendar__control{position:absolute;bottom:0;right:12px} +.carousel .control-icon-next,.carousel__arrow--next{right:0} +.calendar__drop{border-top-left-radius:0;border-top-right-radius:0} +.calendar__title{text-align:center} +.calendar__grid{padding:12px} +.calendar__grid td,.calendar__grid th{text-align:center;padding:6px} +.calendar__grid th{color:#777;font-weight:400} +.calendar__day{display:inline-block;cursor:pointer;width:24px;height:24px;transition:background-color .3s} +.calendar__day:hover{background-color:rgba(0,0,0,.1)} +.calendar__day--other-month{color:#777} +.calendar__day--active{background-color:#01a982;color:#dbdbdb} +.calendar--active .calendar__input{border-bottom-left-radius:0;border-bottom-right-radius:0} +@-webkit-keyframes carousel-reveal{0%{opacity:0} +100%{opacity:1} +} +@keyframes carousel-reveal{0%{opacity:0} +100%{opacity:1} +} +@-webkit-keyframes carousel-hide{0%{opacity:1} +100%{opacity:0} +} +@keyframes carousel-hide{0%{opacity:1} +100%{opacity:0} +} +.carousel{position:relative;max-width:100%;overflow:hidden} +.carousel__track{display:flex;max-width:none;transition:all .8s} +.carousel__track>*{flex:1} +.carousel__arrow{-webkit-animation:carousel-reveal 1s;animation:carousel-reveal 1s;z-index:1;position:absolute;top:50%;transform:translateY(-50%);cursor:pointer} +.carousel__arrow .control-icon{width:96px;height:96px;filter:drop-shadow(1px 1px 1px rgba(170, 170, 170, .5));-webkit-filter:drop-shadow(1px 1px 1px rgba(170, 170, 170, .5))} +.carousel__arrow .control-icon polyline{stroke:#fff;stroke-width:1px} +.carousel__controls{-webkit-animation:carousel-reveal 1s;animation:carousel-reveal 1s;margin-left:50%;transform:translateX(-50%);position:absolute;bottom:12px;text-align:center;z-index:1} +.carousel__control{display:inline-block;width:36px;height:36px;stroke:#fff;fill:transparent;cursor:pointer;filter:drop-shadow(1px 1px 1px rgba(170, 170, 170, .5));-webkit-filter:drop-shadow(1px 1px 1px rgba(170, 170, 170, .5))} +.carousel__control--active{stroke:#01a982;fill:#01a982} +.carousel--hide-controls .carousel__controls,.carousel--hide-controls .control-icon-next,.carousel--hide-controls .control-icon-previous{opacity:0;-webkit-animation:carousel-hide 1s;animation:carousel-hide 1s} +@-webkit-keyframes reveal-chart{0%{opacity:0} +100%{opacity:1} +} +@keyframes reveal-chart{0%{opacity:0} +100%{opacity:1} +} +.chart{position:relative;display:block} +.chart__grid{stroke:#ccc} +.chart__graphic{width:100%;height:192px;max-height:calc(100vh - 144px)} +.chart__values-line{stroke-width:3px} +.chart__values-line.color-index-loading{stroke:#ddd;stroke-dasharray:1px 10px;stroke-dashoffset:0} +.chart__values-line.color-index-unset{stroke:#ddd} +.chart__values-line.color-index-brand{stroke:#01a982} +.chart__values-line.color-index-error{stroke:#F04953} +.chart__values-line.color-index-warning{stroke:#FFD144} +.chart__values-line.color-index-ok{stroke:#01a982} +.chart__values-line.color-index-unknown{stroke:#CCC} +.chart__values-line.color-index-disabled{stroke:#EDEDED} +.chart__values-line.color-index-graph-1,.chart__values-line.color-index-graph-5{stroke:#617c91} +.chart__values-line.color-index-graph-2,.chart__values-line.color-index-graph-6{stroke:#94aba8} +.chart__values-line.color-index-graph-3,.chart__values-line.color-index-graph-7{stroke:#998e88} +.chart__values-line.color-index-graph-4,.chart__values-line.color-index-graph-8{stroke:#8c6694} +.chart__values-line.color-index-grey-1,.chart__values-line.color-index-grey-5{stroke:#333} +.chart__values-line.color-index-grey-2,.chart__values-line.color-index-grey-6{stroke:#3B3B3B} +.chart__values-line.color-index-grey-3,.chart__values-line.color-index-grey-7{stroke:#434343} +.chart__values-line.color-index-grey-4,.chart__values-line.color-index-grey-8{stroke:#666} +.chart__values-area.color-index-error,.chart__values-bar.color-index-error{fill:rgba(240,73,83,.7)} +.chart__values-area.color-index-warning,.chart__values-bar.color-index-warning{fill:rgba(255,209,68,.7)} +.chart__values-area.color-index-ok,.chart__values-bar.color-index-ok{fill:rgba(1,169,130,.7)} +.chart__values-area.color-index-unknown,.chart__values-bar.color-index-unknown{fill:rgba(204,204,204,.7)} +.chart__values-area.color-index-disabled,.chart__values-bar.color-index-disabled{fill:rgba(237,237,237,.7)} +.chart__values-area.color-index-graph-1,.chart__values-area.color-index-graph-5,.chart__values-bar.color-index-graph-1,.chart__values-bar.color-index-graph-5{fill:rgba(97,124,145,.7)} +.chart__values-area.color-index-graph-2,.chart__values-area.color-index-graph-6,.chart__values-bar.color-index-graph-2,.chart__values-bar.color-index-graph-6{fill:rgba(148,171,168,.7)} +.chart__values-area.color-index-graph-3,.chart__values-area.color-index-graph-7,.chart__values-bar.color-index-graph-3,.chart__values-bar.color-index-graph-7{fill:rgba(153,142,136,.7)} +.chart__values-area.color-index-graph-4,.chart__values-area.color-index-graph-8,.chart__values-bar.color-index-graph-4,.chart__values-bar.color-index-graph-8{fill:rgba(140,102,148,.7)} +.chart__values-area--active.color-index-unset,.chart__values-bar--active.color-index-unset{fill:#ddd} +.chart__values-area--active.color-index-brand,.chart__values-bar--active.color-index-brand{fill:#01a982} +.chart__values-area--active.color-index-error,.chart__values-bar--active.color-index-error{fill:#F04953} +.chart__values-area--active.color-index-warning,.chart__values-bar--active.color-index-warning{fill:#FFD144} +.chart__values-area--active.color-index-ok,.chart__values-bar--active.color-index-ok{fill:#01a982} +.chart__values-area--active.color-index-unknown,.chart__values-bar--active.color-index-unknown{fill:#CCC} +.chart__values-area--active.color-index-disabled,.chart__values-bar--active.color-index-disabled{fill:#EDEDED} +.chart__values-area--active.color-index-graph-1,.chart__values-area--active.color-index-graph-5,.chart__values-bar--active.color-index-graph-1,.chart__values-bar--active.color-index-graph-5{fill:#617c91} +.chart__values-area--active.color-index-graph-2,.chart__values-area--active.color-index-graph-6,.chart__values-bar--active.color-index-graph-2,.chart__values-bar--active.color-index-graph-6{fill:#94aba8} +.chart__values-area--active.color-index-graph-3,.chart__values-area--active.color-index-graph-7,.chart__values-bar--active.color-index-graph-3,.chart__values-bar--active.color-index-graph-7{fill:#998e88} +.chart__values-area--active.color-index-graph-4,.chart__values-area--active.color-index-graph-8,.chart__values-bar--active.color-index-graph-4,.chart__values-bar--active.color-index-graph-8{fill:#8c6694} +.chart__values-area--active.color-index-grey-1,.chart__values-area--active.color-index-grey-5,.chart__values-bar--active.color-index-grey-1,.chart__values-bar--active.color-index-grey-5{fill:#333} +.chart__values-area--active.color-index-grey-2,.chart__values-area--active.color-index-grey-6,.chart__values-bar--active.color-index-grey-2,.chart__values-bar--active.color-index-grey-6{fill:#3B3B3B} +.chart__values-area--active.color-index-grey-3,.chart__values-area--active.color-index-grey-7,.chart__values-bar--active.color-index-grey-3,.chart__values-bar--active.color-index-grey-7{fill:#434343} +.chart__values-area--active.color-index-grey-4,.chart__values-area--active.color-index-grey-8,.chart__values-bar--active.color-index-grey-4,.chart__values-bar--active.color-index-grey-8{fill:#666} +.chart__values-point{stroke-width:3px;fill:#fff} +.chart__values-point.color-index-loading{stroke:#ddd;stroke-dasharray:1px 10px;stroke-dashoffset:0} +.chart__values-point.color-index-unset{stroke:#ddd} +.chart__values-point.color-index-brand{stroke:#01a982} +.chart__values-point.color-index-error{stroke:#F04953} +.chart__values-point.color-index-warning{stroke:#FFD144} +.chart__values-point.color-index-ok{stroke:#01a982} +.chart__values-point.color-index-unknown{stroke:#CCC} +.chart__values-point.color-index-disabled{stroke:#EDEDED} +.chart__values-point.color-index-graph-1,.chart__values-point.color-index-graph-5{stroke:#617c91} +.chart__values-point.color-index-graph-2,.chart__values-point.color-index-graph-6{stroke:#94aba8} +.chart__values-point.color-index-graph-3,.chart__values-point.color-index-graph-7{stroke:#998e88} +.chart__values-point.color-index-graph-4,.chart__values-point.color-index-graph-8{stroke:#8c6694} +.chart__values-point.color-index-grey-1,.chart__values-point.color-index-grey-5{stroke:#333} +.chart__values-point.color-index-grey-2,.chart__values-point.color-index-grey-6{stroke:#3B3B3B} +.chart__values-point.color-index-grey-3,.chart__values-point.color-index-grey-7{stroke:#434343} +.chart__values-point.color-index-grey-4,.chart__values-point.color-index-grey-8{stroke:#666} +.chart__values--loading{stroke-width:24px} +.chart__values--loading.color-index-loading{stroke:#ddd;stroke-dasharray:1px 10px;stroke-dashoffset:0} +.chart__values--loading.color-index-unset{stroke:#ddd} +.chart__values--loading.color-index-brand{stroke:#01a982} +.chart__values--loading.color-index-error{stroke:#F04953} +.chart__values--loading.color-index-warning{stroke:#FFD144} +.chart__values--loading.color-index-ok{stroke:#01a982} +.chart__values--loading.color-index-unknown{stroke:#CCC} +.chart__values--loading.color-index-disabled{stroke:#EDEDED} +.chart__values--loading.color-index-graph-1,.chart__values--loading.color-index-graph-5{stroke:#617c91} +.chart__values--loading.color-index-graph-2,.chart__values--loading.color-index-graph-6{stroke:#94aba8} +.chart__values--loading.color-index-graph-3,.chart__values--loading.color-index-graph-7{stroke:#998e88} +.chart__values--loading.color-index-graph-4,.chart__values--loading.color-index-graph-8{stroke:#8c6694} +.chart__values--loading.color-index-grey-1,.chart__values--loading.color-index-grey-5{stroke:#333} +.chart__values--loading.color-index-grey-2,.chart__values--loading.color-index-grey-6{stroke:#3B3B3B} +.chart__values--loading.color-index-grey-3,.chart__values--loading.color-index-grey-7{stroke:#434343} +.chart__values--loading.color-index-grey-4,.chart__values--loading.color-index-grey-8{stroke:#666} +.chart__threshold{stroke-width:2px;stroke:rgba(51,51,51,.2)} +.chart__yaxis .chart__bar.color-index-error{fill:rgba(240,73,83,.5)} +.chart__yaxis .chart__bar.color-index-warning{fill:rgba(255,209,68,.5)} +.chart__yaxis .chart__bar.color-index-ok{fill:rgba(1,169,130,.5)} +.chart__yaxis .chart__bar.color-index-unknown{fill:rgba(204,204,204,.5)} +.chart__yaxis .chart__bar.color-index-disabled{fill:rgba(237,237,237,.5)} +.chart__yaxis .chart__bar.color-index-graph-1,.chart__yaxis .chart__bar.color-index-graph-5{fill:rgba(97,124,145,.5)} +.chart__yaxis .chart__bar.color-index-graph-2,.chart__yaxis .chart__bar.color-index-graph-6{fill:rgba(148,171,168,.5)} +.chart__yaxis .chart__bar.color-index-graph-3,.chart__yaxis .chart__bar.color-index-graph-7{fill:rgba(153,142,136,.5)} +.chart__yaxis .chart__bar.color-index-graph-4,.chart__yaxis .chart__bar.color-index-graph-8{fill:rgba(140,102,148,.5)} +.chart__xaxis-index text{fill:#777} +.chart__xaxis-index--eclipse text{fill:transparent} +.chart__xaxis-index--active text{fill:#333} +.chart__front-xband-background{fill:transparent} +.chart__cursor{stroke:#333;stroke-width:2} +.chart__cursor-point{stroke-width:2} +.chart__cursor-point.color-index-unset{fill:#ddd} +.chart__cursor-point.color-index-brand{fill:#01a982} +.chart__cursor-point.color-index-error{fill:#F04953} +.chart__cursor-point.color-index-warning{fill:#FFD144} +.chart__cursor-point.color-index-ok{fill:#01a982} +.chart__cursor-point.color-index-unknown{fill:#CCC} +.chart__cursor-point.color-index-disabled{fill:#EDEDED} +.chart__cursor-point.color-index-graph-1,.chart__cursor-point.color-index-graph-5{fill:#617c91} +.chart__cursor-point.color-index-graph-2,.chart__cursor-point.color-index-graph-6{fill:#94aba8} +.chart__cursor-point.color-index-graph-3,.chart__cursor-point.color-index-graph-7{fill:#998e88} +.chart__cursor-point.color-index-graph-4,.chart__cursor-point.color-index-graph-8{fill:#8c6694} +.chart__cursor-point.color-index-grey-1,.chart__cursor-point.color-index-grey-5{fill:#333} +.chart__cursor-point.color-index-grey-2,.chart__cursor-point.color-index-grey-6{fill:#3B3B3B} +.chart__cursor-point.color-index-grey-3,.chart__cursor-point.color-index-grey-7{fill:#434343} +.chart__cursor-point.color-index-grey-4,.chart__cursor-point.color-index-grey-8{fill:#666} +.chart__legend--overlay{padding:12px} +@media screen and (max-width:44.9375em){.chart__legend--overlay{margin:0 auto} +} +@media screen and (min-width:45em){.chart__values g{-webkit-animation:reveal-chart 1.5s;animation:reveal-chart 1.5s} +.chart__legend--overlay{position:absolute;left:0;margin:0;background-color:rgba(255,255,255,.8)} +} +.chart--area .chart__gradient.color-index-error .begin,.chart--bar .chart__gradient.color-index-error .begin{stop-color:#F04953} +.chart--area .chart__gradient.color-index-error .mid,.chart--bar .chart__gradient.color-index-error .mid{stop-color:#F04953;stop-opacity:.5} +.chart--area .chart__gradient.color-index-error .end,.chart--bar .chart__gradient.color-index-error .end{stop-color:#F04953;stop-opacity:0} +.chart--area .chart__gradient.color-index-warning .begin,.chart--bar .chart__gradient.color-index-warning .begin{stop-color:#FFD144} +.chart--area .chart__gradient.color-index-warning .mid,.chart--bar .chart__gradient.color-index-warning .mid{stop-color:#FFD144;stop-opacity:.5} +.chart--area .chart__gradient.color-index-warning .end,.chart--bar .chart__gradient.color-index-warning .end{stop-color:#FFD144;stop-opacity:0} +.chart--area .chart__gradient.color-index-ok .begin,.chart--bar .chart__gradient.color-index-ok .begin{stop-color:#01a982} +.chart--area .chart__gradient.color-index-ok .mid,.chart--bar .chart__gradient.color-index-ok .mid{stop-color:#01a982;stop-opacity:.5} +.chart--area .chart__gradient.color-index-ok .end,.chart--bar .chart__gradient.color-index-ok .end{stop-color:#01a982;stop-opacity:0} +.chart--area .chart__gradient.color-index-unknown .begin,.chart--bar .chart__gradient.color-index-unknown .begin{stop-color:#CCC} +.chart--area .chart__gradient.color-index-unknown .mid,.chart--bar .chart__gradient.color-index-unknown .mid{stop-color:#CCC;stop-opacity:.5} +.chart--area .chart__gradient.color-index-unknown .end,.chart--bar .chart__gradient.color-index-unknown .end{stop-color:#CCC;stop-opacity:0} +.chart--area .chart__gradient.color-index-disabled .begin,.chart--bar .chart__gradient.color-index-disabled .begin{stop-color:#EDEDED} +.chart--area .chart__gradient.color-index-disabled .mid,.chart--bar .chart__gradient.color-index-disabled .mid{stop-color:#EDEDED;stop-opacity:.5} +.chart--area .chart__gradient.color-index-disabled .end,.chart--bar .chart__gradient.color-index-disabled .end{stop-color:#EDEDED;stop-opacity:0} +.chart--area .chart__gradient.color-index-graph-1 .begin,.chart--area .chart__gradient.color-index-graph-5 .begin,.chart--bar .chart__gradient.color-index-graph-1 .begin,.chart--bar .chart__gradient.color-index-graph-5 .begin{stop-color:#617c91} +.chart--area .chart__gradient.color-index-graph-1 .mid,.chart--area .chart__gradient.color-index-graph-5 .mid,.chart--bar .chart__gradient.color-index-graph-1 .mid,.chart--bar .chart__gradient.color-index-graph-5 .mid{stop-color:#617c91;stop-opacity:.5} +.chart--area .chart__gradient.color-index-graph-1 .end,.chart--area .chart__gradient.color-index-graph-5 .end,.chart--bar .chart__gradient.color-index-graph-1 .end,.chart--bar .chart__gradient.color-index-graph-5 .end{stop-color:#617c91;stop-opacity:0} +.chart--area .chart__gradient.color-index-graph-2 .begin,.chart--area .chart__gradient.color-index-graph-6 .begin,.chart--bar .chart__gradient.color-index-graph-2 .begin,.chart--bar .chart__gradient.color-index-graph-6 .begin{stop-color:#94aba8} +.chart--area .chart__gradient.color-index-graph-2 .mid,.chart--area .chart__gradient.color-index-graph-6 .mid,.chart--bar .chart__gradient.color-index-graph-2 .mid,.chart--bar .chart__gradient.color-index-graph-6 .mid{stop-color:#94aba8;stop-opacity:.5} +.chart--area .chart__gradient.color-index-graph-2 .end,.chart--area .chart__gradient.color-index-graph-6 .end,.chart--bar .chart__gradient.color-index-graph-2 .end,.chart--bar .chart__gradient.color-index-graph-6 .end{stop-color:#94aba8;stop-opacity:0} +.chart--area .chart__gradient.color-index-graph-3 .begin,.chart--area .chart__gradient.color-index-graph-7 .begin,.chart--bar .chart__gradient.color-index-graph-3 .begin,.chart--bar .chart__gradient.color-index-graph-7 .begin{stop-color:#998e88} +.chart--area .chart__gradient.color-index-graph-3 .mid,.chart--area .chart__gradient.color-index-graph-7 .mid,.chart--bar .chart__gradient.color-index-graph-3 .mid,.chart--bar .chart__gradient.color-index-graph-7 .mid{stop-color:#998e88;stop-opacity:.5} +.chart--area .chart__gradient.color-index-graph-3 .end,.chart--area .chart__gradient.color-index-graph-7 .end,.chart--bar .chart__gradient.color-index-graph-3 .end,.chart--bar .chart__gradient.color-index-graph-7 .end{stop-color:#998e88;stop-opacity:0} +.chart--area .chart__gradient.color-index-graph-4 .begin,.chart--area .chart__gradient.color-index-graph-8 .begin,.chart--bar .chart__gradient.color-index-graph-4 .begin,.chart--bar .chart__gradient.color-index-graph-8 .begin{stop-color:#8c6694} +.chart--area .chart__gradient.color-index-graph-4 .mid,.chart--area .chart__gradient.color-index-graph-8 .mid,.chart--bar .chart__gradient.color-index-graph-4 .mid,.chart--bar .chart__gradient.color-index-graph-8 .mid{stop-color:#8c6694;stop-opacity:.5} +.chart--area .chart__gradient.color-index-graph-4 .end,.chart--area .chart__gradient.color-index-graph-8 .end,.chart--bar .chart__gradient.color-index-graph-4 .end,.chart--bar .chart__gradient.color-index-graph-8 .end{stop-color:#8c6694;stop-opacity:0} +.chart--small .chart__graphic{height:96px} +.chart--large .chart__graphic{height:288px} +.chart--sparkline{display:inline-block;margin-right:6px} +.chart--sparkline .chart__graphic{width:auto;height:24px} +.chart--sparkline .chart__values-area.color-index-unset,.chart--sparkline .chart__values-bar.color-index-unset{fill:#ddd} +.chart--sparkline .chart__values-area.color-index-brand,.chart--sparkline .chart__values-bar.color-index-brand{fill:#01a982} +.chart--sparkline .chart__values-area.color-index-error,.chart--sparkline .chart__values-bar.color-index-error{fill:#F04953} +.chart--sparkline .chart__values-area.color-index-warning,.chart--sparkline .chart__values-bar.color-index-warning{fill:#FFD144} +.chart--sparkline .chart__values-area.color-index-ok,.chart--sparkline .chart__values-bar.color-index-ok{fill:#01a982} +.chart--sparkline .chart__values-area.color-index-unknown,.chart--sparkline .chart__values-bar.color-index-unknown{fill:#CCC} +.chart--sparkline .chart__values-area.color-index-disabled,.chart--sparkline .chart__values-bar.color-index-disabled{fill:#EDEDED} +.chart--sparkline .chart__values-area.color-index-graph-1,.chart--sparkline .chart__values-area.color-index-graph-5,.chart--sparkline .chart__values-bar.color-index-graph-1,.chart--sparkline .chart__values-bar.color-index-graph-5{fill:#617c91} +.chart--sparkline .chart__values-area.color-index-graph-2,.chart--sparkline .chart__values-area.color-index-graph-6,.chart--sparkline .chart__values-bar.color-index-graph-2,.chart--sparkline .chart__values-bar.color-index-graph-6{fill:#94aba8} +.chart--sparkline .chart__values-area.color-index-graph-3,.chart--sparkline .chart__values-area.color-index-graph-7,.chart--sparkline .chart__values-bar.color-index-graph-3,.chart--sparkline .chart__values-bar.color-index-graph-7{fill:#998e88} +.chart--sparkline .chart__values-area.color-index-graph-4,.chart--sparkline .chart__values-area.color-index-graph-8,.chart--sparkline .chart__values-bar.color-index-graph-4,.chart--sparkline .chart__values-bar.color-index-graph-8{fill:#8c6694} +.chart--sparkline .chart__values-area.color-index-grey-1,.chart--sparkline .chart__values-area.color-index-grey-5,.chart--sparkline .chart__values-bar.color-index-grey-1,.chart--sparkline .chart__values-bar.color-index-grey-5{fill:#333} +.chart--sparkline .chart__values-area.color-index-grey-2,.chart--sparkline .chart__values-area.color-index-grey-6,.chart--sparkline .chart__values-bar.color-index-grey-2,.chart--sparkline .chart__values-bar.color-index-grey-6{fill:#3B3B3B} +.chart--sparkline .chart__values-area.color-index-grey-3,.chart--sparkline .chart__values-area.color-index-grey-7,.chart--sparkline .chart__values-bar.color-index-grey-3,.chart--sparkline .chart__values-bar.color-index-grey-7{fill:#434343} +.chart--sparkline .chart__values-area.color-index-grey-4,.chart--sparkline .chart__values-area.color-index-grey-8,.chart--sparkline .chart__values-bar.color-index-grey-4,.chart--sparkline .chart__values-bar.color-index-grey-8{fill:#666} +.check-box{margin-right:12px;white-space:nowrap} +.check-box:not(.check-box--disabled){cursor:pointer} +.check-box:hover:not(.check-box--disabled) .check-box__control,.check-box:hover:not(.check-box--disabled) .check-box__input:checked+.check-box__control{border-color:#000} +.check-box:hover:not(.check-box--disabled) .check-box__label{color:#000} +.check-box__input{opacity:0;position:absolute} +.check-box__input:checked+.check-box__control{border-color:#01a982} +.check-box__input:checked+.check-box__control .check-box__control-check{display:block} +.check-box__input:checked+.check-box__control+.check-box__label{color:#333} +.check-box__input:focus+.check-box__control{border-color:#2AD2C9;box-shadow:0 0 1px 1px #2AD2C9} +.check-box__control{position:relative;top:-1px;display:inline-block;width:24px;height:24px;margin-right:12px;vertical-align:middle;background-color:inherit;border:2px solid #999;border-radius:0} +.check-box__control-check{position:absolute;top:-2px;left:-2px;display:none;width:24px;height:24px;stroke-width:4px;stroke:#01a982} +.check-box__label{color:#777} +.check-box--disabled .check-box__control{opacity:.5} +.check-box--toggle:hover:not(.check-box--disabled) .check-box__control:after,.check-box--toggle:hover:not(.check-box--disabled) .check-box__input:checked+.check-box__control:after{content:"";border-color:#000} +.check-box--toggle .check-box__control{width:48px;height:24px;border-radius:24px;background-color:#b2b2b2;border:none;transition:background-color .3s} +.check-box--toggle .check-box__control:after{content:"";display:block;position:absolute;top:-2px;left:0;width:28px;height:28px;background-color:#fff;border:2px solid #999;border-radius:24px;transition:margin-left .3s} +.check-box--toggle .check-box__input:checked+.check-box__control{background-color:#01a982} +.check-box--toggle .check-box__input:checked+.check-box__control:after{content:"";background-color:#fff;border-color:#01a982;margin-left:24px} +.background-color-index-neutral-1,.background-color-index-neutral-4{background-color:#425563} +.background-color-index-neutral-1-a,.background-color-index-neutral-4-a{background-color:rgba(66,85,99,.8)} +.background-color-index-neutral-2,.background-color-index-neutral-5{background-color:#5F7A76} +.background-color-index-neutral-2-a,.background-color-index-neutral-5-a{background-color:rgba(95,122,118,.8)} +.background-color-index-neutral-3,.background-color-index-neutral-6{background-color:#80746E} +.background-color-index-neutral-3-a,.background-color-index-neutral-6-a{background-color:rgba(128,116,110,.8)} +.background-color-index-accent-1,.background-color-index-accent-3{background-color:#2AD2C9} +.background-color-index-accent-1-a,.background-color-index-accent-3-a{background-color:rgba(42,210,201,.8)} +.background-color-index-accent-2,.background-color-index-accent-4{background-color:#614767} +.background-color-index-accent-2-a,.background-color-index-accent-4-a{background-color:rgba(97,71,103,.8)} +.background-color-index-grey-1,.background-color-index-grey-5{background-color:#333} +.background-color-index-grey-1-a,.background-color-index-grey-5-a{background-color:rgba(51,51,51,.8)} +.background-color-index-grey-2,.background-color-index-grey-6{background-color:#3B3B3B} +.background-color-index-grey-2-a,.background-color-index-grey-6-a{background-color:rgba(59,59,59,.8)} +.background-color-index-grey-3,.background-color-index-grey-7{background-color:#434343} +.background-color-index-grey-3-a,.background-color-index-grey-7-a{background-color:rgba(67,67,67,.8)} +.background-color-index-grey-4,.background-color-index-grey-8{background-color:#666} +.background-color-index-grey-4-a,.background-color-index-grey-8-a{background-color:rgba(102,102,102,.8)} +.background-color-index-graph-1,.background-color-index-graph-5{background-color:#617c91} +.background-color-index-graph-2,.background-color-index-graph-6{background-color:#94aba8} +.background-color-index-graph-3,.background-color-index-graph-7{background-color:#998e88} +.background-color-index-graph-4,.background-color-index-graph-8{background-color:#8c6694} +[class*=background-color-index-]{color:#dbdbdb} +.background-color-index-light-1,.background-color-index-light-3{background-color:#fff;color:inherit} +.background-color-index-light-2,.background-color-index-light-4{background-color:#f5f5f5;color:inherit} +.center-column{padding-left:24px;padding-right:24px} +.center-column .center-column__content{width:100%;max-width:960px;margin-left:auto;margin-right:auto} +@media screen and (min-width:45em){.dashboard{height:calc(100vh - 96px)} +.donut__slice{-webkit-animation:draw-stroke 3s;animation:draw-stroke 3s} +} +@media screen and (max-width:44.9375em){.dashboard{height:calc(100vh - 48px)} +} +.distribution{position:relative;display:block} +.distribution__graphic{width:100%;height:192px;max-height:calc(100vh - 144px)} +.distribution__box{cursor:pointer} +.distribution__box.color-index-unset{fill:#ddd} +.distribution__box.color-index-brand{fill:#01a982} +.distribution__box.color-index-error{fill:#F04953} +.distribution__box.color-index-warning{fill:#FFD144} +.distribution__box.color-index-ok{fill:#01a982} +.distribution__box.color-index-unknown{fill:#CCC} +.distribution__box.color-index-disabled{fill:#EDEDED} +.distribution__box.color-index-graph-1,.distribution__box.color-index-graph-5{fill:#617c91} +.distribution__box.color-index-graph-2,.distribution__box.color-index-graph-6{fill:#94aba8} +.distribution__box.color-index-graph-3,.distribution__box.color-index-graph-7{fill:#998e88} +.distribution__box.color-index-graph-4,.distribution__box.color-index-graph-8{fill:#8c6694} +.distribution__box.color-index-grey-1,.distribution__box.color-index-grey-5{fill:#333} +.distribution__box.color-index-grey-2,.distribution__box.color-index-grey-6{fill:#3B3B3B} +.distribution__box.color-index-grey-3,.distribution__box.color-index-grey-7{fill:#434343} +.distribution__box.color-index-grey-4,.distribution__box.color-index-grey-8{fill:#666} +.distribution__icons.color-index-loading{stroke:#ddd;stroke-dasharray:1px 10px;stroke-dashoffset:0} +.distribution__icons.color-index-unset{stroke:#ddd} +.distribution__icons.color-index-brand{stroke:#01a982} +.distribution__icons.color-index-error{stroke:#F04953} +.distribution__icons.color-index-warning{stroke:#FFD144} +.distribution__icons.color-index-ok{stroke:#01a982} +.distribution__icons.color-index-unknown{stroke:#CCC} +.distribution__icons.color-index-disabled{stroke:#EDEDED} +.distribution__icons.color-index-graph-1,.distribution__icons.color-index-graph-5{stroke:#617c91} +.distribution__icons.color-index-graph-2,.distribution__icons.color-index-graph-6{stroke:#94aba8} +.distribution__icons.color-index-graph-3,.distribution__icons.color-index-graph-7{stroke:#998e88} +.distribution__icons.color-index-graph-4,.distribution__icons.color-index-graph-8{stroke:#8c6694} +.distribution__icons.color-index-grey-1,.distribution__icons.color-index-grey-5{stroke:#333} +.distribution__icons.color-index-grey-2,.distribution__icons.color-index-grey-6{stroke:#3B3B3B} +.distribution__icons.color-index-grey-3,.distribution__icons.color-index-grey-7{stroke:#434343} +.distribution__icons.color-index-grey-4,.distribution__icons.color-index-grey-8{stroke:#666} +.distribution__label{position:absolute;padding:24px;color:#dbdbdb;text-align:center} +.distribution__label-value{font-size:48px;font-size:3rem;line-height:1;font-weight:700} +.distribution__label-units{font-size:24px;font-size:1.5rem;line-height:inherit;margin-left:6px;font-weight:400} +.distribution__label-label{display:block;text-align:center} +.distribution__label--small{padding:12px} +.distribution__label--small .distribution__label-value{font-size:20px;font-size:1.25rem;line-height:1.2} +.distribution__label--icons{background-color:rgba(255,255,255,.8);color:#333} +.distribution__label--icons .label-units{color:#777} +.distribution__label--icons .label-label{display:block;text-align:center} +.distribution__loading-indicator{stroke-width:24px} +.distribution__loading-indicator.color-index-loading{stroke:#ddd;stroke-dasharray:1px 10px;stroke-dashoffset:0} +.distribution__loading-indicator.color-index-unset{stroke:#ddd} +.distribution__loading-indicator.color-index-brand{stroke:#01a982} +.distribution__loading-indicator.color-index-error{stroke:#F04953} +.distribution__loading-indicator.color-index-warning{stroke:#FFD144} +.distribution__loading-indicator.color-index-ok{stroke:#01a982} +.distribution__loading-indicator.color-index-unknown{stroke:#CCC} +.distribution__loading-indicator.color-index-disabled{stroke:#EDEDED} +.distribution__loading-indicator.color-index-graph-1,.distribution__loading-indicator.color-index-graph-5{stroke:#617c91} +.distribution__loading-indicator.color-index-graph-2,.distribution__loading-indicator.color-index-graph-6{stroke:#94aba8} +.distribution__loading-indicator.color-index-graph-3,.distribution__loading-indicator.color-index-graph-7{stroke:#998e88} +.distribution__loading-indicator.color-index-graph-4,.distribution__loading-indicator.color-index-graph-8{stroke:#8c6694} +.distribution__loading-indicator.color-index-grey-1,.distribution__loading-indicator.color-index-grey-5{stroke:#333} +.distribution__loading-indicator.color-index-grey-2,.distribution__loading-indicator.color-index-grey-6{stroke:#3B3B3B} +.distribution__loading-indicator.color-index-grey-3,.distribution__loading-indicator.color-index-grey-7{stroke:#434343} +.distribution__loading-indicator.color-index-grey-4,.distribution__loading-indicator.color-index-grey-8{stroke:#666} +.distribution--small .distribution__graphic{height:96px} +.distribution--large .distribution__graphic{height:288px} +@-webkit-keyframes draw-stroke{0%{stroke-dashoffset:768px} +100%{stroke-dashoffset:0} +} +@keyframes draw-stroke{0%{stroke-dashoffset:768px} +100%{stroke-dashoffset:0} +} +@media screen and (max-width:44.9375em){.donut{width:192px;margin:0 auto} +} +.donut.series-pre path{stroke-dashoffset:768px} +.donut__graphic-container{position:relative;width:192px;height:192px} +.donut svg.donut__graphic{position:absolute;top:0;left:0;width:100%;height:100%;overflow:visible} +.donut__slice{stroke-width:24px;stroke-linecap:butt;stroke-dasharray:768px 768px;stroke-dashoffset:0;fill:none;cursor:pointer;stroke:#b2b2b2} +.donut__slice.color-index-loading{stroke:#ddd;stroke-dasharray:1px 10px;stroke-dashoffset:0} +.donut__slice.color-index-unset{stroke:#ddd} +.donut__slice.color-index-brand{stroke:#01a982} +.donut__slice.color-index-error{stroke:#F04953} +.donut__slice.color-index-warning{stroke:#FFD144} +.donut__slice.color-index-ok{stroke:#01a982} +.donut__slice.color-index-unknown{stroke:#CCC} +.donut__slice.color-index-disabled{stroke:#EDEDED} +.donut__slice.color-index-graph-1,.donut__slice.color-index-graph-5{stroke:#617c91} +.donut__slice.color-index-graph-2,.donut__slice.color-index-graph-6{stroke:#94aba8} +.donut__slice.color-index-graph-3,.donut__slice.color-index-graph-7{stroke:#998e88} +.donut__slice.color-index-graph-4,.donut__slice.color-index-graph-8{stroke:#8c6694} +.donut__slice.color-index-grey-1,.donut__slice.color-index-grey-5{stroke:#333} +.donut__slice.color-index-grey-2,.donut__slice.color-index-grey-6{stroke:#3B3B3B} +.donut__slice.color-index-grey-3,.donut__slice.color-index-grey-7{stroke:#434343} +.donut__slice.color-index-grey-4,.donut__slice.color-index-grey-8{stroke:#666} +.donut__slice-indicator.color-index-unset{fill:#ddd} +.donut__slice-indicator.color-index-brand{fill:#01a982} +.donut__slice-indicator.color-index-error{fill:#F04953} +.donut__slice-indicator.color-index-warning{fill:#FFD144} +.donut__slice-indicator.color-index-ok{fill:#01a982} +.donut__slice-indicator.color-index-unknown{fill:#CCC} +.donut__slice-indicator.color-index-disabled{fill:#EDEDED} +.donut__slice-indicator.color-index-graph-1,.donut__slice-indicator.color-index-graph-5{fill:#617c91} +.donut__slice-indicator.color-index-graph-2,.donut__slice-indicator.color-index-graph-6{fill:#94aba8} +.donut__slice-indicator.color-index-graph-3,.donut__slice-indicator.color-index-graph-7{fill:#998e88} +.donut__slice-indicator.color-index-graph-4,.donut__slice-indicator.color-index-graph-8{fill:#8c6694} +.donut__slice-indicator.color-index-grey-1,.donut__slice-indicator.color-index-grey-5{fill:#333} +.donut__slice-indicator.color-index-grey-2,.donut__slice-indicator.color-index-grey-6{fill:#3B3B3B} +.donut__slice-indicator.color-index-grey-3,.donut__slice-indicator.color-index-grey-7{fill:#434343} +.donut__slice-indicator.color-index-grey-4,.donut__slice-indicator.color-index-grey-8{fill:#666} +.donut__slice--active{stroke-width:24px} +.donut__active{position:absolute;width:100%;margin-top:72px;text-align:center;white-space:normal} +.donut__active-value{font-size:48px;font-size:3rem;line-height:38px;font-weight:700} +.donut__active-units{font-size:24px;font-size:1.5rem;line-height:inherit;margin-left:6px;color:#777;font-weight:400} +.donut__active-label{width:50%;margin:0 auto;font-size:14px;font-size:.875rem;line-height:16px} +.donut__max-label,.donut__min-label{position:absolute;bottom:0;color:#777;font-size:14px;font-size:.875rem;line-height:1.71429} +.donut__min-label{left:12px} +.donut__max-label{right:12px} +.donut__legend{margin:24px 0 0} +@media screen and (min-width:45em){.donut--landscape{white-space:nowrap} +.donut--landscape .donut__graphic-container,.donut--landscape .donut__legend{display:inline-block;vertical-align:middle} +.donut--landscape .donut__legend{margin:0 0 0 24px} +} +.donut--portrait .donut__graphic-container{display:block} +.donut--portrait .donut__legend{margin:24px 0 0} +.donut--partial .donut__graphic-container{height:168px} +.donut--small .donut__graphic-container{width:144px;height:144px} +.donut--small .donut__active{margin-top:48px} +@media screen and (min-width:45em){.donut--small .donut__legend{display:none} +} +.drop{position:fixed;z-index:20;background-color:rgba(255,255,255,.9);border:none;border-radius:0;box-shadow:0 2px 4px rgba(0,0,0,.3);overflow:auto} +.footer{min-height:36px;line-height:36px;width:100%} +.footer__content{display:flex;justify-content:space-between;width:100%;padding-left:24px;padding-right:24px} +.footer__content.center-column__content>.menu:first-child{flex:0 0 auto;width:192px} +@media screen and (max-width:44.9375em){.footer__content.center-column__content>.menu:first-child{width:100%} +.footer__content.center-column__content>.menu:first-child:empty{width:0;margin:0;padding:0} +} +.footer__content>.flex-1{flex:1} +.footer__content>.flex-2{flex:2} +.footer__content>.flex-3{flex:3} +.footer__content>.flex-4{flex:4} +.footer__content>*{margin-right:48px} +.footer__content>:last-child{margin-right:0;text-align:left} +.footer--primary{height:auto;padding:24px} +.footer--primary .footer__content{position:relative;color:#777;display:block} +.footer__container--float,:not(.footer__container--float)>.footer--float{position:absolute;bottom:0;right:0;left:0} +.footer--primary .footer__content p{padding-top:12px;margin:0;max-width:none;text-align:right;line-height:24px} +.footer--centered .footer__content{display:block;text-align:center} +.footer--centered .footer__content>*{margin-right:auto;margin-left:auto;text-align:center} +.footer--flush .footer__content{padding-left:0;padding-right:0} +.footer--large .footer__content{padding-top:24px;padding-bottom:24px} +.footer__container--float{padding-left:24px;padding-right:24px} +.form,.form-field{position:relative} +.form--pad-none{padding:0} +.form--pad-small{padding:12px} +.form--pad-medium{padding:24px} +.form--pad-large{padding:48px} +.form--pad-horizontal-none{padding-left:0;padding-right:0} +.form--pad-horizontal-small{padding-left:12px;padding-right:12px} +.form--pad-horizontal-medium{padding-left:24px;padding-right:24px} +.form--pad-horizontal-large{padding-left:48px;padding-right:48px} +.form--pad-vertical-none{padding-top:0;padding-bottom:0} +.form--pad-vertical-small{padding-top:12px;padding-bottom:12px} +.form--pad-vertical-medium{padding-top:24px;padding-bottom:24px} +.form--pad-vertical-large{padding-top:48px;padding-bottom:48px} +.form>.header .header__wrapper{background-color:inherit} +.form fieldset{border:none;margin:24px 0 2rem} +.form fieldset:first-child{margin-top:0} +.form fieldset:last-child{margin-bottom:0} +.form fieldset>legend{font-size:24px;font-size:1.5rem;line-height:1;font-weight:600;margin-bottom:12px} +.form fieldset>:not(.form-field)+.form-field{margin-top:12px} +.form fieldset>.form-field+:not(.form-field){margin-top:24px} +@media screen and (min-width:45em){.form{width:480px;max-width:100%} +.layer .form{padding:18px 48px 48px} +} +@media screen and (max-width:44.9375em){.layer .form{padding-left:24px;padding-right:24px} +.layer .form>.form-fields{margin-top:24px} +.layer .form>.form-fields>.form-field,.layer .form>.form-fields>fieldset>.form-field{margin-left:-24px;margin-right:-24px} +} +.layer .form--sticky{display:flex;flex-direction:column} +.layer .form--sticky>.footer,.layer .form--sticky>.header{flex:0 0 auto} +.form--fill{min-width:0} +.form--compact{max-width:288px} +.form-field{padding:6px 24px;border:1px solid #ccc;margin-bottom:-1px;background-color:#fff;color:#333;opacity:1} +@media screen and (min-width:45em){.form-field{max-width:480px;width:100%;max-height:100vh;transition:all .4s,padding-top .3s .1s,padding-bottom .3s .1s} +.form--compact .form-field{width:288px} +} +@media screen and (max-width:44.9375em){.form-field{display:block} +} +.form--fill .form-field{width:100%} +.form-field:last-child{margin-bottom:0} +.form-field__label{display:block;font-size:14px;font-size:.875rem;line-height:24px;color:#777} +.form-field__contents{display:block;margin-left:-24px;margin-right:-24px} +.form-field__contents>.calendar input,.form-field__contents>.search-input input,.form-field__contents>input[type=email],.form-field__contents>input[type=number],.form-field__contents>input[type=password],.form-field__contents>input[type=range],.form-field__contents>input[type=text],.form-field__contents>select,.form-field__contents>textarea{display:block;width:100%;border:none;padding:0 24px;border-radius:0;font-size:16px;font-size:1rem;line-height:1.5} +.form-field__contents>.calendar input:focus,.form-field__contents>.search-input input:focus,.form-field__contents>input[type=email]:focus,.form-field__contents>input[type=number]:focus,.form-field__contents>input[type=password]:focus,.form-field__contents>input[type=range]:focus,.form-field__contents>input[type=text]:focus,.form-field__contents>select:focus,.form-field__contents>textarea:focus{border:none} +.form-field__contents>input[type=range]{width:calc(100% - 48px);margin-left:24px;margin-right:24px;padding-left:0;padding-right:0} +.form-field__contents>select{display:block;background-position:center right 18px;padding-left:22px} +.form-field__contents>select:-moz-focusring{color:transparent;text-shadow:0 0 0 #000} +.form-field__contents ::-ms-clear{display:none} +.form-field__contents>select::-ms-expand{display:none} +.form-field__contents>select::-ms-value{background:0 0;color:inherit} +.form-field__contents>textarea{vertical-align:top;height:auto;resize:vertical} +.form-field__contents>.check-box,.form-field__contents>.radio-button{display:block;font-size:16px;font-size:1rem;line-height:1.5;margin:12px 24px} +.form-field__contents>.table--selectable table,.header,header.header.box--direction-row>*{margin-bottom:0} +.form-field__contents>.calendar,.form-field__contents>.search-input{display:block} +.form-field__contents>.calendar input,.form-field__contents>.search-input input{margin-left:0;margin-right:0} +.form-field__contents>.calendar .calendar__control,.form-field__contents>.calendar .search-input__control,.form-field__contents>.search-input .calendar__control,.form-field__contents>.search-input .search-input__control{right:6px;bottom:-6px} +.form-field__contents>.table--selectable{font-size:16px;font-size:1rem;line-height:1.5} +.form-field__contents>.table--selectable table td:first-child,.form-field__contents>.table--selectable table th:first-child{padding-left:24px} +.form-field__contents>.form-field{width:auto;margin-top:12px;border:none} +.form-field__contents>.form-field>.form-field__label{border-top:1px solid #ccc;padding-top:6px} +.form-field__contents>.form-field--hidden{margin-top:0} +.form-field__help{display:block;font-size:13px;font-size:.8125rem;line-height:1.84615;color:#777} +.form-field__error{display:block;float:right;color:#F04953;line-height:24px} +.form-field--text,.form-field--text .form-field__label{cursor:pointer} +@media screen and (max-width:44.9375em){.form-field--hidden{display:none} +} +@media screen and (min-width:45em){.form-field--hidden{border:none;margin-bottom:0;padding-top:0;padding-bottom:0;opacity:0;overflow:hidden;max-height:0;transition:max-height .2s,all .4s} +} +.form-field--error{z-index:1;border-color:#F04953} +.form-field--focus{z-index:2;border-color:#2AD2C9} +.header{height:72px;width:100%} +.header--large{height:96px} +.header--small{height:48px} +.header.box>:not(:last-child){margin-right:12px} +.header a{color:inherit} +header.header{font-size:24px;font-size:1.5rem;line-height:inherit;-webkit-transform:translate(0,0);transform:translate(0,0);transition:-webkit-transform .5s;transition:transform .5s} +:not(.header__container--float)>header.header--float{position:absolute;top:0;left:0;right:0} +header.header--primary .header__wrapper{border-bottom:none} +header.header.header--splash{-webkit-transform:translate(0,40vh);transform:translate(0,40vh)} +.header:not(header).box--separator-top{padding-top:6px} +.header:not(header).box--separator-bottom{padding-bottom:6px} +div.header__container{flex-shrink:0} +div.header__container--fixed{position:relative} +div.header__container--fixed .header__wrapper{position:absolute;top:0;left:0;right:0;z-index:3} +@media screen and (min-width:45em){div.header__container--fixed .header__wrapper .header{background-color:rgba(255,255,255,.9);position:fixed} +.control-icon{transition:all .3s ease-in-out} +} +div.header__container--float{position:absolute;top:0;left:0;right:0;padding-left:24px;padding-right:24px} +div.header__wrapper{height:72px} +div.header--large .header__wrapper{height:96px} +div.header--large .header__content{line-height:96px} +div.header--small .header__wrapper{height:48px} +div.header--small .header__content{line-height:48px} +div.header--fixed .header__wrapper{position:absolute;top:0;left:0;right:0;background-color:rgba(255,255,255,.9);z-index:3} +div.header--fixed.header--primary .header__wrapper{position:fixed;background-color:rgba(255,255,255,.9)} +div.header--fixed.header--primary .header__content{position:static;background-color:transparent} +div.header--flush .header__wrapper{padding-left:0;padding-right:0} +.headline{font-size:48px;font-size:3rem;line-height:1;font-weight:100;margin-bottom:24px;max-width:100%} +.headline--large{font-size:60px;font-size:3.75rem;line-height:1.2} +.headline--small{font-size:30px;font-size:1.875rem;line-height:1.6} +.headline--strong{font-weight:600} +.control-icon{display:inline-block;width:48px;height:48px;vertical-align:middle;cursor:pointer;fill:#999;stroke:#999} +.control-icon :not([stroke])[fill=none]{stroke-width:0} +.control-icon [stroke]{stroke:inherit} +.control-icon [fill*="#"]{fill:inherit} +.control-icon.color-index-loading{stroke:#ddd;stroke-dasharray:1px 10px;stroke-dashoffset:0} +.control-icon.color-index-unset{stroke:#ddd;fill:#ddd} +.control-icon.color-index-brand{stroke:#01a982;fill:#01a982} +.control-icon.color-index-error{stroke:#F04953;fill:#F04953} +.control-icon.color-index-warning{stroke:#FFD144;fill:#FFD144} +.control-icon.color-index-ok{stroke:#01a982;fill:#01a982} +.control-icon.color-index-unknown{stroke:#CCC;fill:#CCC} +.control-icon.color-index-disabled{stroke:#EDEDED;fill:#EDEDED} +.control-icon.color-index-graph-1,.control-icon.color-index-graph-5{stroke:#617c91;fill:#617c91} +.control-icon.color-index-graph-2,.control-icon.color-index-graph-6{stroke:#94aba8;fill:#94aba8} +.control-icon.color-index-graph-3,.control-icon.color-index-graph-7{stroke:#998e88;fill:#998e88} +.control-icon.color-index-graph-4,.control-icon.color-index-graph-8{stroke:#8c6694;fill:#8c6694} +.control-icon.color-index-grey-1,.control-icon.color-index-grey-5{stroke:#333;fill:#333} +.control-icon.color-index-grey-2,.control-icon.color-index-grey-6{stroke:#3B3B3B;fill:#3B3B3B} +.control-icon.color-index-grey-3,.control-icon.color-index-grey-7{stroke:#434343;fill:#434343} +.control-icon.color-index-grey-4,.control-icon.color-index-grey-8{stroke:#666;fill:#666} +.anchor>.control-icon:hover,.button>.control-icon:hover,.menu__control>.control-icon:hover,a>.control-icon:hover{fill:#000;stroke:#000} +.control-icon__badge circle{fill:#01a982} +.control-icon__badge text,[class*=background-color-index-]:not([class*=background-color-index-light]) .control-icon{fill:#dbdbdb;stroke:#dbdbdb} +.anchor>[class*=background-color-index-]:not([class*=background-color-index-light]) .control-icon:hover,.button>[class*=background-color-index-]:not([class*=background-color-index-light]) .control-icon:hover,a>[class*=background-color-index-]:not([class*=background-color-index-light]) .control-icon:hover{fill:#fff;stroke:#fff} +.control-icon--active{fill:#000;stroke:#000} +.control-icon--large{width:96px;height:96px} +.status-icon{width:24px;height:24px;vertical-align:middle} +.status-icon .status-icon__base{fill:#CCC} +.status-icon-error .status-icon__base{fill:#F04953} +.status-icon-warning .status-icon__base{fill:#FFD144} +.status-icon-ok .status-icon__base{fill:#01a982} +.status-icon-unknown .status-icon__base{fill:#CCC} +.status-icon-disabled .status-icon__base{fill:#EDEDED} +.status-icon-label .status-icon__base{fill:#CCC} +.status-icon__detail{fill:#fff;stroke:#fff} +.status-icon-unknown .status-icon__detail{fill:#CCC;stroke:#CCC} +.status-icon--large{width:48px;height:48px} +.status-icon--small{width:12px;height:12px;margin-top:6px;margin-bottom:6px} +.status-icon--small .status-icon__detail{display:none} +@-webkit-keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)} +} +@keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)} +} +.icon-changing{width:24px;height:24px;-webkit-animation:rotate 1.5s linear infinite;animation:rotate 1.5s linear infinite} +.icon-changing--small{width:12px;height:12px} +.icon-spinning{width:24px;height:24px;-webkit-animation:rotate 4s steps(4,end) infinite;animation:rotate 4s steps(4,end) infinite} +.icon-spinning--small{width:12px;height:12px} +.logo-icon{width:48px;height:48px} +.logo-icon.color-index-loading{stroke:#ddd;stroke-dasharray:1px 10px;stroke-dashoffset:0} +.logo-icon.color-index-unset{stroke:#ddd} +.logo-icon.color-index-brand{stroke:#01a982} +.logo-icon.color-index-error{stroke:#F04953} +.logo-icon.color-index-warning{stroke:#FFD144} +.logo-icon.color-index-ok{stroke:#01a982} +.logo-icon.color-index-unknown{stroke:#CCC} +.logo-icon.color-index-disabled{stroke:#EDEDED} +.logo-icon.color-index-graph-1,.logo-icon.color-index-graph-5{stroke:#617c91} +.logo-icon.color-index-graph-2,.logo-icon.color-index-graph-6{stroke:#94aba8} +.logo-icon.color-index-graph-3,.logo-icon.color-index-graph-7{stroke:#998e88} +.logo-icon.color-index-graph-4,.logo-icon.color-index-graph-8{stroke:#8c6694} +.logo-icon.color-index-grey-1,.logo-icon.color-index-grey-5{stroke:#333} +.logo-icon.color-index-grey-2,.logo-icon.color-index-grey-6{stroke:#3B3B3B} +.logo-icon.color-index-grey-3,.logo-icon.color-index-grey-7{stroke:#434343} +.logo-icon.color-index-grey-4,.logo-icon.color-index-grey-8{stroke:#666} +.logo-icon--small{width:24px;height:24px} +.logo-icon--large{width:96px;height:96px} +a.active>.label .label__icon.control-icon svg{fill:#000;stroke:#000} +.layer{position:relative;z-index:10} +.layer__container{background-color:#fff} +@media screen and (max-width:44.9375em){.label__text,.layer__overlay:not(.layer__overlay--hidden)+*{display:none} +.layer__container{padding:24px;border-bottom:1px solid #ccc;box-shadow:0 2px 4px rgba(0,0,0,.3)} +} +@media screen and (min-width:45em){.label__icon{display:none} +.layer{position:fixed;top:0;left:0;right:0;bottom:0} +.layer__container{position:absolute;max-height:100%;max-width:100vw;overflow:auto;padding:18px 48px 48px;border-radius:0;box-shadow:0 2px 4px rgba(0,0,0,.3)} +.layer--closeable .layer__container{padding-top:72px;padding-bottom:72px} +} +.layer__closer{position:absolute;top:0;right:0;z-index:1} +.layer--flush .layer__container,.list{padding:0} +@media screen and (min-width:45em){.layer--align-center:not(.layer--hidden){background-image:radial-gradient(circle at top,#fff,#fff 20%,rgba(128,128,128,.6))} +.layer--align-center:not(.layer--hidden) .layer__container{left:50%;transform:translateX(-50%)} +.layer--align-left:not(.layer--hidden){background-image:radial-gradient(circle at left,#fff,#fff 20%,rgba(128,128,128,.6))} +.layer--align-left:not(.layer--hidden) .layer__container{-webkit-animation:slide-right .2s ease-in-out forwards;animation:slide-right .2s ease-in-out forwards} +} +.layer--align-left:not(.layer--hidden) .layer__container{top:0;bottom:0;left:0} +.layer--align-right:not(.layer--hidden) .layer__container{top:0;bottom:0;right:0;display:flex;flex-direction:column;justify-content:center} +@media screen and (min-width:45em){.layer--align-right:not(.layer--hidden){background-image:radial-gradient(circle at right,#fff,#fff 20%,rgba(128,128,128,.6))} +.layer--align-right:not(.layer--hidden) .layer__container{-webkit-animation:slide-left .2s ease-in-out forwards;animation:slide-left .2s ease-in-out forwards} +.layer--align-top:not(.layer--hidden){background-image:radial-gradient(circle at top,#fff,#fff 20%,rgba(128,128,128,.6))} +.layer--align-top:not(.layer--hidden) .layer__container{left:50%;transform:translateX(-50%)} +.layer--align-bottom:not(.layer--hidden){background-image:radial-gradient(circle at bottom,#fff,#fff 20%,rgba(128,128,128,.6))} +} +@media screen and (min-width:45em) and (min-width:45em){.layer--align-top:not(.layer--hidden) .layer__container{-webkit-animation:slide-down .2s ease-in-out forwards;animation:slide-down .2s ease-in-out forwards} +} +.layer--align-bottom:not(.layer--hidden) .layer__container{bottom:0} +.layer--hidden{left:-10000px;z-index:-1} +.layer--hidden.layer--align-left{right:auto} +.layer--hidden.layer--align-left .layer__container{left:-100vw} +@media screen and (max-width:44.9375em){.layer--hidden{display:none} +} +@media screen and (min-width:45em){.layer--hidden.layer--peek{left:0;z-index:10} +.layer--hidden.layer--peek.layer--align-left{right:auto} +.layer--hidden.layer--peek.layer--align-left .layer__container{left:auto;right:-12px;border-right:10px solid #01a982;-webkit-animation:peek-right .5s ease-in-out alternate 5;animation:peek-right .5s ease-in-out alternate 5} +} +@-webkit-keyframes peek-right{0%{right:-6px} +100%{right:-12px} +} +@keyframes peek-right{0%{right:-6px} +100%{right:-12px} +} +@-webkit-keyframes slide-right{0%{left:-100vw} +100%{left:0} +} +@keyframes slide-right{0%{left:-100vw} +100%{left:0} +} +@-webkit-keyframes slide-left{0%{right:-100vw} +100%{right:0} +} +@keyframes slide-left{0%{right:-100vw} +100%{right:0} +} +@-webkit-keyframes slide-down{0%{top:-100vh} +100%{top:0} +} +@keyframes slide-down{0%{top:-100vh} +100%{top:0} +} +.list{margin:0;overflow:auto} +.list .list-item,.list__empty,.list__more{padding:12px 24px} +.list__empty{color:#777} +.list .list-item{border-bottom:1px solid #ccc;display:flex;align-items:center;max-width:none} +.list .list-item:last-child{border-bottom:none} +.list .list-item__image{height:24px;width:24px;margin-right:24px;overflow:hidden;flex:0 0 auto} +.list .list-item__image img{height:100%;width:100%;max-width:none;object-fit:cover} +.list .list-item__annotation,.list .list-item__label{flex:1} +.list .list-item__annotation{margin-left:24px;color:#777} +.list .list-item--selectable{cursor:pointer} +.list .list-item--selectable:hover{background-color:rgba(0,0,0,.1)} +.list .list-item--selected{background-color:#d0f3eb;color:#333} +.list .list-item--row .list-item__annotation{text-align:right} +.list .list-item--column{flex-direction:column;align-items:start} +.list--small .list-item,.list--small .list__more{padding-top:6px;padding-bottom:6px} +.list--small .list-item__image,.list--small .list__more__image{height:12px;width:12px} +.list--large .list-item,.list--large .list__more{padding-top:24px;padding-bottom:24px} +.list--large .list-item__image,.list--large .list__more__image{height:48px;width:48px} +.list--flush{padding-left:0;padding-right:0} +.legend{text-align:left;white-space:normal;display:inline-block;margin:0} +.menu__control--fixed-label,.menu__drop a{white-space:nowrap} +.legend__item,.legend__total{color:#777} +.legend__item>*,.legend__total>*{vertical-align:top} +.legend__item-label,.legend__total-label{display:inline-block;width:72px} +.legend__item-value,.legend__total-value{display:inline-block;width:72px;text-align:right} +.legend__item-units,.legend__total-units{display:inline-block;margin-left:6px} +.legend__item{cursor:pointer} +.legend__item svg.legend__item-swatch{width:12px;height:12px;margin-top:6px;margin-right:12px;overflow:visible} +.legend__item svg.legend__item-swatch.color-index-loading{stroke:#ddd;stroke-dasharray:1px 10px;stroke-dashoffset:0} +.legend__item svg.legend__item-swatch.color-index-unset{stroke:#ddd} +.legend__item svg.legend__item-swatch.color-index-brand{stroke:#01a982} +.legend__item svg.legend__item-swatch.color-index-error{stroke:#F04953} +.legend__item svg.legend__item-swatch.color-index-warning{stroke:#FFD144} +.legend__item svg.legend__item-swatch.color-index-ok{stroke:#01a982} +.legend__item svg.legend__item-swatch.color-index-unknown{stroke:#CCC} +.legend__item svg.legend__item-swatch.color-index-disabled{stroke:#EDEDED} +.legend__item svg.legend__item-swatch.color-index-graph-1,.legend__item svg.legend__item-swatch.color-index-graph-5{stroke:#617c91} +.legend__item svg.legend__item-swatch.color-index-graph-2,.legend__item svg.legend__item-swatch.color-index-graph-6{stroke:#94aba8} +.legend__item svg.legend__item-swatch.color-index-graph-3,.legend__item svg.legend__item-swatch.color-index-graph-7{stroke:#998e88} +.legend__item svg.legend__item-swatch.color-index-graph-4,.legend__item svg.legend__item-swatch.color-index-graph-8{stroke:#8c6694} +.legend__item svg.legend__item-swatch.color-index-grey-1,.legend__item svg.legend__item-swatch.color-index-grey-5{stroke:#333} +.legend__item svg.legend__item-swatch.color-index-grey-2,.legend__item svg.legend__item-swatch.color-index-grey-6{stroke:#3B3B3B} +.legend__item svg.legend__item-swatch.color-index-grey-3,.legend__item svg.legend__item-swatch.color-index-grey-7{stroke:#434343} +.legend__item svg.legend__item-swatch.color-index-grey-4,.legend__item svg.legend__item-swatch.color-index-grey-8{stroke:#666} +.legend__item svg.legend__item-swatch path{stroke-width:12px;transition-property:stroke-width;transition-duration:.3s;transition-timing-function:ease-in-out} +.legend__item--active{color:#333} +.legend__item--active svg.legend__item-swatch path{stroke-width:12px} +.legend__total{margin-left:24px} +.legend__total>*{margin-top:6px;padding-top:6px;border-top:1px dotted #ccc} +.legend--single .legend__item-value{font-size:48px;font-size:3rem;line-height:1;font-weight:700;width:auto} +.legend--single .legend__item-units{font-size:24px;font-size:1.5rem;line-height:inherit;margin-left:6px;color:#777;font-weight:400} +.login{position:absolute;top:0;left:0;right:0;bottom:0;overflow:hidden;z-index:100} +.login__background{position:absolute;max-width:none} +.login__background--portrait{width:auto;height:100%} +.login__background--landscape{height:auto;width:100%} +.login__container{position:relative;width:384px;margin:96px auto;z-index:1;-webkit-animation-name:fadein;-webkit-animation-duration:.5s;animation-name:fadein;animation-duration:.5s} +@media screen and (max-width:44.9375em){.login__container{margin:48px 0;width:100%;border-radius:0} +} +.login__footer{position:absolute;left:0;right:0;bottom:6px;padding:6px 24px;background-color:rgba(255,255,255,.9);text-align:center} +.login-form,.map{position:relative} +.login-form{width:384px;padding:24px 24px 48px;background-color:#fff;text-align:center;z-index:1;-webkit-animation-name:fadein;-webkit-animation-duration:.5s;animation-name:fadein;animation-duration:.5s} +@media screen and (max-width:44.9375em){.login-form{width:100%;border-radius:0} +} +.login-form__secondary-text{color:#777} +.login-form fieldset{text-align:left;border:none;margin-bottom:0} +.login-form fieldset>*{width:100%;display:block} +.login-form__remember-me{display:block;margin-top:24px;text-align:left} +.login-form__submit{margin-top:24px;width:100%} +.login-form__error{margin-bottom:12px;color:#F04953;text-align:left} +.login-form__footer{margin-top:12px;display:flex;justify-content:space-between;line-height:36px} +.map{padding:24px} +.map__canvas{position:absolute;top:0;left:0;z-index:-1;opacity:.1} +.map__canvas--highlight{opacity:1} +.map__categories{margin:0} +.map__category{position:relative;padding-top:24px;margin-bottom:12px;max-width:none} +.map__category-label{position:absolute;top:0;left:0;font-size:14px;font-size:.875rem;line-height:1.71429} +.map__category-items{margin:0;overflow:hidden;text-align:center} +.menu__drop--align-right .menu__control,.meter__label-max{text-align:right} +.map__item{display:inline-block;width:192px;border:1px solid #ccc;margin-right:12px;margin-bottom:12px;background-color:#fff;font-size:16px;font-size:1rem;line-height:1.5} +.map__item>a:hover,.menu--primary>a:not(.button):hover:not(.active){background-color:rgba(0,0,0,.1)} +.menu,.menu__drop{line-height:inherit} +.map__item>a{display:block;padding:6px 12px;transition:background-color .2s} +.map__item>a>*{display:inline-block} +.menu__control--fixed-label .menu__control-icon,.menu__drop .menu__control-drop-icon{display:none} +.map__item .status-icon{margin-right:6px} +.map__item--active{border-color:#000} +.menu{position:relative;font-size:1.1875rem} +.header .menu--controlled{height:100%} +.header .menu__control--fixed-label{font-size:19px} +.menu:focus{outline:0} +.menu:focus:not(.menu--expanded):after{content:'';position:absolute;top:0;left:0;bottom:0;right:0;border:1px solid #2AD2C9;box-shadow:0 0 1px 1px #2AD2C9;pointer-events:none} +.menu>*{flex:0 0 auto} +.menu a:not(.button):hover{color:#000} +.menu a:not(.button).active{color:#017b5f} +.menu__control{cursor:pointer} +.menu__control-drop-icon{width:24px;height:24px;margin-left:12px;stroke:#999} +@media screen and (max-width:44.9375em){.menu__control--labelled .menu__control-drop-icon,.menu__control--labelled .menu__control-label{display:none} +} +@media screen and (min-width:45em){.menu__control--labelled .menu__control-icon{display:none} +.meter--bar .meter__values .meter__bar{transition:stroke-width .2s;-webkit-animation:draw-meter 1.5s linear;animation:draw-meter 1.5s linear} +} +.menu__drop{font-size:16px;font-size:1rem;max-height:100vh} +.menu--controlled.menu--large,.menu__drop--large .menu__control{line-height:96px} +.title,.title img,.title svg{max-height:100%} +.menu__drop .menu__control-label{padding-left:24px} +.menu__drop a{padding:12px 24px;display:block} +.meter__active,.meter__labeled-graphic{white-space:normal} +.menu__drop a:focus,.menu__drop a:hover{background-color:rgba(0,0,0,.1)} +.menu__drop .check-box,.menu__drop .radio-button{margin-top:12px;margin-bottom:12px} +.menu--controlled{display:inline-block;cursor:pointer} +.menu--controlled.menu--small{height:24px} +.menu--labelled{padding-left:24px} +.menu--inline.menu--right>:not(.control-icon):not(.button),.menu--inline.menu--row>:not(.control-icon):not(.button){margin-left:0;margin-right:24px} +.menu--inline.menu--right>:not(.control-icon):not(.button):last-child,.menu--inline.menu--row>:not(.control-icon):not(.button):last-child{margin-right:0} +.menu--inline.menu--left>:not(.control-icon),.menu--inline.menu--row.box--justify-end>:not(.control-icon){margin-left:24px;margin-right:0} +.menu--inline.menu--left>:not(.control-icon):first-child,.menu--inline.menu--row.box--justify-end>:not(.control-icon):first-child{margin-left:0} +.menu--inline.menu.box--direction-column a:not(.button){margin-bottom:6px} +.menu--small{font-size:16px;font-size:1rem;line-height:1.5} +.menu--small .menu__control-drop-icon{margin-left:6px} +.menu--small .menu__control-icon svg{width:18px;height:18px} +.menu--primary>.menu{width:100%} +.menu--primary>a:not(.button){padding:6px 24px;border-right:6px solid transparent;margin-bottom:0;width:100%} +.menu--primary>a:not(.button):hover{text-decoration:none} +.menu--primary>a:not(.button).active{border-color:#01a982} +@media screen and (max-width:44.9375em){.menu--inline.menu.box--direction-row.box--responsive>*{margin-right:0} +.menu--primary.menu--down,.menu--primary.menu--down>*{display:block} +} +.meter,.meter__active-graphic{display:inline-block;position:relative} +.menu--inline.menu.box--direction-column>.menu:not(:first-of-type) h2,.menu--inline.menu.box--direction-column>.menu:not(:first-of-type) h3,.menu__drop.box--direction-column>.menu:not(:first-of-type) h2,.menu__drop.box--direction-column>.menu:not(:first-of-type) h3{margin-top:24px} +.menu--inline.menu>hr,.menu__drop>hr{margin:12px 24px 18px;height:1px;background-color:#ccc;border:none} +.menu--inline.menu.box.box--separator-top,.menu__drop.box.box--separator-top{border-color:transparent} +.notifications__container,.object__attribute--array>.object__attribute-value>ol>li:last-child{border-bottom:1px solid #ccc} +.menu--inline.menu.box.box--separator-top:before,.menu__drop.box.box--separator-top:before{content:'';margin:12px 24px 18px;height:1px;background-color:#ccc} +.menu--inline.menu--small,.menu__drop--small{font-size:1em} +.menu--inline.menu--small .menu__control-label,.menu__drop--small .menu__control-label{padding:12px} +.menu--inline.menu--small .menu__control-icon svg,.menu__drop--small .menu__control-icon svg{width:18px;height:18px} +.menu--inline.menu--small>a,.menu__drop--small>a{padding:6px 12px} +.menu--inline.menu .menu__control-label,.menu__drop .menu__control-label{font-size:19px} +.menu--inline.menu--large>a,.menu__drop--large>a{padding:24px 48px} +@media screen and (max-width:44.9375em){.menu--inline.menu.box--responsive>*,.menu__drop.box--responsive>*{margin-left:0;margin-right:0} +.menu--inline.menu.box--responsive .button,.menu__drop.box--responsive .button{width:100%;margin-bottom:12px} +.menu--inline.menu.box--responsive .menu,.menu__drop.box--responsive .menu{margin-bottom:36px} +.menu__drop{max-width:100%;width:100vw} +.menu__drop .button,.menu__drop a{width:100%} +} +@-webkit-keyframes draw-meter{0%{stroke-dashoffset:192px} +100%{stroke-dashoffset:0} +} +@keyframes draw-meter{0%{stroke-dashoffset:192px} +100%{stroke-dashoffset:0} +} +@-webkit-keyframes draw-arc{0%{stroke-dashoffset:-192px} +100%{stroke-dashoffset:0} +} +@keyframes draw-arc{0%{stroke-dashoffset:-192px} +100%{stroke-dashoffset:0} +} +.meter__threshold{stroke:rgba(51,51,51,.2)} +.meter--bar.meter--vertical,.meter--legend-right{white-space:nowrap} +.meter__active--active{pointer-events:auto;cursor:pointer} +.meter__active-value{font-size:48px;font-size:3rem;line-height:38px;font-weight:700} +.meter__active-units{font-size:24px;font-size:1.5rem;line-height:inherit;margin-left:6px;color:#777;font-weight:400} +.meter__minmax-container{display:block} +.meter__minmax{display:flex;justify-content:space-between;color:#777;font-size:14px;font-size:.875rem;line-height:1.71429} +.meter__label-max,.meter__label-min{flex:0 0 48px} +.meter--legend-right .meter__legend{vertical-align:top;margin-left:24px} +.meter--legend-right:not(.meter--tall-legend) .meter__legend{position:relative;-webkit-transform:translateY(-50%);transform:translateY(-50%)} +.meter--legend-bottom .meter__legend{margin-top:24px;display:block} +.meter:not(.meter--vertical) .meter__minmax-container{width:192px} +.meter:not(.meter--vertical) .meter__minmax{width:100%} +.meter:not(.meter--vertical).meter--small .meter__minmax-container{width:96px} +.meter:not(.meter--vertical).meter--large .meter__minmax-container{width:288px} +.meter--vertical .meter__labeled-graphic{display:inline-block;white-space:nowrap} +.meter--vertical .meter__minmax{flex-direction:column;height:100%} +.meter--vertical .meter__minmax-container{height:192px} +.meter--vertical .meter__label-max,.meter--vertical .meter__label-min{flex:0 0 auto;text-align:left} +.meter--vertical .meter__label-min{order:1} +.meter--vertical .meter__label-max{order:0} +.meter--vertical .meter__active-label{display:block} +.meter--vertical.meter--small .meter__minmax-container{height:96px} +.meter--vertical.meter--large .meter__minmax-container{height:288px} +.meter--small .meter__active-value{font-size:20px;font-size:1.25rem;line-height:1.2} +.meter--small .meter__active-units{font-size:16px;font-size:1rem;line-height:1.5} +.meter--large .meter__active-value{font-size:64px;font-size:4rem;line-height:1.125} +.meter--large .meter__active-units{font-size:48px;font-size:3rem;line-height:1} +.meter.meter--active .meter__values .meter__bar,.meter.meter--active .meter__values .meter__slice{stroke-width:6px} +.meter.meter--active .meter__values .meter__bar--active,.meter.meter--active .meter__values .meter__slice--active{stroke-width:18px} +.meter--bar .meter__bar{stroke-linecap:butt;stroke-dasharray:192px 192px;stroke-dashoffset:0} +.meter--bar .meter__values .meter__bar{stroke-width:18px;cursor:pointer} +.meter--bar .meter__values .meter__bar.color-index-loading{stroke:#ddd;stroke-dasharray:1px 10px;stroke-dashoffset:0} +.meter--bar .meter__values .meter__bar.color-index-unset{stroke:#ddd} +.meter--bar .meter__values .meter__bar.color-index-brand{stroke:#01a982} +.meter--bar .meter__values .meter__bar.color-index-error{stroke:#F04953} +.meter--bar .meter__values .meter__bar.color-index-warning{stroke:#FFD144} +.meter--bar .meter__values .meter__bar.color-index-ok{stroke:#01a982} +.meter--bar .meter__values .meter__bar.color-index-unknown{stroke:#CCC} +.meter--bar .meter__values .meter__bar.color-index-disabled{stroke:#EDEDED} +.meter--bar .meter__values .meter__bar.color-index-graph-1,.meter--bar .meter__values .meter__bar.color-index-graph-5{stroke:#617c91} +.meter--bar .meter__values .meter__bar.color-index-graph-2,.meter--bar .meter__values .meter__bar.color-index-graph-6{stroke:#94aba8} +.meter--bar .meter__values .meter__bar.color-index-graph-3,.meter--bar .meter__values .meter__bar.color-index-graph-7{stroke:#998e88} +.meter--bar .meter__values .meter__bar.color-index-graph-4,.meter--bar .meter__values .meter__bar.color-index-graph-8{stroke:#8c6694} +.meter--bar .meter__values .meter__bar.color-index-grey-1,.meter--bar .meter__values .meter__bar.color-index-grey-5{stroke:#333} +.meter--bar .meter__values .meter__bar.color-index-grey-2,.meter--bar .meter__values .meter__bar.color-index-grey-6{stroke:#3B3B3B} +.meter--bar .meter__values .meter__bar.color-index-grey-3,.meter--bar .meter__values .meter__bar.color-index-grey-7{stroke:#434343} +.meter--bar .meter__values .meter__bar.color-index-grey-4,.meter--bar .meter__values .meter__bar.color-index-grey-8{stroke:#666} +.meter--bar .meter__thresholds .meter__bar{stroke-width:6px} +.meter--bar .meter__thresholds .meter__bar.color-index-unset{stroke:rgba(221,221,221,.5)} +.meter--bar .meter__thresholds .meter__bar.color-index-brand{stroke:rgba(1,169,130,.5)} +.meter--bar .meter__thresholds .meter__bar.color-index-error{stroke:rgba(240,73,83,.5)} +.meter--bar .meter__thresholds .meter__bar.color-index-warning{stroke:rgba(255,209,68,.5)} +.meter--bar .meter__thresholds .meter__bar.color-index-ok{stroke:rgba(1,169,130,.5)} +.meter--bar .meter__thresholds .meter__bar.color-index-unknown{stroke:rgba(204,204,204,.5)} +.meter--bar .meter__thresholds .meter__bar.color-index-disabled{stroke:rgba(237,237,237,.5)} +.meter--bar .meter__thresholds .meter__bar.color-index-graph-1,.meter--bar .meter__thresholds .meter__bar.color-index-graph-5{stroke:rgba(97,124,145,.5)} +.meter--bar .meter__thresholds .meter__bar.color-index-graph-2,.meter--bar .meter__thresholds .meter__bar.color-index-graph-6{stroke:rgba(148,171,168,.5)} +.meter--bar .meter__thresholds .meter__bar.color-index-graph-3,.meter--bar .meter__thresholds .meter__bar.color-index-graph-7{stroke:rgba(153,142,136,.5)} +.meter--bar .meter__thresholds .meter__bar.color-index-graph-4,.meter--bar .meter__thresholds .meter__bar.color-index-graph-8{stroke:rgba(140,102,148,.5)} +.meter--bar .meter__active-label{width:50%;margin:0 auto;font-size:14px;font-size:.875rem;line-height:16px} +.meter--bar:not(.meter--vertical) .meter__labeled-graphic{display:inline-block} +.meter--bar:not(.meter--vertical) .meter__graphic{width:192px;height:24px} +.meter--bar:not(.meter--vertical) .meter__active{display:inline-block;vertical-align:top;margin-left:12px} +.meter--bar:not(.meter--vertical) .meter__active-value{font-size:24px;font-size:1.5rem;line-height:1} +.meter--bar:not(.meter--vertical) .meter__active-units{font-size:20px;font-size:1.25rem;line-height:1.2} +.meter--bar:not(.meter--vertical).meter--legend-right .meter__legend{top:0;-webkit-transform:none;transform:none} +.meter--bar:not(.meter--vertical).meter--small svg.meter__graphic{width:96px} +.meter--bar:not(.meter--vertical).meter--small .meter__active-units,.meter--bar:not(.meter--vertical).meter--small .meter__active-value{font-size:16px;font-size:1rem;line-height:1.5} +.meter--bar:not(.meter--vertical).meter--large svg.meter__graphic{width:288px} +.meter--bar:not(.meter--vertical).meter--large .meter__active{margin-left:16px} +.meter--bar:not(.meter--vertical).meter--large .meter__active-units,.meter--bar:not(.meter--vertical).meter--large .meter__active-value{font-size:26px;font-size:1.625rem;line-height:inherit} +.meter--bar.meter--vertical svg.meter__graphic{width:24px;height:192px} +.meter--bar.meter--vertical .meter__labeled-graphic{display:inline-block} +.meter--bar.meter--vertical .meter__active{position:relative;vertical-align:top;top:96px;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:inline-block;margin-left:12px} +.meter--arc .meter__active-label,.meter--arc svg.meter__graphic,.meter--circle .meter__active-label,.meter--circle svg.meter__graphic,.meter--spiral .meter__active-label,.meter--spiral svg.meter__graphic{display:block} +.meter--bar.meter--vertical .meter__minmax-container{position:absolute;top:0;left:36px} +.meter--bar.meter--vertical.meter--legend-right .meter__legend{top:96px} +.meter--bar.meter--vertical.meter--small svg.meter__graphic{height:96px} +.meter--bar.meter--vertical.meter--small .meter__active,.meter--bar.meter--vertical.meter--small.meter--legend-right .meter__legend{top:48px} +.meter--bar.meter--vertical.meter--large svg.meter__graphic{height:288px} +.meter--bar.meter--vertical.meter--large .meter__active,.meter--bar.meter--vertical.meter--large.meter--legend-right .meter__legend{top:144px} +.meter--arc .meter.series-pre path,.meter--circle .meter.series-pre path,.meter--spiral .meter.series-pre path{stroke-dashoffset:768px} +.meter--arc .meter__slice,.meter--circle .meter__slice,.meter--spiral .meter__slice{stroke-linecap:butt;stroke-dasharray:768px 768px;stroke-dashoffset:0;fill:none;stroke:#b2b2b2} +.meter--arc .meter__slice-indicator,.meter--circle .meter__slice-indicator,.meter--spiral .meter__slice-indicator{stroke-linecap:round;stroke-width:3;stroke:#000} +.meter--arc .meter__values .meter__slice,.meter--circle .meter__values .meter__slice,.meter--spiral .meter__values .meter__slice{stroke-width:18px;cursor:pointer} +.meter--arc .meter__values .meter__slice.color-index-loading,.meter--circle .meter__values .meter__slice.color-index-loading,.meter--spiral .meter__values .meter__slice.color-index-loading{stroke:#ddd;stroke-dasharray:1px 10px;stroke-dashoffset:0} +.meter--arc .meter__values .meter__slice.color-index-unset,.meter--circle .meter__values .meter__slice.color-index-unset,.meter--spiral .meter__values .meter__slice.color-index-unset{stroke:#ddd} +.meter--arc .meter__values .meter__slice.color-index-brand,.meter--circle .meter__values .meter__slice.color-index-brand,.meter--spiral .meter__values .meter__slice.color-index-brand{stroke:#01a982} +.meter--arc .meter__values .meter__slice.color-index-error,.meter--circle .meter__values .meter__slice.color-index-error,.meter--spiral .meter__values .meter__slice.color-index-error{stroke:#F04953} +.meter--arc .meter__values .meter__slice.color-index-warning,.meter--circle .meter__values .meter__slice.color-index-warning,.meter--spiral .meter__values .meter__slice.color-index-warning{stroke:#FFD144} +.meter--arc .meter__values .meter__slice.color-index-ok,.meter--circle .meter__values .meter__slice.color-index-ok,.meter--spiral .meter__values .meter__slice.color-index-ok{stroke:#01a982} +.meter--arc .meter__values .meter__slice.color-index-unknown,.meter--circle .meter__values .meter__slice.color-index-unknown,.meter--spiral .meter__values .meter__slice.color-index-unknown{stroke:#CCC} +.meter--arc .meter__values .meter__slice.color-index-disabled,.meter--circle .meter__values .meter__slice.color-index-disabled,.meter--spiral .meter__values .meter__slice.color-index-disabled{stroke:#EDEDED} +.meter--arc .meter__values .meter__slice.color-index-graph-1,.meter--arc .meter__values .meter__slice.color-index-graph-5,.meter--circle .meter__values .meter__slice.color-index-graph-1,.meter--circle .meter__values .meter__slice.color-index-graph-5,.meter--spiral .meter__values .meter__slice.color-index-graph-1,.meter--spiral .meter__values .meter__slice.color-index-graph-5{stroke:#617c91} +.meter--arc .meter__values .meter__slice.color-index-graph-2,.meter--arc .meter__values .meter__slice.color-index-graph-6,.meter--circle .meter__values .meter__slice.color-index-graph-2,.meter--circle .meter__values .meter__slice.color-index-graph-6,.meter--spiral .meter__values .meter__slice.color-index-graph-2,.meter--spiral .meter__values .meter__slice.color-index-graph-6{stroke:#94aba8} +.meter--arc .meter__values .meter__slice.color-index-graph-3,.meter--arc .meter__values .meter__slice.color-index-graph-7,.meter--circle .meter__values .meter__slice.color-index-graph-3,.meter--circle .meter__values .meter__slice.color-index-graph-7,.meter--spiral .meter__values .meter__slice.color-index-graph-3,.meter--spiral .meter__values .meter__slice.color-index-graph-7{stroke:#998e88} +.meter--arc .meter__values .meter__slice.color-index-graph-4,.meter--arc .meter__values .meter__slice.color-index-graph-8,.meter--circle .meter__values .meter__slice.color-index-graph-4,.meter--circle .meter__values .meter__slice.color-index-graph-8,.meter--spiral .meter__values .meter__slice.color-index-graph-4,.meter--spiral .meter__values .meter__slice.color-index-graph-8{stroke:#8c6694} +.meter--arc .meter__values .meter__slice.color-index-grey-1,.meter--arc .meter__values .meter__slice.color-index-grey-5,.meter--circle .meter__values .meter__slice.color-index-grey-1,.meter--circle .meter__values .meter__slice.color-index-grey-5,.meter--spiral .meter__values .meter__slice.color-index-grey-1,.meter--spiral .meter__values .meter__slice.color-index-grey-5{stroke:#333} +.meter--arc .meter__values .meter__slice.color-index-grey-2,.meter--arc .meter__values .meter__slice.color-index-grey-6,.meter--circle .meter__values .meter__slice.color-index-grey-2,.meter--circle .meter__values .meter__slice.color-index-grey-6,.meter--spiral .meter__values .meter__slice.color-index-grey-2,.meter--spiral .meter__values .meter__slice.color-index-grey-6{stroke:#3B3B3B} +.meter--arc .meter__values .meter__slice.color-index-grey-3,.meter--arc .meter__values .meter__slice.color-index-grey-7,.meter--circle .meter__values .meter__slice.color-index-grey-3,.meter--circle .meter__values .meter__slice.color-index-grey-7,.meter--spiral .meter__values .meter__slice.color-index-grey-3,.meter--spiral .meter__values .meter__slice.color-index-grey-7{stroke:#434343} +.meter--arc .meter__values .meter__slice.color-index-grey-4,.meter--arc .meter__values .meter__slice.color-index-grey-8,.meter--circle .meter__values .meter__slice.color-index-grey-4,.meter--circle .meter__values .meter__slice.color-index-grey-8,.meter--spiral .meter__values .meter__slice.color-index-grey-4,.meter--spiral .meter__values .meter__slice.color-index-grey-8{stroke:#666} +@media screen and (min-width:45em){.meter--arc .meter__values .meter__slice,.meter--circle .meter__values .meter__slice,.meter--spiral .meter__values .meter__slice{transition:stroke-width .2s;-webkit-animation:draw-arc 1.5s linear;animation:draw-arc 1.5s linear} +} +.meter--arc .meter__thresholds .meter__slice,.meter--circle .meter__thresholds .meter__slice,.meter--spiral .meter__thresholds .meter__slice{stroke-width:6px} +.meter--arc .meter__thresholds .meter__slice.color-index-unset,.meter--circle .meter__thresholds .meter__slice.color-index-unset,.meter--spiral .meter__thresholds .meter__slice.color-index-unset{stroke:rgba(221,221,221,.5)} +.meter--arc .meter__thresholds .meter__slice.color-index-brand,.meter--circle .meter__thresholds .meter__slice.color-index-brand,.meter--spiral .meter__thresholds .meter__slice.color-index-brand{stroke:rgba(1,169,130,.5)} +.meter--arc .meter__thresholds .meter__slice.color-index-error,.meter--circle .meter__thresholds .meter__slice.color-index-error,.meter--spiral .meter__thresholds .meter__slice.color-index-error{stroke:rgba(240,73,83,.5)} +.meter--arc .meter__thresholds .meter__slice.color-index-warning,.meter--circle .meter__thresholds .meter__slice.color-index-warning,.meter--spiral .meter__thresholds .meter__slice.color-index-warning{stroke:rgba(255,209,68,.5)} +.meter--arc .meter__thresholds .meter__slice.color-index-ok,.meter--circle .meter__thresholds .meter__slice.color-index-ok,.meter--spiral .meter__thresholds .meter__slice.color-index-ok{stroke:rgba(1,169,130,.5)} +.meter--arc .meter__thresholds .meter__slice.color-index-unknown,.meter--circle .meter__thresholds .meter__slice.color-index-unknown,.meter--spiral .meter__thresholds .meter__slice.color-index-unknown{stroke:rgba(204,204,204,.5)} +.meter--arc .meter__thresholds .meter__slice.color-index-disabled,.meter--circle .meter__thresholds .meter__slice.color-index-disabled,.meter--spiral .meter__thresholds .meter__slice.color-index-disabled{stroke:rgba(237,237,237,.5)} +.meter--arc .meter__thresholds .meter__slice.color-index-graph-1,.meter--arc .meter__thresholds .meter__slice.color-index-graph-5,.meter--circle .meter__thresholds .meter__slice.color-index-graph-1,.meter--circle .meter__thresholds .meter__slice.color-index-graph-5,.meter--spiral .meter__thresholds .meter__slice.color-index-graph-1,.meter--spiral .meter__thresholds .meter__slice.color-index-graph-5{stroke:rgba(97,124,145,.5)} +.meter--arc .meter__thresholds .meter__slice.color-index-graph-2,.meter--arc .meter__thresholds .meter__slice.color-index-graph-6,.meter--circle .meter__thresholds .meter__slice.color-index-graph-2,.meter--circle .meter__thresholds .meter__slice.color-index-graph-6,.meter--spiral .meter__thresholds .meter__slice.color-index-graph-2,.meter--spiral .meter__thresholds .meter__slice.color-index-graph-6{stroke:rgba(148,171,168,.5)} +.meter--arc .meter__thresholds .meter__slice.color-index-graph-3,.meter--arc .meter__thresholds .meter__slice.color-index-graph-7,.meter--circle .meter__thresholds .meter__slice.color-index-graph-3,.meter--circle .meter__thresholds .meter__slice.color-index-graph-7,.meter--spiral .meter__thresholds .meter__slice.color-index-graph-3,.meter--spiral .meter__thresholds .meter__slice.color-index-graph-7{stroke:rgba(153,142,136,.5)} +.meter--arc .meter__thresholds .meter__slice.color-index-graph-4,.meter--arc .meter__thresholds .meter__slice.color-index-graph-8,.meter--circle .meter__thresholds .meter__slice.color-index-graph-4,.meter--circle .meter__thresholds .meter__slice.color-index-graph-8,.meter--spiral .meter__thresholds .meter__slice.color-index-graph-4,.meter--spiral .meter__thresholds .meter__slice.color-index-graph-8{stroke:rgba(140,102,148,.5)} +.meter--arc .meter__threshold,.meter--circle .meter__threshold,.meter--spiral .meter__threshold{stroke-linecap:butt} +@media screen and (max-width:44.9375em){.meter--arc,.meter--circle,.meter--spiral{margin:0 auto} +.meter--arc,.meter--circle{width:192px} +} +.meter--arc .meter__active,.meter--circle .meter__active{white-space:normal;pointer-events:none;text-align:center} +.meter--arc .meter__active--active,.meter--circle .meter__active--active{pointer-events:auto;cursor:pointer} +.meter--arc:not(.meter--vertical) .meter__minmax-container,.meter--circle .meter__minmax-container{width:192px} +.meter--arc:not(.meter--vertical) .meter__active,.meter--circle .meter__active{position:absolute;left:50%} +.meter--arc:not(.meter--vertical).meter--small .meter__minmax-container,.meter--circle.meter--small .meter__minmax-container{width:96px} +.meter--arc:not(.meter--vertical).meter--large .meter__minmax-container,.meter--circle.meter--large .meter__minmax-container{width:288px} +.meter--arc.meter--vertical.meter--legend-right .meter__legend,.meter--circle.meter--legend-right .meter__legend{top:96px} +.meter--arc.meter--vertical.meter--legend-right.meter--small .meter__legend,.meter--circle.meter--legend-right.meter--small .meter__legend{top:48px} +.meter--arc.meter--vertical.meter--legend-right.meter--large .meter__legend,.meter--circle.meter--legend-right.meter--large .meter__legend{top:144px} +.meter--circle svg.meter__graphic{width:192px;height:192px} +.meter--circle .meter__active{top:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);max-width:144px} +.meter--circle.meter--small svg.meter__graphic{width:96px;height:96px} +.meter--circle.meter--small .meter__active{max-width:72px} +.meter--circle.meter--large svg.meter__graphic{width:288px;height:288px} +.meter--circle.meter--large .meter__active{max-width:216px} +.meter--arc:not(.meter--vertical) svg.meter__graphic{width:192px;height:144px} +.meter--arc:not(.meter--vertical) .meter__active{top:101px;-webkit-transform:translateX(-50%);transform:translateX(-50%);max-width:120px} +.meter--arc:not(.meter--vertical).meter--legend-right .meter__legend{top:72px} +.meter--arc:not(.meter--vertical).meter--small svg.meter__graphic{width:96px;height:72px} +.meter--arc:not(.meter--vertical).meter--small .meter__active{top:50px;max-width:60px} +.meter--arc:not(.meter--vertical).meter--large svg.meter__graphic{width:288px;height:216px} +.meter--arc:not(.meter--vertical).meter--large .meter__active{top:108px;max-width:180px} +.meter--arc:not(.meter--vertical).meter--large.meter--single .meter__active{top:151px} +.meter--arc.meter--vertical svg.meter__graphic{display:inline;width:144px;height:192px} +.meter--arc.meter--vertical .meter__active{position:relative;top:96px;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:inline-block;margin-left:-36px;vertical-align:top} +.meter--arc.meter--vertical .meter__minmax-container{display:inline-block;vertical-align:top;margin-left:12px;padding-top:12px;padding-bottom:12px} +.meter--arc.meter--vertical.meter--small svg.meter__graphic{width:72px;height:96px} +.meter--arc.meter--vertical.meter--small .meter__active{top:48px;margin-left:-18px} +.meter--arc.meter--vertical.meter--small .meter__minmax-container{padding-top:0;padding-bottom:0} +.meter--arc.meter--vertical.meter--large svg.meter__graphic{width:216px;height:288px} +.notifications-control__icon,.notifications__icon{width:48px;height:48px;vertical-align:middle} +.meter--arc.meter--vertical.meter--large .meter__active{top:144px;margin-left:-48px} +.meter--arc.meter--vertical.meter--minmax .meter__active{margin-left:-84px} +.meter--arc.meter--vertical.meter--minmax.meter--small .meter__active{margin-left:-60px} +.meter--arc.meter--vertical:not(.meter--single) .meter__active{margin-left:-96px} +.meter--arc.meter--vertical:not(.meter--single).meter--small .meter__active{margin-left:-36px} +.meter--spiral .meter__active{position:absolute;top:0;right:0;white-space:normal;text-align:right} +.radio-button,.search__drop-header{white-space:nowrap} +.meter--spiral .meter__active-value{display:block;font-size:24px;font-size:1.5rem;line-height:1;margin-bottom:6px} +.meter--spiral .meter__active-units{font-size:20px;font-size:1.25rem;line-height:1.2;color:#777;margin-left:.2em} +.meter--spiral .meter__active-label{display:block;font-size:14px;font-size:.875rem;line-height:16px} +.meter--loading .meter__active,.meter--loading .meter__thresholds{display:none} +.notification__status{margin-right:12px} +.notification__message{font-size:16px;font-size:1rem;line-height:1.5;margin-bottom:24px;vertical-align:middle} +.notification__state,.notification__timestamp{color:#777} +.notification--error{background-color:rgba(240,73,83,.15)} +.notification--warning{background-color:rgba(255,209,68,.15)} +.notification--ok{background-color:rgba(1,169,130,.15)} +.notification--unknown{background-color:rgba(204,204,204,.15)} +.notification--disabled{background-color:rgba(237,237,237,.15)} +.notifications{position:fixed;top:0;left:0;right:0;bottom:0;background-color:rgba(128,128,128,.6);z-index:10} +.notifications__container{position:absolute;top:0;right:0;min-width:300px;padding:96px 24px 24px;background-color:#fff;border-left:1px solid #ccc;border-bottom-left-radius:0} +.notifications__icon{position:absolute;top:24px;right:84px} +.object{overflow:auto} +.object__container{padding:24px} +.object ol,.object ul{margin:0} +.object li{width:auto} +.object__attribute{margin-bottom:12px} +.object__attribute-name{display:block;color:#777;font-size:14px;font-size:.875rem;line-height:1.71429} +.object__attribute-value{display:block;font-size:16px;font-size:1rem;line-height:1.5} +.object__attribute-value ol,.object__attribute-value ul{margin-left:24px;padding-top:24px;padding-bottom:24px} +.object__attribute--container>.object__attribute-name{font-weight:700} +.object__attribute--unset .object__attribute-value{font-style:italic;color:#777} +.object__attribute--array>.object__attribute-value>ol>li{border-top:1px solid #ccc} +.object__attribute--array>.object__attribute-value>ol>li>ul{padding-top:0;padding-bottom:0} +.paragraph--small{font-size:14px;font-size:.875rem;line-height:1.71429} +.paragraph--large{font-size:24px;font-size:1.5rem;line-height:28px} +.paragraph--large a{color:#01a982;font-weight:600} +.radio-button{margin-right:24px} +.radio-button:not(.radio-button--disabled){cursor:pointer} +.radio-button:hover:not(.radio-button--disabled) .radio-button__control,.radio-button:hover:not(.radio-button--disabled) .radio-button__input:checked+.radio-button__control{border-color:#000} +.radio-button:hover:not(.radio-button--disabled) .radio-button__label{color:#000} +.radio-button__input{opacity:0;position:absolute} +.radio-button__input:checked+.radio-button__control{border-color:#01a982} +.radio-button__input:checked+.radio-button__control+.radio-button__label{color:#333} +.radio-button__input:checked+.radio-button__control:after{content:"";display:block;position:absolute;top:5px;left:5px;width:10px;height:10px;background-color:#01a982;border-radius:12px} +.radio-button__input:focus+.radio-button__control{content:"";border-color:#2AD2C9;box-shadow:0 0 1px 1px #2AD2C9} +.radio-button__control{position:relative;display:inline-block;width:24px;height:24px;margin-right:12px;vertical-align:middle;background-color:inherit;color:#017b5f;border:2px solid #999;border-radius:24px} +.search-input__suggestion--active,.search-input__suggestion:hover,.search__drop .search__suggestion--active,.search__drop .search__suggestion:hover{background-color:rgba(0,0,0,.1)} +.radio-button__label{color:#777} +.radio-button--disabled .radio-button__control{opacity:.5} +.search{display:inline-block} +.search:focus{outline:0;margin:-1px;border:1px solid #2AD2C9;box-shadow:0 0 1px 1px #2AD2C9} +.search--controlled,.search__control{cursor:pointer} +.search__input{margin-right:0} +.header .search__input{padding:0 12px;font-size:inherit} +.header .search__input:focus{padding:0 11px} +.search__drop{font-size:20px;font-size:1.25rem;line-height:inherit} +.search--large,.search__drop--large{line-height:96px} +@media screen and (max-width:44.9375em){.search__drop{max-width:100%;width:100vw} +} +.search__drop--inline{margin-left:-1px} +.search__drop-contents{display:block} +.search__drop input{margin-right:0;width:100%} +@media screen and (max-width:44.9375em){.search__drop input{width:calc(100vw - 72px)} +.section>img,section>img{max-width:100%} +} +.search__drop .search__control{display:inline-block;vertical-align:top} +.search__drop .search__suggestion{padding:6px 24px;cursor:pointer} +.search--inline .search__input{width:100%;box-sizing:border-box} +.header .search--inline .search__input{padding:0;border:none} +.search-input{position:relative;display:inline-block} +.search-input__input{width:100%;height:100%;display:block;padding-right:60px} +.search-input__input:focus{padding-right:59px} +.search-input__control{position:absolute;bottom:0;right:12px} +.search-input__suggestions{border-top-left-radius:0;border-top-right-radius:0;margin:0;list-style-type:none} +.search-input__suggestion{padding:6px 12px;cursor:pointer} +.search-input--active .search-input__input{border-bottom-left-radius:0;border-bottom-right-radius:0} +section:not(.section){padding-top:24px;padding-bottom:24px} +section:not(.section):first-of-type{margin-top:0;padding-top:0} +.section>img,section>img{margin-top:24px;margin-bottom:24px;display:block;height:auto} +.section>iframe,section>iframe{width:100%;max-width:576px;height:400px} +@media screen and (max-width:44.9375em){.section>iframe,section>iframe{height:250px} +.section>ol,.section>ul,section>ol,section>ul{margin-left:0;margin-bottom:24px} +.section>dl>dd,section>dl>dd{padding-right:24px} +} +.section>dl>dt,section>dl>dt{margin-top:24px;margin-bottom:6px;text-transform:uppercase} +.section>dl>dt code,section>dl>dt code{text-transform:none;white-space:pre-wrap} +.section>dl>dd,section>dl>dd{margin-left:0} +.react-gravatar{width:48px;height:48px;border-radius:24px;border:2px solid transparent;overflow:hidden;cursor:pointer;transition:all .3s ease-in-out} +.table--selectable tbody tr td,.tile--selectable{transition:background-color .2s} +.react-gravatar:hover{border-color:#01a982} +.session{position:fixed;top:0;left:0;right:0;bottom:0;background-color:rgba(128,128,128,.6);z-index:10} +.session__container{position:absolute;top:0;right:0;min-width:300px;padding:96px 24px 24px;background-color:#fff;border-left:1px solid #ccc;border-bottom:1px solid #ccc;border-bottom-left-radius:0} +.session .react-gravatar{position:absolute;top:24px;right:24px} +.settings,.split{position:relative} +.session__actions{margin-top:24px;padding-top:24px;border-top:1px solid #ccc} +.session a{cursor:pointer} +.settings{text-align:center} +.settings__panels{display:inline-block} +.settings__panel{vertical-align:top} +.sidebar{min-height:100vh} +@media screen and (max-width:44.9375em){.sidebar{max-width:100%;width:100vw} +.split--separator>*{border-bottom:1px solid #000} +.split--separator>:last-child{border-bottom:none} +} +.sidebar--fixed{display:flex;flex-direction:column} +.sidebar--fixed>*{flex:1;overflow:auto} +.sidebar--fixed>.footer,.sidebar--fixed>.header{flex:0 0 auto} +.sidebar--primary{background-color:#f5f5f5} +@media screen and (min-width:45em){.sidebar{width:336px} +.sidebar--small{width:240px} +.sidebar--large{width:480px} +} +.split{overflow:visible} +.split:after{position:absolute;left:0;content:' ';display:block;width:45em;height:0;z-index:-10} +.tabs,.tiles{display:flex} +@media screen and (min-width:45em){.split{display:flex} +.split--fixed>*{position:relative;height:100vh;overflow:auto;-ms-overflow-style:-ms-autohiding-scrollbar} +.split--flex-right>:first-child:not(:last-child){flex:0 0 auto} +.split--flex-right>:last-child{flex:1} +.split--flex-left>.object,.split--flex-left>:last-child:not(:first-child){flex:0 0 auto} +.split--flex-both>*,.split--flex-left>:first-child{flex:1} +.split--separator>*{border-right:1px solid #000} +.split--separator>:last-child{border-right:none} +} +.skip-link-anchor{width:0;height:0;overflow:hidden} +.table table,.tiles{width:100%} +.tab{padding:12px} +.tab a:focus .tab__label{border-bottom:4px solid} +.tab__label{cursor:pointer;padding-bottom:12px;font-weight:600;color:#777} +.tab--active .tab__label{color:#000;border-bottom:4px solid #000} +.tab:focus .tab__label,.tab:hover .tab__label{border-bottom:4px solid} +.table th,.tabs{border-bottom:1px solid #ccc} +.tabs{margin:0;padding:0;flex-wrap:wrap;justify-content:center;align-items:center;list-style:none} +.tabs__content{padding:24px} +@media screen and (max-width:44.9375em){.tabs__content{padding:24px 0} +} +.table td,.table th{padding:11px 12px;vertical-align:top;text-align:left} +.table__more,.tbd,.tile.box--align-center{text-align:center} +.table td:first-child,.table th:first-child{padding-left:24px} +.table td:last-child,.table th:last-child{padding-right:24px} +.table th{font-weight:100;font-size:20px;font-size:1.25rem;line-height:1.2} +.table__mirror{position:absolute;top:0;left:0;right:0} +.table__mirror>thead{position:fixed;background-color:rgba(255,255,255,.9)} +@media screen and (max-width:44.9375em){.table__mirror>thead{position:static} +} +.table__more{margin-top:24px;margin-bottom:24px} +.table--selectable tbody tr{cursor:pointer} +.table--selectable tbody tr.table__row--selected td{background-color:#d0f3eb;color:#333} +.table--selectable tbody tr:hover:not(.table__row--selected) td{background-color:rgba(0,0,0,.1);color:#000} +.tbd{padding:96px;font-size:96px;font-size:6rem;line-height:1;background-color:#ccc;color:#fff} +.tiles{padding:12px;flex-wrap:wrap;justify-content:flex-start} +.tiles>.tile{flex:0 0 192px;margin:12px} +.tiles>.tile--wide{flex-basis:calc(100% - 24px)} +.tiles__container{display:flex;flex-direction:row;align-items:center;width:100vw;max-width:100%} +.tiles__container .tiles__left,.tiles__container .tiles__right{flex:0 0 auto} +.tiles__container .tiles{flex:1;margin:0} +.tiles__container .tiles--direction-row{width:100%;overflow-x:hidden;overflow-y:visible} +.tile,.title,.topology__part{overflow:hidden} +.tiles--fill{justify-content:space-around} +.tiles--fill>.tile{flex-grow:1} +.tiles--flush{padding:0} +.tiles--flush>.tile{margin:0} +.tiles--flush>.tile--wide{flex-basis:100%} +.tiles--direction-row{flex-direction:row;flex-wrap:nowrap;justify-content:flex-start} +.tiles--direction-column{flex-direction:column;flex-wrap:nowrap;justify-content:flex-start} +.tiles--moreable{position:relative;padding-bottom:48px} +.tiles--moreable .tiles__more{position:absolute;bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)} +.tiles--small>.tile{flex-basis:96px} +.tile .status-icon{margin-right:6px} +.title img:not(:last-child),.title svg:not(:last-child),.title>:not(:last-child){margin-right:12px} +.tile>.chart{width:100%} +.tile--selectable{cursor:pointer} +.tile--selectable.tile--selected{background-color:#d0f3eb} +.tile--selectable:hover:not(.tile--selected){background-color:rgba(0,0,0,.1)} +.tile--eclipsed{opacity:.2} +.title{text-overflow:ellipsis;font-weight:400;white-space:nowrap;font-size:24px;font-size:1.5rem;line-height:inherit} +.title a{color:inherit} +[class*=background-color-index-] .title a:hover{text-decoration:underline} +.title--interactive{cursor:pointer} +@media screen and (min-width:45em){.tiles--large>.tile{flex-basis:384px} +.title{font-weight:600} +.title--interactive{transition:color .3s ease-in-out} +} +.title--interactive:hover{color:#01a982;cursor:pointer} +[class*=background-color-index-]:not([class*=background-color-index-light]) .title--interactive:hover{color:#fff} +.topology{position:relative} +@media screen and (max-width:44.9375em){.tiles--large>.tile{flex-basis:100%} +.title--responsive img,.title--responsive svg{margin-right:0} +.title--responsive>:not(:first-child){display:none} +.topology__contents>.topology__parts{flex-direction:column} +.topology__contents>.topology__parts--direction-row>.topology__part{margin-bottom:48px} +.topology__contents>.topology__parts--direction-row>.topology__part:last-child{margin-bottom:0} +} +@media screen and (min-width:45em){.topology__contents>.topology__parts--direction-row>.topology__part{margin-right:48px} +.topology__contents>.topology__parts--direction-row>.topology__part:last-child{margin-right:0} +} +.topology__contents>.topology__parts--direction-column>.topology__part{margin-bottom:48px} +.topology__contents>.topology__parts--direction-column>.topology__part:last-child{margin-bottom:0} +.topology__part--direction-column>:not(.topology__parts):not(.topology__part),.topology__part--direction-row>:not(.topology__parts):not(.topology__part){margin:6px} +.topology__canvas{position:absolute;pointer-events:none} +.topology__parts{display:flex;align-items:stretch} +.topology__parts--direction-row{flex-direction:row;flex-grow:1} +.topology__parts--direction-column{flex-direction:column;flex-grow:1} +.topology__parts--align-start{align-items:flex-start} +.topology__parts--align-center{align-items:center} +.topology__parts--align-end{align-items:flex-end} +.topology__parts--align-stretch{align-items:stretch} +.topology__part{display:flex;justify-content:center;align-items:stretch} +.topology__part>.topology__parts .topology__part{flex:1} +.topology__part--demarcate{border:1px solid #ccc} +.topology__part--demarcate.topology__part--empty{background-color:#f5f5f5;min-width:24px;min-height:24px} +.topology__part--justify-start{justify-content:flex-start} +.topology__part--justify-center{justify-content:center} +.topology__part--justify-between{justify-content:space-between} +.topology__part--justify-end{justify-content:flex-end} +.topology__part--align-start{align-items:flex-start} +.topology__part--align-center{align-items:center} +.topology__part--align-end{align-items:flex-end} +.topology__part--align-stretch{align-items:stretch} +.topology__part--direction-row{flex-direction:row} +.topology__part--direction-row.topology__part--reverse{flex-direction:row-reverse} +.topology__part--direction-column{flex-direction:column} +.topology__part--direction-column.topology__part--reverse{flex-direction:column-reverse} +.topology__label{font-size:14px;margin-left:12px;margin-right:12px} +.topology .status-icon{position:relative;z-index:1} +.clearfix:after{content:"";display:table;clear:both} +.button:not(.button--disabled).button--primary:hover,.button:not(.button--disabled):hover{box-shadow:0 0 0 2px #01a982} +.button:not(.button--disabled).button--secondary:hover{box-shadow:0 0 0 2px rgba(51,51,51,.6)} +.button:not(.button--disabled).button--accent:hover{box-shadow:0 0 0 2px #ff8d6d} +[class*=background-color-index-] .button:not(.button--disabled):hover{box-shadow:0 0 0 2px #eee} +[class*=background-color-index-] .button:not(.button--disabled).button--primary:hover{box-shadow:0 0 0 2px #01a982} +[class*=background-color-index-] .button:not(.button--disabled).button--secondary:hover{box-shadow:0 0 0 2px #eee} +[class*=background-color-index-] .button:not(.button--disabled).button--accent:hover{box-shadow:0 0 0 2px #ff8d6d} +.status-icon-critical .status-icon__base,.status-icon-error .status-icon__base{fill:#f04953} +.control-icon{transition:all .3s ease-in-out} +body,html{font-size:13px;line-height:100%} +select{background:0 0;width:auto} +input:focus,select:focus,textarea:focus{padding:0;outline:0} +input[type=checkbox]:focus,input[type=radio]:focus{padding:0;outline:0} +b{font-weight:600} +.status-html{float:none;padding:0;display:inline-block;min-width:17px;width:auto} +.status-html img{vertical-align:top;margin-top:1px} +.status-html span{background:0 0;width:auto} +.object__attribute-name{line-height:1.5;font-weight:300;font-size:.95em;color:#111} +h3{margin-bottom:.5rem} +html{overflow:hidden} +body{background-color:#fff;line-height:normal;min-height:100%;overflow:auto} +#appBody,.app-container{background-color:#eee} +#login-logo img{display:inline} +.h1,.login-banner-title h1,h1{font-size:48px;font-size:3rem;line-height:1.5em;font-weight:800} +.h2,.h3,.login-banner-title h2,h2,h3{font-size:36px;font-size:2.25rem;line-height:1.33em} +.h2,h2{font-size:1.6rem;font-weight:400} +.h3,.h4,.h5,h3,h4,h5{font-weight:100} +.h3,h3{font-size:1.8rem} +.h4,h4{font-size:24px;font-size:1.25rem;line-height:1} +h3 span,h4 span{color:#000;font-size:inherit;font-weight:inherit} +.h5,h5{font-size:20px;font-size:1.05rem;line-height:1.2} +.button,button:not(.button),input[type=button],input[type=submit]{font-weight:400;font-size:1.25rem;line-height:1.2} +a.button.primary,button.primary,input[type=button].primary,input[type=submit].primary{background-color:#00B388;border-color:#00B388;color:#fff} +a.button.primary:hover,button.primary:hover,input[type=button].primary:hover,input[type=submit].primary:hover{background-color:#00B388;border-color:#00B388} +.login-body{background-repeat:no-repeat;background-image:url(../../images/login_image_web.jpg);background-size:cover} +#titleHeading{font-weight:700} +.justBold{font-weight:700} +#fwver_span{display:inline} +.login-banner-right{border-left:transparent;background:0 0} +.login-banner-left{background-color:transparent} +.login-middle{border-top:transparent} +#td-loginSecurityBanner{padding:20px} +#loginSecurityBanner{display:block;background-color:#60798D;opacity:.95;padding:10px;position:absolute;top:280px;width:67vw} +#loginSecurityBannerHeader{color:#fff;font-weight:700;border-bottom:0} +#securityMessage,.securityMessage{width:869px;color:#fff;overflow:auto;width:100%;min-height:50px;max-height:28vh} +#login_box{background-color:#fff;position:fixed;right:0;top:0;bottom:0;width:30%;vertical-align:middle;padding:40px;padding-top:100px;min-width:100px;overflow:auto;z-index:2} +#ID_SECJMP{display:none;margin-bottom:10px} +#login_box_msgs div,#messageSection div{margin-bottom:10px} +#login_box_msgs .statusDisplay,#messageSection .statusDisplay{display:none} +#login_box_msgs td.msgText p,#messageSection td.msgText p{margin:14px;color:#363636} +#login_box_msgs,#messageSection{height:auto;padding-bottom:35px} +#login_box .ui-state-warning.ui-corner-all{border-radius:0;border-color:#ffd144;background-color:#ffd144} +#login_box .ui-state-error.ui-corner-all{border-radius:0;border-color:#F04953;background-color:#F04953} +#ID_LOGON{width:100%;margin:0;border:0;padding:12px 0} +#ID_SPNEGO{width:100%;margin:0;margin-top:20px;border:0 none;padding:12px 0} +#login-footer{color:#fff;bottom:0;position:absolute;width:100%;display:block} +.login-logo img{width:290px;padding-top:70px;padding-left:50px} +#login_fields_table{width:100%} +#login_fields_table tr{display:block} +#login_fields_table tr td{display:block;height:auto;text-align:left;width:auto;margin-bottom:1px} +#login_fields_table tr td input{width:100%;padding:12px 23px} +#messageSection{padding-top:10px} +#login_help_div{width:initial;margin-right:initial;vertical-align:top;position:absolute;z-index:1000;top:0;right:0} +#login-copyright{display:inline-block;float:right;padding-right:2px;position:absolute;bottom:18px;right:0;z-index:1000;background-color:#fff;background:rgba(255,255,255,.6);font-size:smaller} +#osl a{text-decoration:none} +.login-banner-title{text-align:left;padding-left:60px;display:block;position:absolute;top:65px} +div.login-logo{position:absolute;bottom:54px} +#td_masthd_buttons,#td_masthd_buttons button{line-height:normal;white-space:nowrap;color:rgba(255,255,255,.7);text-transform:uppercase;text-decoration:initial;background-color:transparent;border:0;font-size:.96rem;font-weight:700;vertical-align:top;padding-top:6px;padding-right:12px} +#td_masthd_buttons button{padding-top:0;min-width:0} +#hostname_cell{vertical-align:top;padding-top:4px} +#footpanel,.ui-tabs .ui-tabs-nav{background-image:none;background-color:rgba(66,85,99,.9);border-top:#556672 solid 1px} +.ui-tabs .ui-tabs-nav .ui-state-default{background-color:transparent;background-image:none;margin:0;border-radius:0;color:#999;z-index:1;border:0} +.ui-tabs .ui-tabs-nav li a{margin:0;color:#ccc;color:rgba(200,200,200,.9);padding:3px 10px 4px 10px} +.ui-tabs .ui-tabs-nav .ui-state-active{background-color:transparent;background-image:none;margin:0;border-radius:0;color:#fff;border:0} +.ui-tabs .ui-tabs-nav li.ui-state-active a{border:0;margin:0;color:#fff;padding-top:3px} +.ui-tabs .ui-tabs-nav li a:hover{border:0;margin:0;color:#ddd;padding-top:3px} +.ui-tabs .ui-tabs-panel{border:0;top:0} +#tabs{top:36px;padding-top:0} +.content-title span{font-size:inherit;font-weight:inherit;color:#fff} +#contentTitleSpan{font-size:24px;font-size:1.5rem;font-stretch:normal;font-style:normal;font-variant:normal;font-variant-ligatures:normal;font-weight:100;color:#fff} +div.masthead_logo{height:46px} +#masthd_buttons_spaces{color:rgba(255,255,255,.3)} +#logout_button{margin:0;padding:0;padding-left:4px} +#help_button{margin-top:0;margin-right:0;max-height:36px;max-width:36px;height:36px;width:36px;border-radius:0;box-shadow:none;background-color:transparent} +#healthSummaryTable{font-size:1em} +.ui-state-error,.ui-state-highlight,.ui-state-normal,.ui-state-warning{border-radius:0} +.ui-state-highlight .hpButton{margin-right:5px;margin-bottom:5px} +.log_table_severity{min-width:70px;max-width:70px;width:70px} +.log_table_class,.log_table_date{min-width:130px;max-width:130px;width:130px} +#log_table td{vertical-align:top} +#log_table,#log_table.iml{min-width:1200px;max-width:2000px} +#staticSetTable select,.captionRow input,.hasDatepicker{width:auto} +#boot_order{background:0 0} +.log-body{overflow-y:hidden} +.log-filters select{margin-left:5px} +.log-filters select:first-child{margin-left:0} +.log-filters input{height:32px;margin:0;line-height:1;vertical-align:text-bottom;padding-top:0;padding-bottom:0} +.filter-reset,.filter-select{padding:0 34px 0 10px;vertical-align:text-bottom;line-height:1;height:32px;margin:0 5px 5px 5px} +select:focus.filter-select{height:32px;padding:0 34px 0 10px} +input,select,textarea{font-size:16px;font-size:1rem;line-height:1.5;padding:6px 23px;border-radius:0;outline:0;margin-right:12px} +input::-moz-focus-inner,select::-moz-focus-inner,textarea::-moz-focus-inner{border:none;outline:0} +.filter-search-combo{margin-left:5px;margin-right:5px;height:50px} +#log_keyword_search{width:250px} +#log_table_div{background-color:#fff} +input[type=text].search-input{margin-bottom:5px;border-width:2px} +input[type=text].search-input.ie8{height:32px} +.search-input-help{font-size:.9rem;padding-top:0} +.search-control{top:9px} +.search-clear{top:10px} +a.filter-reset{line-height:2;text-decoration:underline} +#GeneralSummary{margin-bottom:1rem} +button:hover:not(.disabled){border-color:#01906e;color:#01906e} +button:active:not(.disabled){border-color:#01765b;color:#01765b} +button:focus:not(.disabled){border-color:#2AD2C9;box-shadow:0 0 1px 1px #2AD2C9} +button.primary{border-color:#00B388;background-color:#00B388;color:#fff} +button.primary:hover:not(.disabled){border-color:#009a75;background-color:#009a75;color:#fff} +button.primary:active:not(.disabled){border-color:#008061;background-color:#008061;color:#fff} +button.accent{border-color:#ff8d6d;background-color:#ff8d6d;color:#333} +button.accent:hover:not(.disabled){border-color:#ff7954;background-color:#ff7954;color:#333} +button.accent:active:not(.disabled){border-color:#ff653a;background-color:#ff653a;color:#333} +[class*=background-color-index-] .button{background-color:transparent;border-color:#eee;color:#eee} +[class*=background-color-index-] .button:hover{border-color:#fff;color:#fff} +[class*=background-color-index-] .button.primary{background-color:rgba(255,255,255,.8);border-color:transparent} +[class*=background-color-index-] .button.primary:hover{background-color:#fff;border-color:transparent} +[class*=background-color-index-] .button.accent{background-color:rgba(0,0,0,.2);border-color:transparent} +[class*=background-color-index-] .button.accent:hover{background-color:rgba(0,0,0,.3);border-color:transparent} +button.large{font-size:24px;font-size:1.5rem;line-height:24px;padding:16px 70px} +.button--disabled,button.disabled,button[disabled]{opacity:.3;cursor:default} +#CSRTextArea{width:100%;font-size:small} +.ui-dialog .ui-dialog-content{width:100%} +.ui-dialog .ui-dialog-content p{width:100%} +.ui-dialog-title{font-weight:400;font-size:1.25em} +table.plain_data{border:0;margin-bottom:0;font-size:1em} +table.plain_data td:first-child{padding-right:10px} +select,select.medium,select.wide{border-color:#ccc;height:auto;border-width:2px;padding:0;padding-right:0} +select:focus,select:focus.medium,select:focus.wide{border-width:2px;border-color:#2AD2C9;padding:0;height:auto} +select,select.medium,select.wide{height:auto;padding:5px 0 5px 0;border-width:2px} +select:focus.medium,select:focus.wide{padding:5px 0 5px 0;border-width:2px;border-color:#2AD2C9;height:auto} +td.msgText p{max-width:none} +td.msgText a{color:#039} +td.msgText h1{font-size:1.2rem} +.ui-widget-header{height:auto;background:rgba(66,85,99,.9);border:initial;font-family:Arial,sans-serif;font-size:1em;font-weight:400;color:#fff} +.ui-datepicker-header{background-color:#ededed;background-image:none;border-bottom:0;color:#222;height:auto} +.ui-datepicker-title{height:2em} +.ui-datepicker .ui-datepicker-next span,.ui-datepicker .ui-datepicker-prev span{margin-top:-5px} +.ui-datepicker a.ui-state-active{border:2px solid #01A982} +.ui-datepicker td{padding:2px} +.ui-datepicker td.ui-datepicker-current-day,.ui-datepicker td.ui-datepicker-today{padding:1px} +.ui-datepicker a.ui-state-default{color:#363636} +div.ui-datepicker,div.ui-datepicker-inline,div.ui-dialog{border-color:rgba(66,85,99,.9)} +.ui-dialog-titlebar{border-bottom-width:0} +select.ui-datepicker-month,select.ui-datepicker-month:focus{background-color:#fff;padding:5px 34px 5px 10px;margin:0;height:2em;line-height:normal} +.ui-datepicker-group.ui-datepicker-group-first{border-right:solid 1px #ccc} +input[type=text].date_range{font-size:1em} +table.date_range{margin-bottom:0} +td.date_range{padding-top:0;padding-bottom:5px} +td.date_range.buttons{padding-top:15px} +#csv_title{font-weight:400} +#csv_content{font-size:.8em} +#csv_buttons{float:right;padding-right:10px;padding-bottom:10px} +.csv_p{max-width:inherit;text-align:left;margin-top:0;margin-bottom:10px} +.fedLicense{margin-left:0;margin-right:150px;clear:both} +#groupSelection{float:right;max-width:15%;text-align:right;margin-right:12px} +#groupSelection h4{font-weight:400;font-size:18px;font-size:1.125rem;margin-bottom:5px;margin-right:12px;text-align:left} +p{max-width:inherit} +.bWrapperUp{margin:1px} +#testform .bWrapperUp button{width:100%} +#footpanel #powerstatus1{width:auto} +#footpanel li#uidpanel{padding-right:18px} +#footpanel #powerstatus1,#footpanel #uidstatus{font-size:14px;font-size:.925rem;white-space:nowrap;position:static;vertical-align:middle;padding-right:8px;font-weight:700} +@media screen and (min-width:0\0){#footpanel #powerstatus1,#footpanel #uidstatus{vertical-align:middle} +#footpanel #langlink{bottom:1px} +} +#footpanel #langtext{text-transform:uppercase;font-size:14px;top:4px;white-space:nowrap;vertical-align:text-top;padding-right:8px;left:32px;display:inline-block;padding-left:16px;color:#ccc} +#footpanel #langtext:before{content:"\0028"} +#footpanel #langtext:after{content:"\0029"} +#footpanel .subpanel{background:0 0;background-color:#f5f5f5} +#footpanel .subpanel li,#footpanel .subpanel ul,#langpanel .subpanel li a,#powerpanel .subpanel li a{background:0 0;color:#333} +#footpanel h3{background:0 0;background-color:rgba(66,85,99,.9);color:#fff;font-family:Arial,sans-serif;font-size:14pt;font-size:1rem;font-weight:700;margin-bottom:0} +#footpanel #alert_image{margin-top:-1px} +#langpanel .subpanel li span,#powerpanel .subpanel li span{font-size:1.125em;color:#333;background:0 0} +#langpanel .subpanel li a{display:inline-block;white-space:nowrap;width:100%;height:auto;background:0 0;color:#333} +#langpanel .subpanel li a img.langcheck{display:inline-block;width:15px;vertical-align:middle;padding-top:6px} +#langpanel .subpanel li span.langicon{display:inline-block;height:auto;width:auto;padding:4px;margin-bottom:5px} +html #footpanel ul li a.active{background-color:#fff} +#langpanel .subpanel li span.trans_name{display:inline-block;font-size:15px;padding-left:0;color:#333} +#footpanel #langicon{left:0;top:0;padding-left:24px;background:0 0;position:relative;display:inline-block;color:inherit} +#footpanel #langlink{border:0;bottom:2px} +#footpanel li#langpanel{background-image:url(../../images/language.svg);background-repeat:no-repeat;background-position:-6px -6px;background-size:35px} +@media screen and (min-width:0\0){#footpanel li#langpanel{background-position:-6px -6px;background-size:210px;background-position-x:-96px} +} +#alertpanel .subpanel table tr:hover,#langpanel .langselect:hover,#powerpanel .subpanel li a:hover{background-color:rgba(0,0,0,.1);color:#333} +#alertpanel .subpanel table{background:0 0} +#alertpanel .subpanel table :hover{background:0 0;color:#333} +#alertpanel .subpanel table tr{background:0 0;color:#333;font-size:1.5em} +span.langicon{display:block;width:25px;font-size:18px;padding:2px} +#footpanel a,#footpanel a.power,#footpanel a.uid{width:auto} +#bodyContent,.bodyContent{width:99%!important} +#navigation-frame-body,#navigation-frame-body #bodyContent{background-color:none;background-image:linear-gradient(to left,#e4e4e4,#fcfcfc 10px);width:100%!important;top:0} +#navigation-frame-body,#navigation-frame-body #bodyContent{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr=#fcfcfc, endColorstr=#e4e4e4)} +#navTreeHeader{background-color:rgba(66,85,99,.9);margin:0;height:36px} +#tree-control-all{padding-top:17px;padding-left:12px} +.navigation-tree.tree-expanded li a.tree-control{background-image:url(../../images/arrow_rt.png);color:transparent;background-position:4px 0;background-repeat:no-repeat;background-size:5px 10px;margin-left:10px;background-color:transparent} +.navigation-tree.tree-expanded li a.tree-control.a-expanded{background-image:url(../../images/arrow_dn.png);color:transparent;background-position:0 5px;background-repeat:no-repeat;background-size:9px 5px} +.navigation-tree li .subtree li{border-width:1px 0 0 0;border-color:#dadede;border-style:solid;padding-left:30px;color:gray} +.subtree a,.subtree a:visited{color:gray} +.subtree a.ldrives_expand_collapse{font-family:Arial,sans-serif,Verdana,Helvetica,LuzSans Book,HPFutura Book,Futura Bk;color:#000;font-weight:500;vertical-align:text-top;font-size:1rem} +.navigation-tree li .subtree li.selected-leaf{color:#eee;background-color:#00b388} +.navigation-tree li .subtree li:hover:not(.selected-leaf),.navigation-tree>li:hover:not(.li-expanded){background-color:rgba(0,0,0,.1)} +.navigation-tree li .subtree li:hover:not(.selected-leaf) a{color:#000} +.subtree .selected-leaf a{color:#eee} +.navigation-tree li .subtree{border-width:0 0 1px 0;border-color:#dadede;border-style:solid;padding-top:.3em;padding-left:0;margin:0} +#navigation_tree{border-width:1px 1px 0 1px;border-color:#dadede;border-style:solid} +.navigation-tree .subtree-label-1{font-weight:500} +.navigation-tree li{padding:.6em 0 .6em 0;border-width:0 0 1px 0;border-color:#dadede;border-style:solid} +#navigationContent{margin:0} +.navigation-tree li.li-expanded{padding-bottom:0;border-bottom-width:0} +#controllersView .navigation-tree li .subtree li:hover:not(.selected-leaf){background-color:transparent} +#controllersView .navigation-tree .subtree,#controllersView .navigation-tree .subtree li,#controllersView .navigation-tree li{border:0;padding:5px 0 5px 15px;color:#000} +table.key-value-table td:last-child{padding-left:10px;color:#000} +#controllersView table{margin:0} +#access_settings_notes,#access_settings_notes table,#access_settings_notes td{padding:0;margin:0;font-size:small} +#access_settings_notes p{padding:0;margin:4px;color:#888} +.bound_checkbox{border:1px solid #ccc;padding:10px 24px} +.bound_checkbox:hover{color:#000;cursor:pointer} +.bound_checkbox:hover:not(.disabled) label,.bound_checkbox:hover:not(.disabled) span{color:#000;cursor:pointer} +#serviceBox{float:left;margin-top:10px;margin-right:3%;width:auto;min-width:300px} +#accessBox input[type=text],#accessBox select,#serviceBox input[type=text],#serviceBox select,.grommet_table input[type=text],.grommet_table select{min-width:88px;min-height:16px;width:99%;padding:6px 23px;height:38px;border-width:1px;color:#333} +#accessBox tbody tr td:first-child,#serviceBox tbody tr td:first-child,.grommet_table tbody tr td:first-child{padding-right:10px;display:block;color:#777;font-size:14px;font-size:.875rem;display:table-cell;vertical-align:middle} +.ui-corner-all{border-radius:1px} +.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{background-image:none;background-color:#fff} +#add_note_p{font-style:italic;margin-top:0;margin-bottom:10px} +#add_note_buttons{float:right} +.ip-content input[type=text],.ip-font,input[type=text].ip-font,table.data_table td.ip-font{font-family:Arial,sans-serif,Verdana,Helvetica;font-size:inherit} +.iframe-content>html,iframe#frameContent>html,iframe>html{height:initial;overflow:auto} +.iframe-content{margin-right:0;padding-right:7px;padding-left:7px;overflow:hidden} +#sensorData h3{margin-bottom:0} +#sensorData button{font-size:1rem} +#powerSummaryTable tr th{white-space:nowrap} +#mem_info_table td{white-space:nowrap} +#mem_info_table tr:nth-child(odd) td{font-weight:500;color:#777} +#mem_info_table tr:nth-child(even) td{padding-left:0;width:100%;padding-bottom:20px} +#title_intDriveArrays{margin-bottom:0} +#software_select_table input{margin:0;vertical-align:top;margin-top:3px} +.powerButtons{float:left;min-width:500px} +.log-buttons-div{margin-bottom:10px} +.log-buttons-div button.hpButton{margin-right:2px;font-size:1rem} +#selfTestResultsTitle{margin-bottom:15px} +#flashTray,#flashTray2{color:#000;background-color:#fff} +#flashspan{font-size:14px;padding-top:3px} +#progressbartray{border:0} +.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%;background-image:none;background:#00b388} +table.eskmTable{border-spacing:5px;border-collapse:separate} +.eskmTable button,.eskmTable input[type=text],.eskmTable input[type=password]{width:100%;margin-right:0} +table.key-value-table.eskmTable td.data_subject{font-weight:700;padding-left:0} +#bb_policy_note2,#download_estimate{margin-bottom:5px} +#hkTable td,#hkTable th{padding:1px} +#rc_hk_text,#rc_lock_text{margin-top:0;padding-left:0} +#rc_lock_table th{padding-bottom:2px} +.alt_br{display:none} +.spacer{margin-bottom:10px} +.no_overflow{overflow:hidden} +.hp-uid-big.hp-status-changing,.hp-uid.hp-status-changing{background-image:url(../../images/hpe-icons.png);background-repeat:no-repeat;background-position:-320px -100px;height:14px;width:14px;-webkit-animation:spin 3s infinite forwards linear;-moz-animation:spin 3s infinite forwards linear;-ms-animation:spin 3s infinite forwards linear;-o-animation:spin 3s infinite forwards linear;animation:spin 3s infinite forwards linear} +.hp-uid-big.hp-status-changing:after{background-image:none;content:""} +div.hp-device div.hp-uid-big{margin-left:-3px;margin-top:-3px;vertical-align:baseline} +div.hp-flyout-device-summary div.hp-uid{margin-right:4px} +.control-icon{transition:all .3s ease-in-out;vertical-align:middle;max-width:24px;max-height:24px} +.hasmenu.ui-widget-content{background:0 0!important;background-color:transparent!important;color:#000;border:none} +.hasmenu li,.hasmenu ul{border:0;padding:0} +.hasmenu .ui-state-active,.hasmenu .ui-widget-content .ui-state-active{border:none;background:0 0!important;background-color:#eee!important;color:#000;margin:0} +.hasmenu li{background-color:#999} +.hasmenu li.ui-menu-divider{background-color:#ddd;margin:0;padding:1px 0} +.hasmenu .ui-menu-item-wrapper,.hasmenu li div{padding:12px 24px;white-space:nowrap;display:block;cursor:pointer} +.hasmenu li.key-container div{padding:4px 24px} +.hasmenu li.key-container:first-child div{padding-top:12px} +.hasmenu li.key-container:last-child div{padding-bottom:12px} +.hasmenu.ui-menu .ui-menu-item{list-style-image:none;padding:0;border:0;background:0 0!important;background-color:#ddd!important;color:inherit;font-weight:400} +.hasmenu.ui-widget.ui-widget-content{border:0} +.hasmenu .ui-widget.ui-widget-content{border:0} +.hasmenu .ui-widget-header{font-weight:100;max-width:100%;font-size:1.33em;line-height:1.333} +.ui-menu-item-wrapper{font-size:14px} +button.ui-button.ui-dialog-titlebar-close,button.ui-button.ui-dialog-titlebar-close:focus{border:none!important;box-shadow:none!important;padding:0!important} +button.ui-button.ui-dialog-titlebar-close svg{width:14px;margin:0} +button.ui-button.ui-dialog-titlebar-close path{stroke-width:4px} +@media screen{@media (min-width:0px){select,select.medium,select.wide{padding-right:24px;-webkit-appearance:none;-moz-appearance:none;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAAAXNSR0IArs4c6QAAARpJREFUKBVjnDlzJuu/f//cGagAmJiYTjCCzAEaWg+kGkBsCsCG58+fB4MNBBkyY8aMeYyMjIlkGnjy69evjkVFRd+ZYAa8ePEiDcjeBeOTQN/9+fOnL8gwkB64C0Gczs5OXn5+/sNAl+qD+ESAN////7fKyMi4DVOLYiBIcPLkyVKsrKwngIbKwhRho4EGgVzkDDTsOLI83Mswwdzc3GdAxV5A/keYGDoNlP8HFItBNwykDsNAkGBmZuYVIBUIxL9AfCygCGjYOizi2A0EKUxPT98PdEkyFk39QMMmYhEHC2F1IUwxUOMSILsaxgdasAaY1kpgfGw0RqRgUwRMozOB4trApOXS0NDwA5saksRCQ0OZ+/v7BYjRBACZeF+tn9zqUwAAAABJRU5ErkJggg==) center right 12px no-repeat;padding:5px 34px 5px 10px;border-width:2px;height:auto} +input:focus,select:focus,textarea:focus{padding:5px 22px;border-width:2px;border-color:#2AD2C9} +select:focus,select:focus.medium,select:focus.wide{padding:5px 34px 5px 10px} +input[type=checkbox]:focus,input[type=radio]:focus{padding:6px 23px;border-width:1px;outline:1px solid #2AD2C9} +} +} +@media screen and (-ms-high-contrast:active),(-ms-high-contrast:none){select::-ms-expand{display:none} +select,select.medium,select.wide{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAMCAYAAABiDJ37AAAAAXNSR0IArs4c6QAAARpJREFUKBVjnDlzJuu/f//cGagAmJiYTjCCzAEaWg+kGkBsCsCG58+fB4MNBBkyY8aMeYyMjIlkGnjy69evjkVFRd+ZYAa8ePEiDcjeBeOTQN/9+fOnL8gwkB64C0Gczs5OXn5+/sNAl+qD+ESAN////7fKyMi4DVOLYiBIcPLkyVKsrKwngIbKwhRho4EGgVzkDDTsOLI83Mswwdzc3GdAxV5A/keYGDoNlP8HFItBNwykDsNAkGBmZuYVIBUIxL9AfCygCGjYOizi2A0EKUxPT98PdEkyFk39QMMmYhEHC2F1IUwxUOMSILsaxgdasAaY1kpgfGw0RqRgUwRMozOB4trApOXS0NDwA5saksRCQ0OZ+/v7BYjRBACZeF+tn9zqUwAAAABJRU5ErkJggg==) center right 12px no-repeat;padding:5px 34px 5px 10px;border-width:2px} +input:focus,select:focus,textarea:focus{padding:5px 22px;border-width:2px;border-color:#2AD2C9} +select:focus.medium,select:focus.wide{padding:5px 34px 5px 10px} +} \ No newline at end of file diff --git a/public/hpilo/css/application.css b/public/hpilo/css/application.css new file mode 100644 index 0000000..adee7dd --- /dev/null +++ b/public/hpilo/css/application.css @@ -0,0 +1,48 @@ +body{margin:0;padding:0;height:100%} +*{margin:0;padding:0;outline:0} +img{border:none} +#footpanel{color:#fff;font-size:10px;font-weight:400;font-family:Arial,Helvetica,sans-serif,Verdana;position:fixed;bottom:0;left:0;z-index:9999;border:0;border-bottom:none;width:100%;margin:0 0;background-color:#036;background-image:-ms-linear-gradient(left,#036 0,#036 5%,#7591AC 69%,#036 100%);background-image:-moz-linear-gradient(left,#036 0,#036 5%,#7591AC 69%,#036 100%);background-image:-o-linear-gradient(left,#036 0,#036 5%,#7591AC 69%,#036 100%);background-image:-webkit-gradient(linear,left top,right top,color-stop(0,#036),color-stop(.05,#036),color-stop(.69,#7591AC),color-stop(1,#036));background-image:-webkit-linear-gradient(left,#036 0,#036 5%,#7591AC 69%,#036 100%);background-image:linear-gradient(left,#036 0,#036 5%,#7591AC 69%,#036 100%)} +*html #footpanel{margin-top:-1px;position:absolute;top:expression(eval(document.compatMode &&document.compatMode=='CSS1Compat') ?documentElement.scrollTop+(documentElement.clientHeight-this.clientHeight) : document.body.scrollTop +(document.body.clientHeight-this.clientHeight))} +#footpanel ul{padding:0;margin:0;float:left;width:100%;list-style:none;border-top:1px solid #556672;font-size:1.1em} +#footpanel ul li{padding:0;margin:0;float:left;position:relative} +#footpanel ul li a{padding:5px;float:left;height:16px;width:16px;text-decoration:none;color:#fff;position:relative} +html #footpanel ul li a:hover{background-color:#fff;color:#000} +html #footpanel ul li a.active{background-color:#fff;color:#000;margin-top:0;z-index:200;position:relative} +#langpanel a.lang{border-left:1px solid #555} +#powerpanel a.active{border-left:1px solid #555} +#alertpanel a{border-right:1px solid #555} +#alertpanel a:hover{border-right:1px solid #fff} +#alertpanel a.active{border-right:1px solid #555} +#footpanel a.home{background:url(home.png) no-repeat 15px center;width:50px;padding-left:40px;border-right:1px solid #147;text-indent:0} +a.profile{background:url(user.png) no-repeat center center} +a.contacts{background:url(address_book.png) no-repeat center center} +a.playlist{background:url(document_music_playlist.png) no-repeat center center} +a.videos{background:url(film.png) no-repeat center center} +a.messages{background:url(mail.png) no-repeat center center} +a.editprofile{background:url(wrench_screwdriver.png) no-repeat center center} +a.alerts{background:url(newspaper.png) no-repeat center center} +#footpanel li#alertpanel,#footpanel li#justfootpanel,#footpanel li#langpanel,#footpanel li#powerpanel,#footpanel li#uidpanel{float:right} +#footpanel a small{text-align:center;width:70px;background:url(pop_arrow.gif) no-repeat center bottom;padding:5px 5px 11px;display:none;color:#fff;font-size:1em;text-indent:0} +#footpanel a:hover small{display:block;position:absolute;top:-35px;left:50%;margin-left:-40px;z-index:9999} +#footpanel ul li div a{text-indent:0;width:auto;height:auto;padding:0;float:none;color:#00629a;position:static} +#footpanel ul li div a:hover{text-decoration:underline} +#footpanel .subpanel{position:absolute;left:0;bottom:25px;display:none;width:182px;border:1px solid #555;border-bottom:0;background:#fff;overflow:hidden;padding-bottom:2px} +#footpanel h3{border:1px solid #fff;border-bottom-color:#3f658c;background:#cfe0f1;font-family:Arial;font-size:11pt;font-style:normal;font-variant:normal;font-weight:400;padding:5px 10px;color:#000;cursor:pointer;background-image:-ms-linear-gradient(top,#CFE0F1 0,#a2c2e4 100%);background-image:-moz-linear-gradient(top,#CFE0F1 0,#a2c2e4 100%);background-image:-o-linear-gradient(top,#CFE0F1 0,#a2c2e4 100%);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#CFE0F1),color-stop(1,#a2c2e4));background-image:-webkit-linear-gradient(top,#CFE0F1 0,#a2c2e4 100%);background-image:linear-gradient(top,#CFE0F1 0,#a2c2e4 100%);background-repeat:no-repeat} +#footpanel h3 span{font-size:1.5em;float:right;line-height:.6em;font-weight:400} +#footpanel .subpanel ul{padding:0;margin:0;background:#fff;width:100%;overflow:auto} +#footpanel .subpanel li{float:none;display:block;padding:0;margin:0;overflow:hidden;clear:both;background:#fff;position:static;font-size:.9em} +#langpanel .subpanel li a img{float:left;margin:0 5px} +#powerpanel .subpanel li span{padding:5px;background:#fff;color:#777;float:left} +#powerpanel .subpanel li a img{float:left;margin:0 5px} +#powerpanel .subpanel li a{padding:2px 0;margin:0;line-height:24px;height:24px;background:#fff;display:block} +#powerpanel .subpanel li a:hover{background:#3b5998;color:#fff;text-decoration:none} +#powerpanel .subpanel li a span{background-color:transparent} +#powerpanel .subpanel li tr:hover{cursor:pointer} +#alertpanel .subpanel{right:0;left:auto;width:230px} +#alertpanel .subpanel table{float:none;display:block;padding:0;margin:0;overflow:hidden;clear:both;background:#fff;position:static;font-size:.9em;width:100%} +#alertpanel .subpanel table tr{padding:3px 0;margin:0;line-height:32px;height:32px;background:#fff;color:#06C;font-size:.9em} +#alertpanel .subpanel table :hover{background:#3b5998;color:#fff;text-decoration:none} +#healthsubpanel.subpanel{width:auto} +#healthsubpanel.subpanel img{vertical-align:baseline} +#healthsubpanel.subpanel td{padding-right:8px} +#healthtitle{margin:0} \ No newline at end of file diff --git a/public/hpilo/css/eov.css b/public/hpilo/css/eov.css new file mode 100644 index 0000000..b0b5af3 --- /dev/null +++ b/public/hpilo/css/eov.css @@ -0,0 +1,354 @@ +@charset "UTF-8"; +body,html{height:100%;margin:0;padding:0} +div,span,table,td,th,tr{font-family:Arial,sans-serif,Verdana,Helvetica,LuzSans Book,HPFutura Book,Futura Bk;font-weight:400;font-size:11px} +body{background-color:#fff;font-family:Arial,sans-serif,Verdana,Helvetica,LuzSans Book,HPFutura Book,Futura Bk;font-weight:400;font-size:11px;min-height:100%;line-height:normal;color:#000} +img{border:none} +.body{padding:10px} +.body-flush-fit{margin:0;border:0;padding:0} +a{font-size:11px;color:#039;text-decoration:none} +a:active,a:hover,a:link,a:visited{color:#039;text-decoration:none} +a:hover{text-decoration:underline;cursor:pointer;cursor:hand} +h2{font-size:24px;color:#036;border-bottom:2px solid #7591AC;min-height:25px;background:#fff;background-image:-ms-linear-gradient(top,#FFF 0,#D8E0E8 100%);background-image:-moz-linear-gradient(top,#FFF 0,#D8E0E8 100%);background-image:-o-linear-gradient(top,#FFF 0,#D8E0E8 100%);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#FFF),color-stop(1,#D8E0E8));background-image:-webkit-linear-gradient(top,#FFF 0,#D8E0E8 100%);background-image:linear-gradient(top,#FFF 0,#D8E0E8 100%);background-repeat:no-repeat;padding:0 5px 0 5px;margin:1em 0 .5em 0} +h3{font-size:16px;color:#000;border-bottom:2px solid #7591AC;min-height:25px;background:#fff;background-image:-ms-linear-gradient(top,#FFF 0,#E6E6E6 100%);background-image:-moz-linear-gradient(top,#FFF 0,#E6E6E6 100%);background-image:-o-linear-gradient(top,#FFF 0,#E6E6E6 100%);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#FFF),color-stop(1,#E6E6E6));background-image:-webkit-linear-gradient(top,#FFF 0,#E6E6E6 100%);background-image:linear-gradient(top,#FFF 0,#E6E6E6 100%);background-repeat:no-repeat;padding:0 5px 0 5px;margin:1em 0 .5em 0} +h3 span{background:0 0;font-size:16px;color:#000;font-weight:700} +h4{font-size:14px;font-weight:700;color:#036;border-bottom:1px solid #aaa;background:#fff;padding:0 1px 0 1px;margin:0;margin-bottom:2px} +h4 span{background:0 0;font-size:14px;color:#036;font-weight:700} +h5{font-size:13px;font-weight:700;color:#000;padding:0 1px 0 1px;margin:2px} +input.password,input.textfield,input[type=text],input[type=password],select{color:#222;font-size:11px;font-family:Arial,Verdana,Helvetica,sans-serif;border:solid 1px #7591ac;background-color:#fff} +input.password_disabled,input.textfield_disabled,input[type=text][disabled],input[type=password][disabled],select[disabled]{color:#999;border:solid 1px #ccc;background-color:#fff} +input.password_readonly,input.textfield_readonly,input[type=text][readonly],input[type=password][readonly]{color:#222;border:solid 1px #7591ac;background-color:#eee} +input.long_table_data,input[type=text].long_table_data,input[type=password].long_table_data{width:100%;margin:0;padding:0;border:0;background:0 0;font-size:11px;font-weight:400;color:#222;font-family:Arial,sans-serif,Verdana,Helvetica,LuzSans Book,HPFutura Book,Futura Bk} +table.width_full tr{width:100%} +table.nowrap_first_cell td:first-child{white-space:nowrap} +table.full_HV{width:100%;height:100%} +table.full_H{width:100%} +table.plain_data{border:0;font-size:11px} +table.plain_data td.data_subject{font-weight:700} +input[type=checkbox]{vertical-align:middle} +.waitContainer{text-align:center} +.icon13{margin-top:3px;width:13px;height:13px;border:0} +.icon13nt{width:13px;height:13px;border:0 none} +#login_html{overflow:hidden} +.login-body{background:#eee;background-image:-ms-linear-gradient(top,#AAA 0,#AAA 49%,#EEE 100%);background-image:-moz-linear-gradient(top,#AAA 0,#AAA 49%,#EEE 100%);background-image:-o-linear-gradient(top,#AAA 0,#AAA 49%,#EEE 100%);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#AAA),color-stop(.49,#AAA),color-stop(1,#EEE));background-image:-webkit-linear-gradient(top,#AAA 0,#AAA 49%,#EEE 100%);background-image:linear-gradient(top,#AAA 0,#AAA 49%,#EEE 100%);background-repeat:no-repeat;border:0;margin:0;padding:0;height:100%;overflow:hidden} +table.login-banner-table{border:0;margin:0;margin-top:-7px;padding:0;height:47%;width:100%} +td.login-banner-left{background-color:#036;background:#036;background-image:-ms-linear-gradient(left,#036 0,#7591AC 100%);background-image:-moz-linear-gradient(left,#036 0,#7591AC 100%);background-image:-o-linear-gradient(left,#036 0,#7591AC 100%);background-image:-webkit-gradient(linear,left top,right top,color-stop(0,#036),color-stop(1,#7591AC));background-image:-webkit-linear-gradient(left,#036 0,#7591AC 100%);background-image:linear-gradient(left,#036 0,#7591AC 100%);vertical-align:top;width:60%;padding:0} +td.login-banner-right{background-color:#527dbe;background-repeat:no-repeat;background-image:url(../images/login_image_web.jpg);vertical-align:top;width:40%;padding:0;border-left:7px solid #fff} +.login-banner-title{margin-right:60px;text-align:right} +.login-banner-title h1,.login-banner-title h2,.login-banner-title span{font-family:LuzSans Book,HPFutura Book,Futura Bk,Arial,Verdana,Helvetica,sans-serif;font:LuzSans Book;font-weight:400;color:#fff;margin:0;padding:0;white-space:nowrap;background:0 0;border:0} +.login-banner-title h1{font-size:28pt} +.login-banner-title h2{font-size:20pt} +.login-banner-title span{font-size:13pt} +div.login-logo{margin-top:32px;margin-left:20px;margin-bottom:52px;margin-right:0;padding:0;height:84px;width:auto;background-repeat:no-repeat} +#login-logo img{display:none} +.login-middle{width:100%;height:52%;margin:0;padding:0;border-top:7px solid #fff} +#login-middle-table{height:100%;width:90%;float:right;border:0;margin:0;padding:0} +#tr1-login-middle-table{display:none} +#tr2-td3-login-middle-table{display:none} +#tr-login-copyright{height:26px} +#td-login-copyright{padding-left:5%} +#login-copyright{display:none} +#td-loginSecurityBanner{width:45%;padding-top:40px;padding-left:10px;padding-right:60px;vertical-align:top} +#loginSecurityBanner{display:none;padding:10px;background:0 0} +#loginSecurityBannerHeader{border-bottom:1px solid} +#securityMessage,.securityMessage{width:897px;text-align:justify;margin:0;padding-left:0;padding-right:3px;white-space:pre-wrap;overflow:auto;max-height:25em;word-wrap:break-word} +#login_box{width:50%;vertical-align:top} +#login_box_msgs{height:30px} +td.login_appname{text-align:center;vertical-align:bottom;padding-bottom:10px;padding-right:35px} +td.login_appname h1{font-weight:400;font-size:28pt;color:#fff;margin:0;padding-left:0;white-space:nowrap;float:right} +#fwver_span{display:none;white-space:nowrap} +td.login_fields{text-align:left;vertical-align:middle;height:32px} +#login_help_div{float:right;margin-right:20px;margin-top:10px} +td.login_help{text-align:right;padding-bottom:13px;vertical-align:top;padding-right:20px} +#login_fields_table{width:60%} +td.login_fields_label{color:#000;font-size:11pt;font-family:Arial,Verdana,Helvetica,sans-serif;text-align:right;vertical-align:middle;height:32px;padding-right:10px;width:34%} +td.login_button_field{text-align:left;vertical-align:top;padding-top:20px;padding-bottom:20px} +#languageBox,#passwordBox,#userNameBox{white-space:nowrap;vertical-align:middle} +#passwordInput,#usernameInput{width:203px} +#login_rec_browsers{display:none} +#td_remember_section{text-align:right} +.remember_text{color:#000;font-size:10pt;font-family:Arial,Verdana,Helvetica,sans-serif;text-align:left;vertical-align:top;padding-top:10px} +.remember_cb{font-size:10px;font-family:Arial,Verdana,Helvetica,sans-serif;text-align:left;padding-top:6px;vertical-align:top;padding-right:5px} +.login-link{cursor:hand;cursor:pointer;font-family:arial,sans-serif;color:#039;font-size:11px;text-decoration:underline} +.login-help{font-family:arial,sans-serif;color:#000;font-size:11px;padding-top:5px;padding-bottom:10px} +#login-footer{display:none} +div h5{margin:5px 0 10px 0;color:#000;font-size:100%} +#appHeader{top:0;width:100%;height:46px;position:absolute;z-index:5} +#footpanel{bottom:0;width:100%;height:25px;position:absolute;z-index:5} +a#power.power{padding:0;max-height:25px;height:25px;width:102px} +#footpanel #alert_image{height:19px;width:19px;margin-left:3px;margin-top:3px} +#footpanel #langicon{position:absolute;left:5px;top:1px} +#footpanel #power_image1,#footpanel #power_image2,#footpanel #uid_image{width:21px;margin-left:2px;margin-top:2px} +#appContent,#appNavigator{display:block;overflow:hidden;position:absolute;top:46px;bottom:25px} +#appContent{left:299px;right:7px;z-index:3} +#appNavigator{left:7px;width:200px;z-index:4} +* html #appHeader{top:0;height:46px} +* html #appContent,* html #appNavigator{top:0;bottom:0;height:100%;border-top:46px solid #FFF;border-bottom:28px solid #FFF} +* html #appContent{width:100%;left:0;right:0;border-left:216px solid #FFF;border-right:7px solid #FFF} +* html #footpanel{bottom:0;height:25px} +#footpanel ul{border:0} +#footpanel a.power,#footpanel a.uid{color:#FFF;padding:0;max-height:25px;height:25px} +#footpanel a.uid{width:96px} +#footpanel a.power{min-width:120px} +#powerpanel .subpanel li span{padding-top:10px;padding-left:10px;color:#FFF} +#footpanel #powerstatus1{position:absolute;left:30px;top:5px;width:78px} +#footpanel #uidstatus{position:absolute;left:30px;top:5px} +#footpanel #powerstatus2{position:absolute;left:28px;top:5px} +#footpanel #langlink{padding:0;max-height:25px;height:25px;width:156px;white-space:nowrap;text-indent:0} +#lang_space{width:30%} +#system_health_label{padding-left:10px} +.overview_status{padding-left:10px} +.overview_uid_status{padding-left:9px} +.toggler{width:500px;height:200px} +#effect{width:240px;height:135px;padding:.4em;position:relative} +#effect h3{margin:0;padding:.4em;text-align:center} +.ui-effects-transfer{border:2px dotted gray} +Ohbody{background-color:#f1f4f7;padding:10px} +img.sorted{vertical-align:baseline;margin-right:5px;margin-left:5px} +.width_full{width:100%} +.table_layout_fixed{table-layout:fixed;word-wrap:break-word} +.no-right-border{border-right:0} +table.data_table{color:#222;font-family:Arial,Verdana,Helvetica,sans-serif;border:solid 1px #7591ac;font-size:11px} +table.data_table th{font-weight:700;background-color:#eaeef2;text-align:left;white-space:nowrap;background-image:-ms-linear-gradient(top,#EAEEF2 0,#C4D0DD 100%);background-image:-moz-linear-gradient(top,#EAEEF2 0,#C4D0DD 100%);background-image:-o-linear-gradient(top,#EAEEF2 0,#C4D0DD 100%);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#EAEEF2),color-stop(1,#C4D0DD));background-image:-webkit-linear-gradient(top,#EAEEF2 0,#C4D0DD 100%);background-image:linear-gradient(top,#EAEEF2 0,#C4D0DD 100%);vertical-align:middle;height:20px;padding-right:15px;padding-left:5px;border-right:1px solid #7591ac;border-bottom:1px solid #7591ac} +table.data_table th.sorted{background-color:#bbd0e6;background-image:none} +table.data_table td{font-size:small;font-family:Arial,Verdana,Helvetica,sans-serif;text-align:left;font-size:11px;background-color:#f8f9fb;padding-right:5px;padding-left:5px;height:18px;vertical-align:middle;border-right:1px solid #bac8d5;border-bottom:1px solid #bac8d5} +table.data_table th.headerSortUp,table.data_table th.tablesorter-headerAsc{background-image:url(../images/ic_sort_up.png);background-color:#bbd0e6;background-repeat:no-repeat;background-position:right center;padding-right:15px} +table.data_table th.headerSortDown,table.data_table th.tablesorter-headerDesc{background-image:url(../images/ic_sort_dn.png);background-color:#bbd0e6;background-repeat:no-repeat;background-position:right center;padding-right:15px} +table.data_table th div{font-weight:700} +table.data_table tr.odd td{background-color:#eaeff3} +table.data_table tr.odd tr.even td{background-color:#f8f9fb} +table.data_table tbody tr:hover,table.data_table tr.trover{background-color:#e0f0ff} +table.data_table tbody tr.trclick:hover,table.data_table tr.trclick{background-color:#9CF} +table.data_table tbody tr td{background-color:inherit} +table.data_table td.centerText{text-align:center} +.groupingBox{border:1px solid #CCC;padding:10px} +table.groupingBox{border:1px solid #CCC} +td.groupingBoxCell{padding:10px} +td.groupingBox{padding:10px;border:1px solid #CCC} +div.tray,table.masthead{white-space:nowrap;border:0;margin:0;padding:0;color:#fff;font-size:11px;font-family:Arial,Helvetica,sans-serif,Verdana;text-align:right;vertical-align:top;background-color:#036;background-image:-ms-linear-gradient(left,#036 0,#036 5%,#7591AC 69%,#036 100%);background-image:-moz-linear-gradient(left,#036 0,#036 5%,#7591AC 69%,#036 100%);background-image:-o-linear-gradient(left,#036 0,#036 5%,#7591AC 69%,#036 100%);background-image:-webkit-gradient(linear,left top,right top,color-stop(0,#036),color-stop(.05,#036),color-stop(.69,#7591AC),color-stop(1,#036));background-image:-webkit-linear-gradient(left,#036 0,#036 5%,#7591AC 69%,#036 100%);background-image:linear-gradient(left,#036 0,#036 5%,#7591AC 69%,#036 100%)} +table.masthead{width:100%;top:0;margin-top:0;vertical-align:top;min-height:46px} +#td_masthd_buttons{width:1%;color:#fff;padding-right:5px;padding-left:30px} +table.bdf_table td{border:1px solid #000;bgcolor:#F9F9D5;table-layout:fixed;color:#656565;text-align:center} +table.bdf_table th{font-size:10px;color:#3B3B3B;font-weight:700} +.normal-header{border:1px solid #839CB4;height:25px;padding:0;background:#839CB4;background-image:-ms-linear-gradient(top,#D5DEE6 0,#839CB4 100%);background-image:-moz-linear-gradient(top,#D5DEE6 0,#839CB4 100%);background-image:-o-linear-gradient(top,#D5DEE6 0,#839CB4 100%);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#D5DEE6),color-stop(1,#839CB4));background-image:-webkit-linear-gradient(top,#D5DEE6 0,#839CB4 100%);background-image:linear-gradient(top,#D5DEE6 0,#839CB4 100%);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px} +.normal-header div{margin:0;padding:0;margin-top:4px;margin-left:4px} +.normal-header span{font-size:14px;font-weight:700} +.normal-body{border:1px solid #839CB4;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px} +#td_masthead_logo{width:1%;padding-left:10px;padding-right:10px;padding-top:0} +div.masthead_logo{vertical-align:middle;text-align:left;background:url(../images/masthead_logo.png);background-repeat:no-repeat;cursor:pointer} +table.masthead span.app_name{color:#fff;font-family:LuzSans Book,Arial,sans-serif,Futura Bk,Arial,Verdana;vertical-align:top;font-size:20px;white-space:nowrap} +table.masthead td#platform_name{line-height:11px;margin-top:-5px;color:#fff;font-family:Arial,Helvetica,sans-serif,Verdana;font-size:11px;text-align:left;vertical-align:middle;white-space:nowrap} +table.masthead span.user_field,td.home_link_col,td.hostname{font-family:Arial,Helvetica,sans-serif,Verdana;font-size:11px;color:#fff;text-align:left;vertical-align:middle;white-space:nowrap;text-align:right;vertical-align:middle;white-space:nowrap} +td.home_link_col{padding-left:40px} +table.masthead span.cust_field{text-align:right;vertical-align:middle;width:20%;padding-left:10px;white-space:nowrap} +table.masthead a,table.masthead a:active,table.masthead a:hover,table.masthead a:visited{color:#fff;text-decoration:underline;text-align:right;vertical-align:middle;white-space:nowrap} +table.masthead button.logout{vertical-align:middle;margin-right:5px;margin-left:5px;float:right;white-space:nowrap} +.wrapper{min-height:100%;height:auto!important;height:100%;margin:0 auto -142px} +.footer,.push{height:142px} +.position_right{float:right;text-align:right} +#navigation-frame-body{background-color:#fff} +#navigationContent{margin-left:10px;margin-right:10px;margin-bottom:7px;overflow:auto} +.navigation-tree,.navigation-tree li{list-style:none;margin:0;padding:0} +.navigation-tree .subtree-label-1{font-weight:700;cursor:pointer;color:#000} +.navigation-tree li{padding:.2em 0 .2em 0} +.navigation-tree li .subtree{margin:0;padding:0;margin-left:25px;padding-left:.5em;display:none} +.navigation-tree li .subtree li{font-weight:400;margin:0} +.navigation-tree li.selected-leaf{background-color:#9CF} +.navigation-tree li .tree-expanded{display:block} +.subtree a,.subtree a:visited{color:#000} +.subtree a.no-adv{color:grey;text-decoration:none} +.navigation-tree .tree-control{display:inline-block;margin:0;padding:0;margin-right:.5em;width:14px;height:14px;background-color:#EAEEF2;color:#036;font-weight:700;font-size:11px;text-align:center;text-decoration:none;vertical-align:middle;border:1px solid #6685A4;background-image:-ms-linear-gradient(top,#EAEEF2 0,#C4D0DD 100%);background-image:-moz-linear-gradient(top,#EAEEF2 0,#C4D0DD 100%);background-image:-o-linear-gradient(top,#EAEEF2 0,#C4D0DD 100%);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#EAEEF2),color-stop(1,#C4D0DD));background-image:-webkit-linear-gradient(top,#EAEEF2 0,#C4D0DD 100%);background-image:linear-gradient(top,#EAEEF2 0,#C4D0DD 100%);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px} +.mainContent{position:absolute;left:0;right:0;top:40px;bottom:7px;border:1px solid #839CB4;padding:0;height:auto;background-color:#fff;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px} +.iframe-content{margin:7px} +.content-with-tabs{position:absolute;left:0;right:0;top:26px;bottom:7px;border:1px solid #839CB4;-webkit-border-radius:3px;-webkit-border-top-left-radius:0;-moz-border-radius:3px;-moz-border-radius-topleft:0;border-radius:3px;border-top-left-radius:0} +.content-title{position:absolute;top:7px;left:0;right:0;border:1px solid #839CB4;height:25px;padding:0;background:#839CB4;background-image:-ms-linear-gradient(top,#D5DEE6 0,#839CB4 100%);background-image:-moz-linear-gradient(top,#D5DEE6 0,#839CB4 100%);background-image:-o-linear-gradient(top,#D5DEE6 0,#839CB4 100%);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#D5DEE6),color-stop(1,#839CB4));background-image:-webkit-linear-gradient(top,#D5DEE6 0,#839CB4 100%);background-image:linear-gradient(top,#D5DEE6 0,#839CB4 100%);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px} +.content-title div{margin:0;padding:0;margin-top:4px;margin-left:4px} +.content-title span{font-size:14px;font-weight:700} +#contentTitleHome{display:none} +#contentTitleSpan{margin:0} +#contextHelpDiv{margin-right:7px;margin-top:-18px} +#contextHelp{float:right} +#help_button{float:right;margin-top:-2px;height:36px;width:36px;background-color:#fff;border-radius:12px;stroke:#ccc} +#help_button:hover{stroke:#fff} +#titleWrapper{height:16px;margin-right:25px;white-space:nowrap;overflow:hidden} +#titleWrapper h4{background:0 0;color:#000;padding:0;display:inline} +.subpanel ul{padding:0;margin:0;background:#fff;width:100%;overflow:auto} +.subpanel li{float:none;display:block;padding:0;margin:0;overflow:hidden;clear:both;background:#fff;position:static;font-size:.9em} +#langpanel .subpanel{display:none;max-width:181px;border-bottom:0;background:#fff;overflow:hidden;padding-bottom:2px} +#langpanel .subpanel li a img{float:left;margin:0 5px} +#langpanel .subpanel li a{padding:3px 0;margin:0;line-height:22px;height:22px;background:#fff;display:block} +#langpanel .subpanel li span{padding:5px;color:#777} +#lang_space{display:none} +#link_to_lang_page_span{float:left;text-align:left;padding-left:5px} +#footpanel .subpanel li.li_langsinstalled{margin-top:10px;margin-bottom:10px} +#footpanel #langtext{position:absolute;left:42px;top:5px;width:56px} +#langpanel .subpanel li a{padding-bottom:5px;padding-top:3px;padding-left:0;padding-right:0;margin:0;line-height:22px;height:22px;background:#fff;display:block} +span.langicon{white-space:nowrap;vertical-align:middle;width:21px;margin:0;border:0;padding:4px;background:#00f;font-size:14px;color:#fff} +#langpanel .subpanel li span.trans_name{padding:5px;color:inherit} +#langpanel .subpanel li span.langicon{white-space:nowrap;text-indent:0;text-align:center;height:13px;line-height:13px;width:20px;margin:0;border:0;padding-top:5px;padding-bottom:5px;padding-left:2px;padding-right:2px;background:#00f;font-size:14px;color:#fff;vertical-align:middle} +#langpanel .subpanel li a img.langcheck{margin-top:6px;padding-right:4px} +#tooltipHolder{background-color:#F9F9D5;position:absolute;padding:7px;border:solid 1px #000;-moz-box-shadow:3px 3px 3px 0 #bbb;-webkit-box-shadow:3px 3px 3px 0 #bbb;box-shadow:3px 3px 3px 0 #bbb} +span.langicon:hover{color:#fff} +span.langicon:active{color:#fff} +.status-html{float:left;padding-right:2px;white-space:nowrap} +.status-html span{background:0 0;width:13px;height:13px;margin:0} +.sk-icon-checkmark{background:url(../images/icon-checkmark.png) 50% 50% no-repeat;float:left;width:13px;height:13px;margin:0} +.sk-icon-x{background:url(../images/icon-x.png) 50% 50% no-repeat;float:left;width:13px;height:13px;margin:0} +.sk-icon-dialog-close{background:url(../images/icon-dialog-close-x.png) 50% 50% no-repeat;float:left;width:13px;height:13px;margin:0} +.collapsible-header,tr.collapsible-row{cursor:pointer} +.collapsible-header{padding-left:20px;margin-bottom:1em;display:inline-block} +.collapsible-header,tr.collapsible-row>td.collapser{background:url(data:image/gif;base64,R0lGODlhFAAUALMAAJmZmaWlpdnZ2bm5ufLy8szMzLKysuXl5b+/v////wAAAAAAAAAAAAAAAAAAAAAAACH5BAEHAAkALAAAAAAUABQAAAQrMMlJq7046827T4HwTQBgHGNZIoSnqkW7vWrA0UB8q4O8n6PQaEgsGo/HCAA7) -5px 50% no-repeat} +.collapsible-header.collapsible-open,tr.collapsible-row.collapsible-open>td.collapser{background:url(data:image/gif;base64,R0lGODlhFAAUALMAAJmZmaWlpdnZ2b+/v/Ly8rKysuXl5czMzP///wAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEHAAgALAAAAAAUABQAAAQuEMlJq7046827/1UAjCQQbEJJClyhFp2hGt5ADh9BEuABHCAEIcALGo/IpHITAQA7) -5px 50% no-repeat} +.collapsible-header:hover,tr.collapsible-row:hover>td.collapser{background:url(data:image/gif;base64,R0lGODlhFAAUALMAADMzM3JycszMzExMTLKyspmZmWZmZuXl5X9/f////wAAAAAAAAAAAAAAAAAAAAAAACH5BAEHAAkALAAAAAAUABQAAAQrMMlJq7046827TwPxTQBgCGNZIoenqkW7verA0UB8q4G8n6PQaEgsGo/HCAA7) -5px 50% no-repeat} +.collapsible-header.collapsible-open:hover,tr.collapsible-row.collapsible-open:hover>td.collapser{background:url(data:image/gif;base64,R0lGODlhFAAUALMAADMzM39/f8zMzExMTLKyspmZmWZmZuXl5f///wAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEHAAgALAAAAAAUABQAAAQuEMlJq7046827/9UAjCQwbERJEpyhGp2gCl5ABt9BHmABFCDEYcALGo/IpHITAQA7) -5px 50% no-repeat} +.collapsible-content{margin-left:20px} +tr.collapsible-row-details>td{background-color:#fff;cursor:auto} +tr.collapsible-row td.collapser-cell{width:20px;text-align:center;border-right:0} +.collapser{width:10px;height:10px;display:inline-block;vertical-align:baseline} +tr.collapsible-row-details>td{padding:20px 35px 20px 35px} +#alt_mode_info{margin-left:50px;margin-top:50px;font-size:12px} +#alt_mode_info h4{border-bottom:0} +#flashTray{margin:5%;margin-top:0;margin-bottom:10px;text-align:center;background-color:#9FB2C5;font-size:12pt;font-weight:700;color:#fff;padding-left:10%;padding-right:10%} +#flashTray2{margin:0;text-align:center;background-color:#9FB2C5;font-size:12pt;font-weight:700;color:#fff;padding-left:10%;padding-right:10%;overflow:hidden} +#flashTray2Div{width:100%;padding:0;text-align:left} +#flashspan{padding:0;border:0;margin:0;max-height:20px;height:20px;width:280px;white-space:nowrap;display:none;padding-top:5px;padding-left:5px;text-indent:0;float:left} +#progressDescription{font-size:12pt;font-weight:700;margin-bottom:19px;margin-top:19px} +#progressbartray{margin:5px;background-color:#fff;border:1px solid #7191AC;min-height:26px} +#progressbar{margin:5px;border:1px solid #7191AC;text-align:left;overflow:hidden} +#progressLabel{font-size:12pt;font-weight:700;margin-bottom:19px;margin-top:19px} +#app_copyright{position:absolute;bottom:5px;margin-left:5px} +.OAipaddressOptions{padding-left:10px} +.center{text-align:center} +.nowrap{white-space:nowrap} +#fw_desc1c{display:none} +#contentTitleHomeIcon{display:none} +td.statusDisplay{width:62px;top:0;vertical-align:top} +td.statusDisplay img{text-align:right;float:left;padding:15px 15px 13px 15px;vertical-align:top;top:15px} +td.msgText{padding:15px 15px 15px 0} +td.msgText p{margin:0} +body.rebranding_prob_body{min-height:300px;height:300px} +.rebranding_prob_title{float:left;padding-left:6px;display:inline-block;font-size:20px;font-weight:700;color:#000} +.rebranding_prob_div{width:600px;max-width:600px;min-width:600px;margin:20px;font-size:12px} +.rebranding_prob_div p{padding-left:6px} +.rebranding_copyright{position:absolute;bottom:10px} +#rebranding_login_box{width:600px} +.rebranding_help_div{display:inline-block;float:right;margin-right:60px;margin-top:0;min-height:20px;height:20px;width:20px;background:url(../images/help.png) no-repeat right top;cursor:pointer} +#note_content{overflow:auto;display:block;margin-left:auto;margin-right:auto} +#dialogImport{width:auto;min-height:381px;max-height:none;height:auto;background:#FFF} +#dialogImport #importTextArea{display:block;margin-left:auto;margin-right:auto;margin-bottom:20px} +#langpanel .langselect:hover{background:#3b5998;color:#fff;text-decoration:none;cursor:pointer} +.errorDisplayBottomMargin{margin-bottom:10px} +#overview_td{padding:10px;width:95%} +#default_lang_td{padding-right:4px} +#lpk_note_td{padding-bottom:10px} +.user_admin_title{padding-top:5px} +#access_settings_notes{padding-top:5px} +#lang_options{min-width:80px} +.rom_td{vertical-align:top} +select.medium{background:0 0;height:16px;line-height:1;min-width:96px;overflow:hidden;padding-left:2px;width:auto} +select.wide{background:0 0;height:16px;line-height:1;min-width:215px;padding-left:2px;width:auto} +option{padding:2px 4px 2px 4px} +#serviceBox{float:left;margin-top:10px;margin-right:3%;width:44%;min-width:490px} +#accessBox select,#serviceBox select{height:20px} +#accessBox input[type=text],#serviceBox input[type=text]{min-width:88px;min-height:16px;padding:2px 2px 2px 4px} +#rc_lock_table tr.captionRow th{padding-top:15px} +#rc_lock_table select,#rc_trust_table select{min-width:115px} +#key_seq_label,#rc_lock_label,#rc_trust_label{width:275px;font-weight:700} +input[type=file]{font-family:inherit;font-size:inherit;line-height:inherit} +table.data_table td.checkbox_td{text-align:center} +#lpk_no_nand_td{padding-bottom:10px} +.file_upload_desc{font-style:italic} +.bold_note{font-weight:700} +.unset{font-style:italic} +#csv_title{font-weight:700} +#log_table_div{display:-moz-groupbox;width:100%} +.log_table_box{width:10px;max-width:10px} +.log_table_num{min-width:60px;max-width:60px;width:60px} +.log_table_class,.log_table_date{min-width:130px;max-width:130px;width:130px} +.event_description,.log_table_desc{white-space:pre-wrap;min-width:200px} +table.data_table td.event_description{white-space:pre-wrap} +.log-buttons{float:right} +.log-buttons-div{width:inherit;float:right;margin-bottom:5px} +.log-button{float:right;padding-bottom:5px} +.log-filters{float:none;height:auto;width:auto;min-width:0;margin-bottom:5px} +#log_table,#log_table.iml{min-width:830px} +.filter-reset,.filter-select{display:inline-block;height:22px;margin-left:10px} +select:focus.filter-select{height:22px} +.filter-select:first-child{margin-left:0} +.filter-search-combo{position:relative;display:inline-block;margin-left:10px;margin-bottom:0;height:40px;vertical-align:top} +.filter-search-combo.ie8{vertical-align:top} +#log_keyword_search{width:190px} +input[type=text].search-input{min-height:16px;padding:2px 45px 2px 4px} +input[type=text].search-input.ie8{padding:2px 25px 2px 4px;height:22px} +input[type=text]::-ms-clear{display:none;width:0;height:0} +.search-clear{position:absolute;top:6px;right:23px;width:14px;height:14px;background-image:url(../images/hpe-icons.png);background-position:-160px -20px;background-repeat:no-repeat;cursor:pointer} +.search-clear:hover{background-position:-160px 0} +.search-control{position:absolute;top:4px;right:7px;width:15px;height:16px;background-image:url(../images/hpe-icons.png);background-position:-420px -60px;background-repeat:no-repeat;cursor:pointer;z-index:10} +.search-control:hover{background-position:-420px -40px} +.search-input-help{color:#777;height:17px;display:block;padding-top:2px} +table.date_range{margin-left:auto;margin-right:auto} +td.date_range{vertical-align:top;padding-top:5px} +td.date_range.to{padding-left:10px} +td.date_range.buttons{float:right} +td.date_range label{font-weight:700} +input[type=text].date_range{border-width:0;margin-left:3px;background-color:transparent} +#cn a{color:#fff;font-size:13pt} +.log_table_severity{min-width:70px;max-width:70px;width:70px} +svg:not(:root){overflow:hidden} +#csv_content{margin:0;text-align:left;font-size:8pt;width:98%} +.fedLicense{padding:5px;margin-right:130px;clear:both} +#navigation-frame-body #bodyContent{position:absolute;top:7px;bottom:0;left:0;right:0;display:block;height:680px} +#navTreeHeader{margin:10px 10px 4px 10px;padding:0;height:14px} +#tree-control-all{margin:0;padding:0} +#mem_info_table tr:nth-child(odd) td{white-space:nowrap;font-weight:700} +#mem_info_table tr:nth-child(even) td{padding-left:10px;width:80%} +.fed-progressbar.ui-progressbar .ui-progressbar-value{margin:-1px;height:50px;background:#EAEEF2;background-image:-ms-linear-gradient(top left,#EAEEF2 0,#C4D0DD 100%);background-image:-moz-linear-gradient(top left,#EAEEF2 0,#C4D0DD 100%);background-image:-o-linear-gradient(top left,#EAEEF2 0,#C4D0DD 100%);background-image:-webkit-gradient(linear,left top,right bottom,color-stop(0,#EAEEF2),color-stop(1,#C4D0DD));background-image:-webkit-linear-gradient(top left,#EAEEF2 0,#C4D0DD 100%);background-image:linear-gradient(top left,#EAEEF2 0,#C4D0DD 100%)} +.clearFloats{clear:both} +.fed-errorDisplay,.fed-infoDisplay,.fed-noConfigPriv{margin-bottom:10px;float:left;width:80%;clear:both} +.fedResultsRow{margin-top:10px;margin-right:3%;min-width:400px} +#clearer{clear:both} +.waitTextContainer{text-align:center} +.ahs_button_div{float:right} +#bb_policy_note2{margin-top:0;margin-bottom:0} +#download_estimate{text-align:right;margin-bottom:0} +#hkTable th{font-weight:700;text-align:left;padding-bottom:1px;min-width:100px} +#hkTable tr td:first-child{font-weight:700} +#rc_lock_text{padding-left:3px} +#rc_lock_table th{font-weight:700;text-align:left} +#rc_trust_note{margin-bottom:24px} +.hp-icon.hp-power{display:inline-block;content:'';width:16px;height:17px;background-image:url(../images/hpe-icons.png);background-position:-380px -20px;background-repeat:no-repeat;margin-right:2px;vertical-align:middle} +.hp-power.hp-on{background-position:-380px -40px} +.hp-power.hp-off{background-position:-380px -60px} +.control-icon-power{fill:transparent;stroke:#ccc} +.control-icon-power.powered-on,.powered-on>.control-icon-power{fill:#01a982} +.control-icon-power.powered-off,.powered-off>.control-icon-power{fill:#FFD144} +.alerts.indicator-on .control-icon,.control-icon-indicator.indicator-on,.indicator-on .control-icon-indicator,span.indicator-on{fill:#2AD2C9;stroke:#2AD2C9} +.alerts.indicator-blink .control-icon,.control-icon-indicator.indicator-blink,.indicator-blink .control-icon-indicator{fill:#2AD2C9;stroke:#2AD2C9;animation-name:glowblue;animation-delay:0s;animation-duration:.5s;animation-iteration-count:infinite;animation-timing-function:ease-in-out;animation-direction:alternate} +.statusicon .indicator-off,span.indicator-off{fill:transparent} +span.control-icon.control-icon-indicator{fill:transparent} +span.indicator-on{fill:inherit} +svg.control-icon-indicator{fill:inherit;height:inherit;width:inherit} +@keyframes glowblue{from{fill:#666;stroke:#666} +to{fill:#2AD2C9;stroke:#2AD2C9} +} +.control-icon.icon13nt{width:13px;height:13px;border:0 none;margin-top:1px;vertical-align:top} +.control-icon.icon16nt{width:16px;height:16px} +.control-icon.icon18nt{width:18px;height:18px} +.alerts .control-icon,span.control-icon-indicator{width:21px;height:21px;stroke:#ccc} +a.uid{line-height:200%} +svg.icon-spinning{margin-top:5px;width:24px;height:24px;max-width:24px!important;max-height:24px!important} +span.control-icon{vertical-align:top;animation:none;transition:none} +span.icon-spinning{animation:none;transition:none} +span.control-icon svg{margin-top:0;vertical-align:top;width:inherit;height:inherit} +span.control-icon:not(.icon-spinning)>svg:not(.icon-spinning){display:block} +span.control-icon:not(.icon-spinning)>svg.icon-spinning{display:none} +span.control-icon.icon-spinning>svg:not(.icon-spinning){display:none} +span.control-icon.icon-spinning>svg.icon-spinning{display:block} +svg.icon-spinning,svg.icon-spinning circle{fill:none;stroke:#333} +svg.icon-spinning circle:nth-child(2){stroke:#ddd} +span.control-icon.icon-spinning span.alerts-label{display:none} +span.control-icon:not(.icon-spinning) span.alerts-label{display:block} +div.spinner-wrapper{height:32px;padding:0;vertical-align:middle;white-space:nowrap} +div.spinner-wrapper div{vertical-align:middle;display:inline-block} +div.spinner-icon{padding-right:5px;padding-top:0;height:32px} +div.spinner-text{padding-top:6px;height:24px} +.tabset-link,.tabset-link:hover,.tree-link,.tree-link:hover{text-decoration:none!important} \ No newline at end of file diff --git a/public/hpilo/css/irc.css b/public/hpilo/css/irc.css new file mode 100644 index 0000000..2db7357 --- /dev/null +++ b/public/hpilo/css/irc.css @@ -0,0 +1,86 @@ +.dockedButtons .hasmenu{z-index:1000} +.ui-widget.ui-widget-content{opacity:1} +video::-webkit-media-controls-panel{display:none!important} +.videoContainer{position:relative;overflow:hidden;background:0 0;color:#ccc;display:flex;flex-direction:column;justify-content:center;width:100%;height:100%} +.grommet #ircWindow.ui-dialog-content{margin:0;padding:0} +.control{color:#ccc;position:absolute;top:0;left:0;z-index:2147483647;display:none;background:#1F1F1F;background:linear-gradient(top,#242424 0,#1F1F1F 95%,transparent 100%);background:-moz-linear-gradient(top,#242424 0,#1F1F1F 95%,transparent 100%);background:-webkit-linear-gradient(top,#242424 0,#1F1F1F 95%,transparent 100%);background:-o-linear-gradient(top,#242424 0,#1F1F1F 95%,transparent 100%);opacity:.9;border-bottom-left-radius:35px;border-bottom-right-radius:35px;padding-right:35px;padding-left:35px;cursor:auto} +.control.fullscreenMode{cursor:move} +.topControl{height:11px;border-bottom:1px solid #404040;padding:1px 5px;background:#1F1F1F;background:-moz-linear-gradient(top,#242424 50%,#1F1F1F 50%,#171717 100%);background:-webkit-linear-gradient(top,#242424 50%,#1F1F1F 50%,#171717 100%);background:-o-linear-gradient(top,#242424 50%,#1F1F1F 50%,#171717 100%)} +.btmControl{clear:both;background:#1F1F1F;background:-moz-linear-gradient(top,#242424 50%,#1F1F1F 50%,#171717 100%);background:-webkit-linear-gradient(top,#242424 50%,#1F1F1F 50%,#171717 100%);background:-o-linear-gradient(top,#242424 50%,#1F1F1F 50%,#171717 100%)} +.control div.btn{float:left;width:34px;padding:0 5px;cursor:pointer;display:none} +.dockedButtons{display:flex} +.dockedButtons div.btn{margin:0 4px} +div.btn:hover svg{fill:#fff!important;stroke:hsla(0,0%,100%,.8)} +.btnHotKeys svg,.control-icon-keyboard{stroke:hsla(0,0%,100%,.3);max-width:44px;max-height:44px;width:44px;height:27px;pointer-events:none} +.dockedButtons .control-icon-keyboard{margin-top:-5px} +.btnVM .control-icon-cd{width:29px;max-width:30px;height:30px;max-height:30px} +.dockedButtons .btnVM .control-icon-cd{margin-top:-4px;width:34px} +.btnHotKeys svg.control-icon-keyboard path{stroke-width:1.25px} +.btnHotKeys svg.control-icon-keyboard{stroke-width:1px;height:37px} +div.btn:hover svg path{stroke:#fff} +.control div.text{font-size:12px;font-weight:700;line-height:30px;text-align:center;font-family:verdana;width:20px;border:none;color:#777} +.control .btnHotKeys,.control .btnOptions,.control div.btnPin{display:flex} +.control.dockedMode div.btn.dockedMode,.control.fullscreenMode div.btn.fullscreenMode,.control.windowedMode div.btn.windowedMode{display:flex} +.control.windowedMode div.btnPin{display:none} +div.videoContainer>div.control.dockedMode,div.videoContainer>div.control.windowedMode{display:none!important} +.control div.btnPin.selected{border:1px solid #000;border-radius:5px;background-color:hsla(0,0%,100%,.2)} +.control div.btnPin.selected svg path{fill:hsla(0,0%,100%,.7)} +.control div.btnOptions{width:32px;height:32px;max-width:36px;max-height:36px;padding:0;margin-left:5px;margin-right:-4px} +.control div.btnOptions svg{width:32px;height:32px;max-width:36px;max-height:36px} +.control div.btnOptions .control-icon-logo path{stroke-width:8px} +.control div.btnOptions .control-icon-menu{padding:2px 4px 0 4px} +.control div.selected{font-size:15px;color:#ccc} +div.btnVideoContract,div.btnVideoDocked,div.btnVideoFullScreen,div.btnVideoMaximize,div.btnVideoRestore,div.btnVideoWindowMode{float:right} +.control.windowedMode.maximized div.btn.restore,.control.windowedMode:not(.maximized) div.btn.maximize{display:flex} +.btnVideoMaximize svg,.btnVideoRestore svg{max-width:22px;max-height:22px;margin-right:1px;margin-left:1px;margin-top:2px} +.control:not(.maximized) div.btn.restore{display:none} +.control.maximized div.btn.maximize{display:none} +.control div.rightControl div.btn{margin-top:5px} +.control div.btnVideoDocked>svg{vertical-align:top} +.progress{width:85%;height:10px;position:relative;float:left;cursor:pointer;background:#444;background:-moz-linear-gradient(top,#666,#333);background:-webkit-linear-gradient(top,#666,#333);background:-o-linear-gradient(top,#666,#333);-moz-box-shadow:0 2px 3px #333 inset;-webkit-box-shadow:0 2px 3px #333 inset;box-shadow:0 2px 3px #333 inset;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px} +.progress span{height:100%;position:absolute;top:0;left:0;display:block;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px} +.timeBar{z-index:10;width:0;background:#3FB7FC;background:-moz-linear-gradient(top,#A0DCFF 50%,#3FB7FC 50%,#16A9FF 100%);background:-webkit-linear-gradient(top,#A0DCFF 50%,#3FB7FC 50%,#16A9FF 100%);background:-o-linear-gradient(top,#A0DCFF 50%,#3FB7FC 50%,#16A9FF 100%);-moz-box-shadow:0 0 1px #fff;-webkit-box-shadow:0 0 1px #fff;box-shadow:0 0 1px #fff} +.bufferBar{z-index:5;width:0;background:#777;background:-moz-linear-gradient(top,#999,#666);background:-webkit-linear-gradient(top,#999,#666);background:-o-linear-gradient(top,#999,#666);-moz-box-shadow:2px 0 5px #333;-webkit-box-shadow:2px 0 5px #333;box-shadow:2px 0 5px #333} +.time{width:15%;float:right;text-align:center;font-size:11px;line-height:12px} +.hasmenu svg.control-icon-checkmark{height:20px;fill:#666;stroke:#666} +.hasmenu svg.control-icon-eject{fill:#666!important;stroke:#666!important} +.hasmenu svg.status-icon-blank{height:20px;width:24px;margin:0} +.hasmenu svg.control-icon-checkmark polyline{stroke:#666} +.hasmenu.irc .ui-widget-header{height:auto;font-size:1em} +.hasmenu.irc .ui-widget-header>div{font-size:smaller;padding:6px 24px;opacity:.7} +.ui-menu hr.ui-menu-item-wrapper{height:1px;background:#aaa;margin:0;padding:0;border:0} +.ui-menu li.key-container div.ui-state-active:hover{background-color:transparent;cursor:default} +.ui-menu button.menu-vkey-button{display:inline-block;border-radius:10px;border:2px solid #01a982;padding:5px;height:inherit;min-width:38px;margin:2px;background:0 0;font-size:12px;color:#000} +.ui-dialog-titlebar-close svg{stroke:#000!important;display:block!important} +.videoContainer #vm-url-form .form-field{display:block;border:1px solid rgba(0,0,0,.15)} +.videoContainer #vm-url-form .form-field--error{border:1px solid #f04953} +.videoContainer #vm-url-form .form-field__error{color:#f04953;float:right} +.videoContainer #vm-url-form .form-field__label{color:#000;float:left} +.videoContainer #vm-url-form input{color:#333} +.videoContainer .ui-dialog-titlebar{display:block!important} +.videoContainer .ui-dialog-title{float:left!important;text-align:left!important;position:relative!important} +.ui-dialog.hrc-dialog-window{border:none!important;outline:0!important;padding:0;background:0 0} +.irc-dialog{display:block!important} +.irc-statusbar{position:absolute;bottom:0;left:0;height:24px;line-height:12px;width:100%;font-size:12px;font-weight:700;font-family:Metric,Arial,san-serif;padding:2px 10px 2px 10px;background:#1F1F1F;background:linear-gradient(top,#242424 0,#1F1F1F 95%,transparent 100%);background:-moz-linear-gradient(top,#242424 0,#1F1F1F 95%,transparent 100%);background:-webkit-linear-gradient(top,#242424 0,#1F1F1F 95%,transparent 100%);background:-o-linear-gradient(top,#242424 0,#1F1F1F 95%,transparent 100%);opacity:.9;color:#ccc;border-bottom-left-radius:10px;border-bottom-right-radius:10px;white-space:nowrap} +.irc-canvas{width:100%;background:#000} +.videoContainer .irc-canvas{height:calc(100% - 24px);margin-bottom:24px} +.videoContainer.statusbar--off .irc-canvas{height:100%;margin-bottom:0} +.videoContainer .irc-statusbar{display:flex;justify-content:space-between;flex-direction:row} +.videoContainer.statusbar--off .irc-statusbar{display:none} +.status-panel{display:inline-block;padding:2px 5px 2px 5px;cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none} +.status-panel>span{margin:2px 5px 2px 5px} +.status-panel .group1{margin-right:1px;margin-left:1px} +.status-panel span.vm-activity svg{height:14px;width:14px} +.status-panel span.vm-activity.vm-active circle{fill:#00FF7F} +.status-panel span.power-state svg{height:14px;width:14px;stroke:#ccc} +.status-panel span.health-state svg{height:14px;width:14px} +.status-panel span.screen-capture{margin-right:10px;cursor:pointer;padding:0} +.status-panel span.screen-capture svg{height:14px;width:16px} +.status-panel span.screen-capture svg:hover{stroke:#ccc!important} +.status-panel span.encryption{color:#ccc;margin-right:24px;margin-left:0} +.status-panel span.encryption svg{width:14px;height:14px;margin:0} +.status-resolution{width:100px} +.status-text{width:auto;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text} +.status-icons{width:auto} +.pwrMenuIcon{width:24px;height:24px;border:0;margin:10px 5px 0 0;float:left} +.pwrOff .ui-menu-item-wrapper,.pwrOn .ui-menu-item-wrapper{padding:5px 24px} \ No newline at end of file diff --git a/public/hpilo/css/jquery-ui.css b/public/hpilo/css/jquery-ui.css new file mode 100644 index 0000000..e2b12ad --- /dev/null +++ b/public/hpilo/css/jquery-ui.css @@ -0,0 +1,386 @@ +/*! jQuery UI - v1.10.3 - 2013-05-09 +* http://jqueryui.com +* Includes: jquery.ui.core.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.menu.css, jquery.ui.progressbar.css, jquery.ui.slider.css, jquery.ui.spinner.css, jquery.ui.tabs.css, jquery.ui.tooltip.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cddff0&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=inset_soft&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px +* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */ +.ui-helper-hidden{display:none} +.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px} +.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none} +.ui-helper-clearfix:after,.ui-helper-clearfix:before{content:"";display:table;border-collapse:collapse} +.ui-helper-clearfix:after{clear:both} +.ui-helper-clearfix{min-height:0} +.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)} +.ui-front{z-index:100} +.ui-state-disabled{cursor:default!important} +.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat} +.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%} +.ui-resizable{position:relative} +.ui-resizable-handle{position:absolute;font-size:.1px;display:block} +.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none} +.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0} +.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0} +.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%} +.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%} +.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px} +.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px} +.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px} +.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px} +.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted #000} +.ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin-top:2px;padding:.5em .5em .5em .7em;min-height:0} +.ui-accordion .ui-accordion-icons{padding-left:2.2em} +.ui-accordion .ui-accordion-noicons{padding-left:.7em} +.ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em} +.ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px} +.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto} +.ui-autocomplete{position:absolute;top:0;left:0;cursor:default} +.ui-button{display:inline-block;position:relative;padding:0;line-height:normal;margin-right:.1em;cursor:pointer;vertical-align:middle;text-align:center;overflow:visible} +.ui-button,.ui-button:active,.ui-button:hover,.ui-button:link,.ui-button:visited{text-decoration:none} +.ui-button-icon-only{width:2.2em} +button.ui-button-icon-only{width:2.4em} +.ui-button-icons-only{width:3.4em} +button.ui-button-icons-only{width:3.7em} +.ui-button .ui-button-text{display:block;line-height:normal} +.ui-button-text-only .ui-button-text{padding:.4em 1em} +.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px} +.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em} +.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em} +.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em} +input.ui-button{padding:.4em 1em} +.ui-button-icon-only .ui-icon,.ui-button-icons-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon{position:absolute;top:50%;margin-top:-8px} +.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px} +.ui-button-icons-only .ui-button-icon-primary,.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary{left:.5em} +.ui-button-icons-only .ui-button-icon-secondary,.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary{right:.5em} +.ui-buttonset{margin-right:7px} +.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em} +button.ui-button::-moz-focus-inner,input.ui-button::-moz-focus-inner{border:0;padding:0} +.ui-datepicker{width:17em;padding:.2em .2em 0;display:none} +.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0} +.ui-datepicker .ui-datepicker-next,.ui-datepicker .ui-datepicker-prev{position:absolute;top:2px;width:1.8em;height:1.8em} +.ui-datepicker .ui-datepicker-next-hover,.ui-datepicker .ui-datepicker-prev-hover{top:1px} +.ui-datepicker .ui-datepicker-prev{left:2px} +.ui-datepicker .ui-datepicker-next{right:2px} +.ui-datepicker .ui-datepicker-prev-hover{left:1px} +.ui-datepicker .ui-datepicker-next-hover{right:1px} +.ui-datepicker .ui-datepicker-next span,.ui-datepicker .ui-datepicker-prev span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px} +.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center} +.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0} +.ui-datepicker select.ui-datepicker-month-year{width:100%} +.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%} +.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em} +.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:700;border:0} +.ui-datepicker td{border:0;padding:1px} +.ui-datepicker td a,.ui-datepicker td span{display:block;padding:.2em;text-align:right;text-decoration:none} +.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0} +.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible} +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left} +.ui-datepicker.ui-datepicker-multi{width:auto} +.ui-datepicker-multi .ui-datepicker-group{float:left} +.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em} +.ui-datepicker-multi-2 .ui-datepicker-group{width:50%} +.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%} +.ui-datepicker-multi-4 .ui-datepicker-group{width:25%} +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0} +.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left} +.ui-datepicker-row-break{clear:both;width:100%;font-size:0} +.ui-datepicker-rtl{direction:rtl} +.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto} +.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto} +.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto} +.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto} +.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right} +.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left} +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right} +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px} +.ui-dialog{position:absolute;top:0;left:0;padding:.2em;outline:0} +.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative} +.ui-dialog .ui-dialog-title{float:left;margin:.1em 0;white-space:nowrap;width:90%;overflow:hidden;text-overflow:ellipsis} +.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:21px;min-width:21px;max-width:21px;margin:-10px 0 0 0;padding:1px;height:20px} +.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:0 0;overflow:auto} +.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin-top:.5em;padding:.3em 1em .5em .4em} +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right} +.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer} +.ui-dialog .ui-resizable-se{width:12px;height:12px;right:-5px;bottom:-5px;background-position:16px 16px} +.ui-draggable .ui-dialog-titlebar{cursor:move} +.ui-menu{list-style:none;padding:2px;margin:0;display:block;outline:0} +.ui-menu .ui-menu{margin-top:-3px;position:absolute} +.ui-menu .ui-menu-item{margin:0;padding:0;width:100%} +.ui-menu .ui-menu-divider{margin:5px -2px 5px -2px;height:0;font-size:0;line-height:0;border-width:1px 0 0 0} +.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:2px .4em;line-height:1.5;min-height:0;font-weight:400} +.ui-menu .ui-menu-item a.ui-state-active,.ui-menu .ui-menu-item a.ui-state-focus{font-weight:400;margin:-1px} +.ui-menu .ui-state-disabled{font-weight:400;margin:.4em 0 .2em;line-height:1.5} +.ui-menu .ui-state-disabled a{cursor:default} +.ui-menu-icons{position:relative} +.ui-menu-icons .ui-menu-item a{position:relative;padding-left:2em} +.ui-menu .ui-icon{position:absolute;top:.2em;left:.2em} +.ui-menu .ui-menu-icon{position:static;float:right} +.ui-progressbar{height:2em;text-align:left;overflow:hidden;background:#E3E9EE;background-color:#E3E9EE} +.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%;background:#003467;background-image:-ms-linear-gradient(top left,#7591AC 0,#5E7A95 30%,#003467 100%);background-image:-moz-linear-gradient(top left,#7591AC 0,#5E7A95 30%,#003467 100%);background-image:-o-linear-gradient(top left,#7591AC 0,#5E7A95 30%,#003467 100%);background-image:-webkit-gradient(linear,left top,right bottom,color-stop(0,#7591AC),color-stop(.3,#5E7A95),color-stop(1,#003467));background-image:-webkit-linear-gradient(top left,#7591AC 0,#5E7A95 30%,#003467 100%);background-image:linear-gradient(top left,#7591AC 0,#5E7A95 30%,#003467 100%)} +.ui-progressbar .ui-progressbar-overlay{background:url(images/animated-overlay.gif);height:100%;filter:alpha(opacity=25);opacity:.25} +.ui-progressbar-indeterminate .ui-progressbar-value{background-image:none} +.ui-slider{position:relative;text-align:left} +.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default} +.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0} +.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit} +.ui-slider-horizontal{height:.8em} +.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em} +.ui-slider-horizontal .ui-slider-range{top:0;height:100%} +.ui-slider-horizontal .ui-slider-range-min{left:0} +.ui-slider-horizontal .ui-slider-range-max{right:0} +.ui-slider-vertical{width:.8em;height:100px} +.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em} +.ui-slider-vertical .ui-slider-range{left:0;width:100%} +.ui-slider-vertical .ui-slider-range-min{bottom:0} +.ui-slider-vertical .ui-slider-range-max{top:0} +.ui-spinner{position:relative;display:inline-block;overflow:hidden;padding:0;vertical-align:middle} +.ui-spinner-input{border:none;background:0 0;color:inherit;padding:0;margin:.2em 0;vertical-align:middle;margin-left:.4em;margin-right:22px} +.ui-spinner-button{width:16px;height:50%;font-size:.5em;padding:0;margin:0;text-align:center;position:absolute;cursor:default;display:block;overflow:hidden;right:0} +.ui-spinner a.ui-spinner-button{border-top:none;border-bottom:none;border-right:none} +.ui-spinner .ui-icon{position:absolute;margin-top:-8px;top:50%;left:0} +.ui-spinner-up{top:0} +.ui-spinner-down{bottom:0} +.ui-spinner .ui-icon-triangle-1-s{background-position:-65px -16px} +.ui-tabs{position:relative;padding:.2em 0;zoom:1} +.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0} +.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:1px;margin:0 .2em 1px 0;border-bottom:0!important;padding:0;white-space:nowrap} +.ui-tabs .ui-tabs-nav li a{float:left;padding:.5em 1em;text-decoration:none} +.ui-tabs .ui-tabs-nav li.ui-tabs-selected{margin-bottom:0;padding-bottom:1px} +.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-state-processing a,.ui-tabs .ui-tabs-nav li.ui-tabs-selected a{cursor:text} +.ui-tabs .ui-tabs-nav li a,.ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a{cursor:pointer} +.ui-tabs .ui-tabs-hide{display:none!important} +.ui-tabs{position:absolute;top:38px;bottom:7px;left:0;right:0} +.ui-tabs .ui-widget-header{background:0 0;height:auto;border:0} +.ui-tabs .ui-tabs-nav{padding:0} +.ui-tabs .ui-tabs-nav li{top:0} +.ui-tabs .ui-tabs-panel{position:absolute;top:28px;left:0;right:0;bottom:0;padding:0;border-width:1px} +.ui-tabs .ui-tabs-nav .ui-state-default{background-color:#B8C5D1;background-image:-ms-linear-gradient(bottom,#FFF 0,#B8C5D1 94%,#FFF 98%);background-image:-moz-linear-gradient(bottom,#FFF 0,#B8C5D1 94%,#FFF 98%);background-image:-o-linear-gradient(bottom,#FFF 0,#B8C5D1 94%,#FFF 98%);background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0,#FFF),color-stop(.94,#B8C5D1),color-stop(.98,#FFF));background-image:-webkit-linear-gradient(bottom,#FFF 0,#B8C5D1 94%,#FFF 98%);background-image:linear-gradient(bottom,#FFF 0,#B8C5D1 94%,#FFF 98%);height:26px} +.ui-tabs .ui-tabs-nav .ui-state-hover{background-color:#B1CEEB;background-image:-ms-linear-gradient(bottom,#FFF 0,#B1CEEB 94%,#FFF 98%);background-image:-moz-linear-gradient(bottom,#FFF 0,#B1CEEB 94%,#FFF 98%);background-image:-o-linear-gradient(bottom,#FFF 0,#B1CEEB 94%,#FFF 98%);background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0,#FFF),color-stop(.94,#B1CEEB),color-stop(.98,#FFF));background-image:-webkit-linear-gradient(bottom,#FFF 0,#B1CEEB 94%,#FFF 98%);background-image:linear-gradient(bottom,#FFF 0,#B1CEEB 94%,#FFF 98%);color:#036;height:26px} +.ui-tabs .ui-tabs-nav .ui-state-active{background-color:#FFF;background-image:-ms-linear-gradient(bottom,#FFF 0,#FFF 89%,#ffc037 91%);background-image:-moz-linear-gradient(bottom,#FFF 0,#FFF 89%,#ffc037 91%);background-image:-o-linear-gradient(bottom,#FFF 0,#FFF 89%,#ffc037 91%);background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0,#FFF),color-stop(.89,#FFF),color-stop(.91,#ffc037));background-image:-webkit-linear-gradient(bottom,#FFF 0,#FFF 89%,#ffc037 91%);background-image:linear-gradient(bottom,#FFF 0,#FFF 89%,#ffc037 91%);color:#333;border-color:#839CB4;height:26px;border-bottom:1px solid #FFF;z-index:1} +.ui-tabs .ui-tabs-nav li.ui-state-active a{cursor:pointer;border-top:2px solid #ffc037;margin-left:2px;margin-right:2px;padding-top:4px;padding-bottom:6px} +.ui-tooltip{padding:8px;position:absolute;z-index:9999;max-width:300px;-webkit-box-shadow:0 0 5px #aaa;box-shadow:0 0 5px #aaa} +body .ui-tooltip{border-width:2px} +.ui-widget{font-family:Arial,sans-serif,Verdana,Helvetica,LuzSans Book,HPFutura Book,Futura Bk;font-size:1.1em} +.ui-widget .ui-widget{font-size:1em} +.ui-widget-content{border:1px solid #7591ac;background:#fff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;color:#222} +.ui-widget-content a{color:#222} +.ui-widget-header{border:0;border-bottom:1px solid #3f658c;background:#cddff0;background-image:-ms-linear-gradient(top,#cddff0 0,#a2c2e4 100%);background-image:-moz-linear-gradient(top,#cddff0 0,#a2c2e4 100%);background-image:-o-linear-gradient(top,#cddff0 0,#a2c2e4 100%);background-image:-webkit-gradient(linear,left top,left bottom,color-stop(0,#cddff0),color-stop(1,#a2c2e4));background-image:-webkit-linear-gradient(top,#cddff0 0,#a2c2e4 100%);background-image:linear-gradient(top,#cddff0 0,#a2c2e4 100%);color:#000;font-weight:400;font-family:Arial,sans-serif,Verdana,Helvetica,LuzSans Book,HPFutura Book,Futura Bk;font-size:11pt;height:16px;min-height:16px} +.ui-widget-header a{color:#222} +.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background-color:#B8C5D1;background-image:-ms-linear-gradient(bottom,#FFF 0,#B8C5D1 94%,#FFF 98%);background-image:-moz-linear-gradient(bottom,#FFF 0,#B8C5D1 94%,#FFF 98%);background-image:-o-linear-gradient(bottom,#FFF 0,#B8C5D1 94%,#FFF 98%);background-image:-webkit-gradient(linear,left bottom,left top,color-stop(0,#FFF),color-stop(.94,#B8C5D1),color-stop(.98,#FFF));background-image:-webkit-linear-gradient(bottom,#FFF 0,#B8C5D1 94%,#FFF 98%);background-image:linear-gradient(bottom,#FFF 0,#B8C5D1 94%,#FFF 98%);font-weight:400} +.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none} +.ui-state-focus,.ui-state-hover,.ui-widget-content .ui-state-focus,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-focus,.ui-widget-header .ui-state-hover{border:1px solid #999;background:#dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;font-weight:400;color:#212121} +.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:#212121;text-decoration:none} +.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:400;color:#212121} +.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none} +.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:2px solid #60798D;background:0 0;color:#363636} +.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636} +.ui-state-normal,.ui-widget-content .ui-state-normal,.ui-widget-header .ui-state-normal{border:2px solid #08AA83} +.ui-state-warning,.ui-widget-content .ui-state-warning,.ui-widget-header .ui-state-warning{border:2px solid #FFD144;background:#fbf9ee;color:#363636} +.ui-state-warning a,.ui-widget-content .ui-state-warning a,.ui-widget-header .ui-state-warning a{color:#363636} +.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:2px solid #F04953;background:#fef1ec;color:#F04953} +.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#F04953} +.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#F04953} +.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:700} +.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:400} +.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none} +.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)} +.ui-icon{width:16px;height:16px} +.ui-icon,.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)} +.ui-widget-header .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)} +.ui-state-default .ui-icon{background-image:url(images/ui-icons_888888_256x240.png)} +.ui-state-focus .ui-icon,.ui-state-hover .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)} +.ui-state-active .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)} +.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_2e83ff_256x240.png)} +.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_cd0a0a_256x240.png)} +.ui-icon-blank{background-position:16px 16px} +.ui-icon-caret-1-n{background-position:0 0} +.ui-icon-caret-1-ne{background-position:-16px 0} +.ui-icon-caret-1-e{background-position:-32px 0} +.ui-icon-caret-1-se{background-position:-48px 0} +.ui-icon-caret-1-s{background-position:-64px 0} +.ui-icon-caret-1-sw{background-position:-80px 0} +.ui-icon-caret-1-w{background-position:-96px 0} +.ui-icon-caret-1-nw{background-position:-112px 0} +.ui-icon-caret-2-n-s{background-position:-128px 0} +.ui-icon-caret-2-e-w{background-position:-144px 0} +.ui-icon-triangle-1-n{background-position:0 -16px} +.ui-icon-triangle-1-ne{background-position:-16px -16px} +.ui-icon-triangle-1-e{background-position:-32px -16px} +.ui-icon-triangle-1-se{background-position:-48px -16px} +.ui-icon-triangle-1-s{background-position:-64px -16px} +.ui-icon-triangle-1-sw{background-position:-80px -16px} +.ui-icon-triangle-1-w{background-position:-96px -16px} +.ui-icon-triangle-1-nw{background-position:-112px -16px} +.ui-icon-triangle-2-n-s{background-position:-128px -16px} +.ui-icon-triangle-2-e-w{background-position:-144px -16px} +.ui-icon-arrow-1-n{background-position:0 -32px} +.ui-icon-arrow-1-ne{background-position:-16px -32px} +.ui-icon-arrow-1-e{background-position:-32px -32px} +.ui-icon-arrow-1-se{background-position:-48px -32px} +.ui-icon-arrow-1-s{background-position:-64px -32px} +.ui-icon-arrow-1-sw{background-position:-80px -32px} +.ui-icon-arrow-1-w{background-position:-96px -32px} +.ui-icon-arrow-1-nw{background-position:-112px -32px} +.ui-icon-arrow-2-n-s{background-position:-128px -32px} +.ui-icon-arrow-2-ne-sw{background-position:-144px -32px} +.ui-icon-arrow-2-e-w{background-position:-160px -32px} +.ui-icon-arrow-2-se-nw{background-position:-176px -32px} +.ui-icon-arrowstop-1-n{background-position:-192px -32px} +.ui-icon-arrowstop-1-e{background-position:-208px -32px} +.ui-icon-arrowstop-1-s{background-position:-224px -32px} +.ui-icon-arrowstop-1-w{background-position:-240px -32px} +.ui-icon-arrowthick-1-n{background-position:0 -48px} +.ui-icon-arrowthick-1-ne{background-position:-16px -48px} +.ui-icon-arrowthick-1-e{background-position:-32px -48px} +.ui-icon-arrowthick-1-se{background-position:-48px -48px} +.ui-icon-arrowthick-1-s{background-position:-64px -48px} +.ui-icon-arrowthick-1-sw{background-position:-80px -48px} +.ui-icon-arrowthick-1-w{background-position:-96px -48px} +.ui-icon-arrowthick-1-nw{background-position:-112px -48px} +.ui-icon-arrowthick-2-n-s{background-position:-128px -48px} +.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px} +.ui-icon-arrowthick-2-e-w{background-position:-160px -48px} +.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px} +.ui-icon-arrowthickstop-1-n{background-position:-192px -48px} +.ui-icon-arrowthickstop-1-e{background-position:-208px -48px} +.ui-icon-arrowthickstop-1-s{background-position:-224px -48px} +.ui-icon-arrowthickstop-1-w{background-position:-240px -48px} +.ui-icon-arrowreturnthick-1-w{background-position:0 -64px} +.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px} +.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px} +.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px} +.ui-icon-arrowreturn-1-w{background-position:-64px -64px} +.ui-icon-arrowreturn-1-n{background-position:-80px -64px} +.ui-icon-arrowreturn-1-e{background-position:-96px -64px} +.ui-icon-arrowreturn-1-s{background-position:-112px -64px} +.ui-icon-arrowrefresh-1-w{background-position:-128px -64px} +.ui-icon-arrowrefresh-1-n{background-position:-144px -64px} +.ui-icon-arrowrefresh-1-e{background-position:-160px -64px} +.ui-icon-arrowrefresh-1-s{background-position:-176px -64px} +.ui-icon-arrow-4{background-position:0 -80px} +.ui-icon-arrow-4-diag{background-position:-16px -80px} +.ui-icon-extlink{background-position:-32px -80px} +.ui-icon-newwin{background-position:-48px -80px} +.ui-icon-refresh{background-position:-64px -80px} +.ui-icon-shuffle{background-position:-80px -80px} +.ui-icon-transfer-e-w{background-position:-96px -80px} +.ui-icon-transferthick-e-w{background-position:-112px -80px} +.ui-icon-folder-collapsed{background-position:0 -96px} +.ui-icon-folder-open{background-position:-16px -96px} +.ui-icon-document{background-position:-32px -96px} +.ui-icon-document-b{background-position:-48px -96px} +.ui-icon-note{background-position:-64px -96px} +.ui-icon-mail-closed{background-position:-80px -96px} +.ui-icon-mail-open{background-position:-96px -96px} +.ui-icon-suitcase{background-position:-112px -96px} +.ui-icon-comment{background-position:-128px -96px} +.ui-icon-person{background-position:-144px -96px} +.ui-icon-print{background-position:-160px -96px} +.ui-icon-trash{background-position:-176px -96px} +.ui-icon-locked{background-position:-192px -96px} +.ui-icon-unlocked{background-position:-208px -96px} +.ui-icon-bookmark{background-position:-224px -96px} +.ui-icon-tag{background-position:-240px -96px} +.ui-icon-home{background-position:0 -112px} +.ui-icon-flag{background-position:-16px -112px} +.ui-icon-calendar{background-position:-32px -112px} +.ui-icon-cart{background-position:-48px -112px} +.ui-icon-pencil{background-position:-64px -112px} +.ui-icon-clock{background-position:-80px -112px} +.ui-icon-disk{background-position:-96px -112px} +.ui-icon-calculator{background-position:-112px -112px} +.ui-icon-zoomin{background-position:-128px -112px} +.ui-icon-zoomout{background-position:-144px -112px} +.ui-icon-search{background-position:-160px -112px} +.ui-icon-wrench{background-position:-176px -112px} +.ui-icon-gear{background-position:-192px -112px} +.ui-icon-heart{background-position:-208px -112px} +.ui-icon-star{background-position:-224px -112px} +.ui-icon-link{background-position:-240px -112px} +.ui-icon-cancel{background-position:0 -128px} +.ui-icon-plus{background-position:-16px -128px} +.ui-icon-plusthick{background-position:-32px -128px} +.ui-icon-minus{background-position:-48px -128px} +.ui-icon-minusthick{background-position:-64px -128px} +.ui-icon-close{background-position:-80px -128px} +.ui-icon-closethick{background-position:-96px -128px} +.ui-icon-key{background-position:-112px -128px} +.ui-icon-lightbulb{background-position:-128px -128px} +.ui-icon-scissors{background-position:-144px -128px} +.ui-icon-clipboard{background-position:-160px -128px} +.ui-icon-copy{background-position:-176px -128px} +.ui-icon-contact{background-position:-192px -128px} +.ui-icon-image{background-position:-208px -128px} +.ui-icon-video{background-position:-224px -128px} +.ui-icon-script{background-position:-240px -128px} +.ui-icon-alert{background-position:0 -144px} +.ui-icon-info{background-position:-16px -144px} +.ui-icon-notice{background-position:-32px -144px} +.ui-icon-help{background-position:-48px -144px} +.ui-icon-check{background-position:-64px -144px} +.ui-icon-bullet{background-position:-80px -144px} +.ui-icon-radio-on{background-position:-96px -144px} +.ui-icon-radio-off{background-position:-112px -144px} +.ui-icon-pin-w{background-position:-128px -144px} +.ui-icon-pin-s{background-position:-144px -144px} +.ui-icon-play{background-position:0 -160px} +.ui-icon-pause{background-position:-16px -160px} +.ui-icon-seek-next{background-position:-32px -160px} +.ui-icon-seek-prev{background-position:-48px -160px} +.ui-icon-seek-end{background-position:-64px -160px} +.ui-icon-seek-start{background-position:-80px -160px} +.ui-icon-seek-first{background-position:-80px -160px} +.ui-icon-stop{background-position:-96px -160px} +.ui-icon-eject{background-position:-112px -160px} +.ui-icon-volume-off{background-position:-128px -160px} +.ui-icon-volume-on{background-position:-144px -160px} +.ui-icon-power{background-position:0 -176px} +.ui-icon-signal-diag{background-position:-16px -176px} +.ui-icon-signal{background-position:-32px -176px} +.ui-icon-battery-0{background-position:-48px -176px} +.ui-icon-battery-1{background-position:-64px -176px} +.ui-icon-battery-2{background-position:-80px -176px} +.ui-icon-battery-3{background-position:-96px -176px} +.ui-icon-circle-plus{background-position:0 -192px} +.ui-icon-circle-minus{background-position:-16px -192px} +.ui-icon-circle-close{background-position:-32px -192px} +.ui-icon-circle-triangle-e{background-position:-48px -192px} +.ui-icon-circle-triangle-s{background-position:-64px -192px} +.ui-icon-circle-triangle-w{background-position:-80px -192px} +.ui-icon-circle-triangle-n{background-position:-96px -192px} +.ui-icon-circle-arrow-e{background-position:-112px -192px} +.ui-icon-circle-arrow-s{background-position:-128px -192px} +.ui-icon-circle-arrow-w{background-position:-144px -192px} +.ui-icon-circle-arrow-n{background-position:-160px -192px} +.ui-icon-circle-zoomin{background-position:-176px -192px} +.ui-icon-circle-zoomout{background-position:-192px -192px} +.ui-icon-circle-check{background-position:-208px -192px} +.ui-icon-circlesmall-plus{background-position:0 -208px} +.ui-icon-circlesmall-minus{background-position:-16px -208px} +.ui-icon-circlesmall-close{background-position:-32px -208px} +.ui-icon-squaresmall-plus{background-position:-48px -208px} +.ui-icon-squaresmall-minus{background-position:-64px -208px} +.ui-icon-squaresmall-close{background-position:-80px -208px} +.ui-icon-grip-dotted-vertical{background-position:0 -224px} +.ui-icon-grip-dotted-horizontal{background-position:-16px -224px} +.ui-icon-grip-solid-vertical{background-position:-32px -224px} +.ui-icon-grip-solid-horizontal{background-position:-48px -224px} +.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px} +.ui-icon-grip-diagonal-se{background-position:-80px -224px} +.ui-corner-all,.ui-corner-left,.ui-corner-tl,.ui-corner-top{border-top-left-radius:4px} +.ui-corner-all,.ui-corner-right,.ui-corner-top,.ui-corner-tr{border-top-right-radius:4px} +.ui-corner-all,.ui-corner-bl,.ui-corner-bottom,.ui-corner-left{border-bottom-left-radius:4px} +.ui-corner-all,.ui-corner-bottom,.ui-corner-br,.ui-corner-right{border-bottom-right-radius:4px} +.ui-widget-overlay{background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)} +.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px} +.ui-state-error .statusDisplay,.ui-state-highlight .statusDisplay,.ui-state-normal .statusDisplay,.ui-state-warning .statusDisplay{background:url(../images/icon_status_01_critical.svg) no-repeat top left;background-size:contain;background-position:15px 11px;background-size:32px 32px;min-height:52px;height:52px} +.ui-state-warning .statusDisplay{background:url(../images/icon_status_04_warning.svg) no-repeat top left;background-position:15px 11px;background-size:32px 32px} +.ui-state-highlight .statusDisplay{background:url(../images/icon_status_06_informational.svg) no-repeat top left;background-position:15px 11px;background-size:32px 32px} +.ui-state-normal .statusDisplay{background:url(../images/icon_status_08_normal.svg) no-repeat top left;background-position:15px 11px;background-size:32px 32px} +span.status-icon{display:block} +span.status-icon.status-icon-power{background:url(../images/icon_power.svg) no-repeat top left;background-size:contain} +span.status-icon.status-icon-error{background:url(../images/icon_status_01_critical.svg) no-repeat top left;background-size:contain} +span.status-icon.status-icon-ok{background:url(../images/icon_status_08_normal.svg) no-repeat top left;background-size:contain} +span.status-icon.status-icon-warning{background:url(../images/icon_status_04_warning.svg) no-repeat top left;background-size:contain} +span.status-icon.status-icon-info{background:url(../images/icon_status_06_informational.svg) no-repeat top left;background-size:contain} +span.status-icon.status-icon-unknown{background:url(../images/icon_status_07_unknown.svg) no-repeat top left;background-size:contain} +span.status-icon.status-icon-disabled{background:url(../images/icon_status_05_disabled.svg) no-repeat top left;background-size:contain} +span.status-icon--small{background-position-x:1px;background-position-y:1px;background-size:12px 12px;min-height:12px;height:12px;width:16px;display:block;margin-left:auto;margin-right:auto} \ No newline at end of file diff --git a/public/hpilo/css/msgbox.css b/public/hpilo/css/msgbox.css new file mode 100644 index 0000000..e6e1331 --- /dev/null +++ b/public/hpilo/css/msgbox.css @@ -0,0 +1,21 @@ +.msgbox-overlay{z-index:2147483647;overflow:hidden;width:100vw;height:100vh;background-color:#000;position:absolute;top:0;left:0;display:none} +.msgbox-overlay-medium{opacity:.5} +.msgbox-overlay-light{opacity:.2} +.msgbox-wrapper div{display:block} +.msgbox-wrapper{z-index:2147483647;min-width:100px;min-height:60px;max-width:100vw;max-height:100vh;width:525px;height:auto;border:1px solid #000;background:#fff;position:absolute;display:none;padding:5px 15px 5px 15px;box-shadow:0 0 8px #444;border-radius:4px} +.msgbox-contents{display:block;padding:10px} +.msgbox-header-row{text-align:left;margin:0 0 10px 0} +.msgbox-close:hover{outline:1px solid #999;cursor:pointer} +.msgbox-close{float:right} +.msgbox-close svg{margin:6px!important} +.msgbox-icon{display:block!important;float:left!important;height:28px;width:28px;overflow:visible;padding-top:4px} +.msgbox-icon svg{overflow:visible!important} +.msgbox-title{color:#000!important;display:inline-block!important;line-height:inherit!important;vertical-align:text-top;margin-left:5px} +.msgbox-text{color:#000!important;font-size:1.1rem;line-height:1.35em;text-align:left;margin-top:20px;padding:2px;display:block!important;overflow:auto;white-space:wrap} +.msgbox-text svg.control-icon{max-height:36px!important;max-width:36px!important;margin-right:10px;display:inline-block!important} +.msgbox-text p{margin-top:10px;margin-bottom:10px;color:#000!important;line-height:1.25em} +.msgbox-timer-msg{color:#000!important;text-align:right;margin:10px 0 10px 0} +.msgbox-button-row{display:block!important;text-align:right;margin-top:20px;margin-bottom:10px} +[class*=background-color-index-]:not([class*=background-color-index-accent-1]):not([class*=background-color-index-accent-3]):not([class*=background-color-index-light]):not([class*=background-color-index-warning]):not([class*=background-color-index-disabled]):not([class*=background-color-index-unknown]) .button:not(.button--disabled):not(.button--plain){border-color:#01a982} +[class*=background-color-index-]:not([class*=background-color-index-accent-1]):not([class*=background-color-index-accent-3]):not([class*=background-color-index-light]):not([class*=background-color-index-warning]):not([class*=background-color-index-disabled]):not([class*=background-color-index-unknown]) .button:not(.button--disabled):not(.button--plain):not(.button--fill):hover{box-shadow:0 0 0 2px #01a982} +[class*=background-color-index-]:not([class*=background-color-index-accent-1]):not([class*=background-color-index-accent-3]):not([class*=background-color-index-light]):not([class*=background-color-index-warning]):not([class*=background-color-index-disabled]):not([class*=background-color-index-unknown]) .button:not(.button--disabled):not(.button--plain):focus{border-color:#2ad2c9;box-shadow:0 0 1px 1px #2ad2c9} \ No newline at end of file diff --git a/public/hpilo/html/application.html b/public/hpilo/html/application.html new file mode 100644 index 0000000..ecb145b --- /dev/null +++ b/public/hpilo/html/application.html @@ -0,0 +1,9 @@ +HTTP/1.1 404 Not Found +Content-Type: text/html +Content-Security-Policy: script-src 'self' 'unsafe-inline' 'unsafe-eval'; +Date: Mon, 10 Jul 2023 09:55:29 GMT +X-Content-Type-Options: nosniff +X-Frame-Options: sameorigin +X-XSS-Protection: 1; mode=block +Content-Length: 0 + diff --git a/public/hpilo/js/VMconnection.js b/public/hpilo/js/VMconnection.js new file mode 100644 index 0000000..4d0174c --- /dev/null +++ b/public/hpilo/js/VMconnection.js @@ -0,0 +1,390 @@ +function init() { + window.File && window.FileReader && window.FileList && window.Blob || $.log("The File APIs are not fully supported in this browser."); +} + +function VMconnection(vm_conn, id) { + function onOpen(evt) { + sendClientHello(); + } + function onClose(evt) { + -1 !== tmrId && (clearInterval(tmrId), tmrId = -1); + } + function onError(evt) { + $.log(evt.data); + } + function sendClientHello() { + client_hello[0] = 16, client_hello[1] = devType, setupSessionKey(), that.doSend(client_hello); + } + function setupSessionKey() { + for (var sessionKey = document.cookie.replace(/(?:(?:^|.*;\s*)sessionKey\s*\=\s*([^;]*).*$)|^.*$/, "$1"), i = 0; i < sessionKey.length; i++) client_hello[2 + i] = sessionKey.charCodeAt(i); + } + function keepalive(ka) { + const KEEPALIVE = 2; + ka ? flags |= KEEPALIVE : flags &= -3; + } + function disconnect(dc) { + const DISCONNECT = 4; + dc ? flags |= DISCONNECT : flags &= -5; + } + this.file, this.media_sz, this.fdd_state = fddStateEnum.MEDIA_NOT_PRESENT, this.event_state = 0, + this.media, this.wsUri = iLO.getBaseUrl("", "wss:") + "wss/vmport"; + var websocket, flags, devType = vm_conn, vmConnId = id, client_hello = new Uint8Array(34), tmrId = -1, that = this; + this.getDevType = function() { + return devType; + }, this.getVmConnId = function() { + return vmConnId; + }, this.getWebsocket = function() { + return websocket; + }, this.getTmrId = function() { + return tmrId; + }, this.setTmrId = function(id) { + tmrId = id; + }, this.setMedia_sz = function(size) { + this.media_sz = size; + }, this.setFile = function(f) { + this.file = f; + }, this.createWebSocket = function() { + if (websocket && iLO.isFunction(websocket.close)) try { + websocket.onclose = function() {}, websocket.close(); + } catch (e) {} + try { + websocket = new WebSocket(this.wsUri), websocket.binaryType = "arraybuffer", websocket.onopen = function(evt) { + onOpen(evt); + }, websocket.onmessage = function(evt) { + that.onMessage(evt); + }, websocket.onerror = function(evt) { + onError(evt); + }, websocket.onclose = function(evt) { + onClose(evt); + }; + } catch (e) { + var dlgMsg = iLO.translateString("IRC.error.newWebsocketEx") + "
Error: " + e.Message, msgBox = { + titleKey: "IRC.error.newWebsocketExTitle", + icon: myIcons.critical, + message: dlgMsg + }; + return void iLO.alert(msgBox); + } + }, this.client_test_unit_ready = function() { + this.fdd_state === fddStateEnum.MEDIA_NOT_PRESENT ? that.sendRespHeader(2, 58, 0, 0) : this.fdd_state === fddStateEnum.MEDIA_CHANGED ? (that.sendRespHeader(6, 40, 0, 0), + this.fdd_state = 2) : that.sendRespHeader(0, 0, 0, 0); + }, this.sendKeepAlive = function() { + keepalive(!0), that.sendRespHeader(0, 0, 0, 0), keepalive(!1); + }, this.closeVMconnection = function() { + websocket && 1 === websocket.readyState && (showIrcToast({ + text: iLO.translateString("vm.processVMEject"), + type: "ok", + position: "bottom-right" + }), disconnect(!0), that.sendRespHeader(0, 0, 0, 0), disconnect(!1)); + }, this.sendRespHeader = function(sense_key, asc, ascq, length) { + var magic = 195936478, resp_hdr = new Uint8Array(16); + resp_hdr[0] = 255 & magic, resp_hdr[1] = magic >> 8 & 255, resp_hdr[2] = magic >> 16 & 255, + resp_hdr[3] = magic >> 24 & 255, resp_hdr[4] = 255 & flags, resp_hdr[5] = flags >> 8 & 255, + resp_hdr[6] = flags >> 16 & 255, resp_hdr[7] = flags >> 24 & 255, resp_hdr[8] = this.media, + resp_hdr[9] = sense_key, resp_hdr[10] = asc, resp_hdr[11] = ascq, resp_hdr[12] = 255 & length, + resp_hdr[13] = length >> 8 & 255, resp_hdr[14] = length >> 16 & 255, resp_hdr[15] = length >> 24 & 255, + that.doSend(resp_hdr); + }, this.doSend = function(message) { + websocket && websocket.send(message); + }; +} + +function VMconnection_fd(vm_conn, id) { + VMconnection.call(this, vm_conn, id), this.buffer = new Uint8Array(131072), this.lba, + this.writeLen; +} + +function ejectDevice(obj) { + var id = $(obj).data("id"); + vm_conn[id].closeVMconnection(); +} + +function imgFileHandler(fileInput) { + var dlgMsg = "", id = $(fileInput).data("id"); + if (/(\.img)$/i.exec(fileInput.value)) vm_conn[id] = new VMconnection_fd(vmConnType.FLOPPY, id), + vm_conn[id].setFile(fileInput.files[0]), vm_conn[id].setMedia_sz(fileInput.files[0].size), + vm_conn[id].createWebSocket(); else if (/(\.iso)$/i.exec(fileInput.value)) vm_conn[id] = new VMconnection(vmConnType.CDROM, id), + vm_conn[id].setFile(fileInput.files[0]), vm_conn[id].setMedia_sz(fileInput.files[0].size), + vm_conn[id].createWebSocket(); else { + dlgMsg = iLO.translateString("IRC.error.UnsupportedFileType"); + var msgBox = { + titleKey: "IRC.title.Denied", + icon: myIcons.critical, + message: dlgMsg, + closeOnClick: !1 + }; + iLO.alert(msgBox); + } +} + +const SCSI_READ_CAPACITY = 37, SCSI_READ_CAPACITIES = 35, SCSI_SEND_DIAGNOSTIC = 29, SCSI_START_STOP_UNIT = 27, SCSI_TEST_UNIT_READY = 0, SCSI_PA_MEDIA_REMOVAL = 30, SCSI_READ_10 = 40, SCSI_READ_12 = 168, SCSI_WRITE_10 = 42, SCSI_WRITE_12 = 170, CDROM_SECTOR_SIZE = 2048, FLOPPY_SECTOR_SIZE = 512, CDROM_MAX_CHUNK_SIZE = 32768, FLOPPY_MAX_CHUNK_SIZE = 32768; + +var fddStateEnum = { + MEDIA_NOT_PRESENT: 0, + MEDIA_CHANGED: 1, + MEDIA_READY: 2 +}, vmConnType = { + FLOPPY: 1, + CDROM: 2, + USB: 3 +}, maxNumVMConn = 10, vm_conn = new Array(maxNumVMConn); + +window.onbeforeunload = function() { + for (var i = 0; maxNumVMConn > i; i++) if ("undefined" != typeof vm_conn[i] && vm_conn[i].getWebsocket() && iLO.isFunction(vm_conn[i].getWebsocket().close)) try { + vm_conn[i].getWebsocket().onclose = function() {}, vm_conn[i].getWebsocket().close(); + } catch (e) {} +}, window.addEventListener("load", init, !1), VMconnection.prototype.onMessage = function(evt) { + var currTmrId = this.getTmrId(); + if (-1 !== currTmrId && (clearInterval(currTmrId), this.setTmrId(-1)), evt.data instanceof Blob) ; else if (evt.data instanceof ArrayBuffer) { + var byteArray = new Uint8Array(evt.data); + if (4 === evt.data.byteLength) { + var status = byteArray[0], zero = byteArray[1], dlgMsg = ""; + if (32 == status && 0 == zero) VMconnection.numDevs++, showIrcToast({ + text: iLO.translateString("vm.imgInserted"), + type: "ok", + position: "bottom-right" + }); else { + switch (status) { + case 33: + dlgMsg = iLO.translateString("IRC.error.DriveInUse"); + break; + + case 34: + dlgMsg = iLO.translateString("IRC.error.InvalidKey"); + break; + + case 35: + dlgMsg = iLO.translateString("IRC.error.MediaNotLicensed"); + break; + + case 36: + dlgMsg = iLO.translateString("IRC.error.KeyExpired"); + break; + + case 37: + dlgMsg = iLO.translateString("IRC.error.DriveNotConfigured"); + break; + + case 38: + dlgMsg = iLO.translateString("IRC.error.MediaPermitRequired"); + break; + + default: + dlgMsg = iLO.translateString("IRC.error.CannotConnectDrive"); + } + if (dlgMsg.length > 0) { + var msgBox = { + titleKey: "IRC.title.UnableToConnect", + icon: myIcons.critical, + message: dlgMsg, + closeOnClick: !1 + }; + iLO.alert(msgBox); + } + } + } else 12 === evt.data.byteLength && this.processSCSIRequest(byteArray); + } + currTmrId = setInterval(this.sendKeepAlive, 2e3), this.setTmrId(currTmrId); +}, VMconnection.prototype.processSCSIRequest = function(byteArray) { + switch (renderer && renderer.onvmactivity && renderer.onvmactivity(), 0 === this.media_sz ? (this.media = 0, + this.fdd_state = fddStateEnum.MEDIA_NOT_PRESENT, this.event_state = 0) : (this.media = 1, + this.fdd_state++, this.fdd_state > fddStateEnum.MEDIA_READY && (this.fdd_state = fddStateEnum.MEDIA_READY), + 4 === this.event_state && (this.event_state = 0), this.event_state++, this.event_state > 2 && (this.event_state = 2)), + byteArray[0]) { + case SCSI_TEST_UNIT_READY: + this.client_test_unit_ready(); + break; + + case SCSI_START_STOP_UNIT: + this.client_start_stop_unit(byteArray); + break; + + case SCSI_PA_MEDIA_REMOVAL: + this.client_pa_media_removal(byteArray); + break; + + case SCSI_READ_CAPACITY: + this.client_read_capacity(); + break; + + case SCSI_READ_10: + case SCSI_READ_12: + this.client_read(byteArray); + break; + + default: + $.log("UNHANDLED SCSI REQUEST: " + byteArray[0]), this.sendRespHeader(5, 36, 0, 0); + } +}, VMconnection.prototype.client_read_capacity = function() { + var sz, data = new Uint8Array(8); + this.fdd_state === fddStateEnum.MEDIA_NOT_PRESENT ? this.sendRespHeader(2, 58, 0, 0) : this.fdd_state === fddStateEnum.MEDIA_CHANGED ? this.sendRespHeader(6, 40, 0, 0) : this.fdd_state === fddStateEnum.MEDIA_READY && (sz = parseInt(this.media_sz / CDROM_SECTOR_SIZE) - 1, + data[0] = sz >> 24 & 255, data[1] = sz >> 16 & 255, data[2] = sz >> 8 & 255, data[3] = sz >> 0 & 255, + data[4] = 0, data[5] = 0, data[6] = 8, data[7] = 0, this.sendRespHeader(0, 0, 0, 8), + this.doSend(data)); +}, VMconnection.prototype.client_read = function(cmd) { + var that = this, t = cmd[0] == SCSI_READ_12 ? 1 : 0, offset = VMconnection.mk_int32(cmd, 2) * CDROM_SECTOR_SIZE, length = t ? VMconnection.mk_int32(cmd, 6) : VMconnection.mk_int16(cmd, 7); + length *= CDROM_SECTOR_SIZE; + var reader = new FileReader(), bytesSent = 0, sendBytes = 0; + if (offset >= 0 && offset + length <= this.media_sz || ($.log("offset out of range."), + this.sendRespHeader(5, 33, 0, 0), length = 0), length > 0 && 131072 >= length) { + reader.onloadend = function(e) { + for (that.sendRespHeader(0, 0, 0, length); length > bytesSent; ) { + sendBytes = Math.min(CDROM_MAX_CHUNK_SIZE, length - bytesSent); + var bytes = new Uint8Array(e.target.result.slice(bytesSent, bytesSent + sendBytes)); + that.doSend(bytes), bytesSent += sendBytes; + } + }, reader.onerror = function(e) { + $.log("reader.onerror", e), that.sendRespHeader(3, 16, 0, 0); + }; + var blob = that.file.slice(offset, offset + length); + reader.readAsArrayBuffer(blob); + } else $.log("Legacy read [not implemented]"); +}, VMconnection.prototype.client_start_stop_unit = function(cmd) { + this.sendRespHeader(0, 0, 0, 0), 2 === (3 & cmd[4]) && (this.fdd_state = fddStateEnum.MEDIA_NOT_PRESENT, + this.event_state = 4, this.closeVMconnection()); +}, VMconnection.prototype.client_pa_media_removal = function(cmd) { + 0 !== (1 & cmd[4]), this.sendRespHeader(0, 0, 0, 0); +}, VMconnection.numDevs = 0, VMconnection.mk_int32 = function(cmd, pos) { + var temp0 = cmd[pos + 0], temp1 = cmd[pos + 1], temp2 = cmd[pos + 2], temp3 = cmd[pos + 3], result = (255 & temp0) << 24 | (255 & temp1) << 16 | (255 & temp2) << 8 | 255 & temp3; + return result; +}, VMconnection.mk_int16 = function(cmd, pos) { + var temp0 = cmd[pos + 0], temp1 = cmd[pos + 1], result = (255 & temp0) << 8 | 255 & temp1; + return result; +}, VMconnection.convertNumArrayToHexString = function(list) { + for (var result = [], i = 0; i < list.length; i++) result.push(list[i].toString(16)); + return result.join(","); +}, VMconnection_fd.prototype.onMessage = function(evt) { + var currTmrId = this.getTmrId(); + if (-1 !== currTmrId && (clearInterval(currTmrId), this.setTmrId(-1)), evt.data instanceof Blob) ; else if (evt.data instanceof ArrayBuffer) { + var byteArray = new Uint8Array(evt.data); + if (4 === evt.data.byteLength) { + var status = byteArray[0], zero = byteArray[1], dlgMsg = ""; + if (32 == status && 0 == zero) VMconnection.numDevs++, showIrcToast({ + text: iLO.translateString("vm.imgInserted"), + type: "ok", + position: "bottom-right" + }); else { + switch (status) { + case 33: + dlgMsg = iLO.translateString("IRC.error.DriveInUse"); + break; + + case 34: + dlgMsg = iLO.translateString("IRC.error.InvalidKey"); + break; + + case 35: + dlgMsg = iLO.translateString("IRC.error.MediaNotLicensed"); + break; + + case 36: + dlgMsg = iLO.translateString("IRC.error.KeyExpired"); + break; + + case 37: + dlgMsg = iLO.translateString("IRC.error.DriveNotConfigured"); + break; + + case 38: + dlgMsg = iLO.translateString("IRC.error.MediaPermitRequired"); + break; + + default: + dlgMsg = iLO.translateString("IRC.error.CannotConnectDrive"); + } + if (dlgMsg.length > 0) { + var msgBox = { + titleKey: "IRC.title.UnableToConnect", + icon: myIcons.critical, + message: dlgMsg, + closeOnClick: !1 + }; + iLO.alert(msgBox); + } + } + } else 12 === evt.data.byteLength ? this.processSCSIRequest(byteArray) : evt.data.byteLength >= FLOPPY_SECTOR_SIZE && this.client_getWriteData(byteArray); + } + currTmrId = setInterval(this.sendKeepAlive, 2e3), this.setTmrId(currTmrId); +}, VMconnection_fd.prototype.processSCSIRequest = function(byteArray) { + switch (renderer && renderer.onvmactivity && renderer.onvmactivity(), this.media_sz <= 0 ? (this.media = 0, + this.fdd_state = fddStateEnum.MEDIA_NOT_PRESENT) : (this.media = 36, this.fdd_state++, + this.fdd_state > fddStateEnum.MEDIA_READY && (this.fdd_state = fddStateEnum.MEDIA_READY)), + byteArray[0]) { + case SCSI_TEST_UNIT_READY: + this.client_test_unit_ready(); + break; + + case SCSI_START_STOP_UNIT: + this.client_start_stop_unit(byteArray); + break; + + case SCSI_PA_MEDIA_REMOVAL: + this.client_pa_media_removal(byteArray); + break; + + case SCSI_READ_CAPACITIES: + this.client_read_capacities(); + break; + + case SCSI_READ_CAPACITY: + this.client_read_capacity(); + break; + + case SCSI_READ_10: + case SCSI_READ_12: + this.client_read(byteArray); + break; + + case SCSI_WRITE_10: + case SCSI_WRITE_12: + this.client_getWriteLen(byteArray); + break; + + default: + this.sendRespHeader(5, 36, 0, 0); + } +}, VMconnection_fd.prototype.client_read_capacities = function() { + var sz, rcs_resp = new Uint8Array([ 0, 0, 0, 16, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 11, 64, 0, 0, 2, 0 ]); + this.fdd_state !== fddStateEnum.MEDIA_CHANGED ? this.sendRespHeader(0, 0, 0, rcs_resp.length) : (this.sendRespHeader(6, 40, 0, rcs_resp.length), + this.fdd_state = fddStateEnum.MEDIA_READY), sz = parseInt(this.media_sz / FLOPPY_SECTOR_SIZE), + rcs_resp[4] = sz >> 24 & 255, rcs_resp[5] = sz >> 16 & 255, rcs_resp[6] = sz >> 8 & 255, + rcs_resp[7] = sz >> 0 & 255, rcs_resp[10] = 2, rcs_resp[11] = 0, this.doSend(rcs_resp); +}, VMconnection_fd.prototype.client_read_capacity = function() { + var sz, data = new Uint8Array(8); + this.fdd_state === fddStateEnum.MEDIA_NOT_PRESENT ? this.sendRespHeader(2, 58, 0, 0) : this.fdd_state === fddStateEnum.MEDIA_CHANGED ? this.sendRespHeader(6, 40, 0, 0) : this.fdd_state === fddStateEnum.MEDIA_READY && (sz = parseInt(this.media_sz / FLOPPY_SECTOR_SIZE) - 1, + data[0] = sz >> 24 & 255, data[1] = sz >> 16 & 255, data[2] = sz >> 8 & 255, data[3] = sz >> 0 & 255, + data[6] = 2, this.sendRespHeader(0, 0, 0, 8), this.doSend(data)); +}, VMconnection_fd.prototype.client_read = function(cmd) { + var that = this, t = cmd[0] == SCSI_READ_12 ? 1 : 0, offset = VMconnection.mk_int32(cmd, 2) * FLOPPY_SECTOR_SIZE, length = t ? VMconnection.mk_int32(cmd, 6) : VMconnection.mk_int16(cmd, 7); + length *= FLOPPY_SECTOR_SIZE; + var reader = new FileReader(), bytesSent = 0, sendBytes = 0; + if (offset >= 0 && offset < this.media_sz) { + reader.onloadend = function(e) { + for (that.sendRespHeader(0, 0, 0, length); length > bytesSent; ) { + sendBytes = Math.min(FLOPPY_MAX_CHUNK_SIZE, length - bytesSent); + var bytes = new Uint8Array(e.target.result.slice(bytesSent, bytesSent + sendBytes)); + that.doSend(bytes), bytesSent += sendBytes; + } + }, reader.onerror = function(e) { + that.sendRespHeader(3, 16, 0, 0); + }; + var blob = this.file.slice(offset, offset + length); + reader.readAsArrayBuffer(blob); + } else this.sendRespHeader(5, 33, 0, 0); +}, VMconnection_fd.prototype.client_start_stop_unit = function(cmd) { + this.sendRespHeader(0, 0, 0, 0), 2 === (3 & cmd[4]) && (this.fdd_state = fddStateEnum.MEDIA_NOT_PRESENT, + this.closeVMconnection()); +}, VMconnection_fd.prototype.client_pa_media_removal = function(cmd) { + 0 !== (2 & cmd[4]) ? this.sendRespHeader(5, 36, 0, 0) : this.sendRespHeader(0, 0, 0, 0); +}, VMconnection_fd.prototype.client_getWriteLen = function(cmd) { + var t = 170 === cmd[0]; + this.lba = VMconnection.mk_int32(cmd, 2) * FLOPPY_SECTOR_SIZE, this.writeLen = t ? VMconnection.mk_int32(cmd, 6) : VMconnection.mk_int16(cmd, 7), + this.writeLen *= FLOPPY_SECTOR_SIZE; +}, VMconnection_fd.prototype.client_getWriteData = function(cmd) { + var numRead = cmd.length; + "undefined" == typeof this.client_getWriteData.offset && (this.client_getWriteData.offset = 0); + for (var i = this.client_getWriteData.offset; numRead > i; i++) this.buffer[i] = cmd[i]; + this.client_getWriteData.offset += numRead, this.writeLen -= numRead, this.writeLen <= 0 && this.client_fileWrite(this.buffer); +}, VMconnection_fd.prototype.client_fileWrite = function(buffer) { + this.sendRespHeader(0, 0, 0, 0); +}; \ No newline at end of file diff --git a/public/hpilo/js/cache.js b/public/hpilo/js/cache.js new file mode 100644 index 0000000..523fbde --- /dev/null +++ b/public/hpilo/js/cache.js @@ -0,0 +1,49 @@ +function ColorCache() { + this.active = 0, this.pixcode = LATCHED, this.size = 17, this.element = new Uint16Array(this.size), + this.display = function() { + for (var i = 0; i < this.active; i++) { + this.element[i]; + } + }, this.reset = function() { + this.element.fill(0, 0, this.active), this.active = 0, this.pixcode = LATCHED; + }, this.lru = function(color) { + var active = this.active, code = 0; + return color |= AMASK, -1 == (code = this.element.lastIndexOf(color, active - 1)) && (active < this.size ? (active++, + this.element.copyWithin(1, 0, active), this.element[0] = color, 2 > active ? this.pixcode = LATCHED : 2 == active ? this.pixcode = PIXLRU0 : 3 == active ? this.pixcode = PIXCODE1 : 6 > active ? this.pixcode = PIXCODE2 : 10 > active ? this.pixcode = PIXCODE3 : this.pixcode = PIXCODE4, + this.active = active) : code = active), code > 0 && (this.element.copyWithin(1, 0, active), + this.element[0] = color), !1; + }, this.find = function(code) { + var color; + return code > this.active ? 0 : (color = this.element[code] | AMASK, code > 0 && this.element.copyWithin(1, 0, code), + this.element[0] = color | AMASK, color); + }, this.prune = function(code) { + for (var active = this.active, i = 0, t = 0; active > i; ) this.element[i] & AMASK && (this.element[t++] = -2 & this.element[i]), + i++; + this.element.fill(0, active), this.active = active = t, 2 > active ? this.pixcode = LATCHED : 2 == active ? this.pixcode = PIXLRU0 : 3 == active ? this.pixcode = PIXCODE1 : 6 > active ? this.pixcode = PIXCODE2 : 10 > active ? this.pixcode = PIXCODE3 : this.pixcode = PIXCODE4, + this.display(); + }; +} + +var _COLOR = 0, _USAGE = 1, _COUNTER = 2; + +BLOCK_AGE = 1; + +const AMASK = 1; + +Uint16Array.prototype.fill || (Uint16Array.prototype.fill = function(value) { + for (var t = Object(this), len = t.length, start = arguments[1] >> 0, end = arguments[2] >> 0 || len, k = 0 > start ? len + end : start, n = 0 > end ? len + end : end, i = k; n > i; i++) t[i] = value; + return 0; +}), Uint16Array.prototype.lastIndexOf || (Uint16Array.prototype.lastIndexOf = function(searchElement) { + var t = Object(this), n = t.length; + arguments.length > 1 && (n = Number(arguments[1])); + for (var i = n; i >= 0 && t[i] !== searchElement; i--) ; + return i; +}), Uint16Array.prototype.copyWithin || (Uint16Array.prototype.copyWithin = function(target) { + var t = Object(this), len = t.length, start = 0; + arguments.length > 1 && (start = arguments[1], 0 > start && (start += len)); + var end = len; + arguments.length > 2 && (end = arguments[2], 0 > end && (end += len)); + var c = end - start; + if (target > start) for (var i = c - 1; i >= 0; i--) t[target + i] = t[start + i]; else for (var i = 0; c > i; i++) t[target + i] = t[start + i]; + return t; +}); \ No newline at end of file diff --git a/public/hpilo/js/constants.js b/public/hpilo/js/constants.js new file mode 100644 index 0000000..137ca00 --- /dev/null +++ b/public/hpilo/js/constants.js @@ -0,0 +1,168 @@ +var RESET = 0, START = 1, PIXELS = 2, PIXLRU1 = 3, PIXLRU0 = 4, PIXCODE1 = 5, PIXCODE2 = 6, PIXCODE3 = 7, PIXGREY = 8, PIXRGBR = 9, PIXRPT = 10, PIXRPT1 = 11, PIXRPTSTD1 = 12, PIXRPTSTD2 = 13, PIXRPTNSTD = 14, CMD = 15, CMD0 = 16, MOVEXY0 = 17, EXTCMD = 18, CMDX = 19, MOVESHORTX = 20, MOVELONGX = 21, BLKRPT = 22, EXTCMD1 = 23, FIRMWARE = 24, EXTCMD2 = 25, MODE0 = 26, TIMEOUT = 27, BLKRPT1 = 28, BLKRPTSTD = 29, BLKRPTNSTD = 30, PIXFAN = 31, PIXCODE4 = 32, PIXDUP = 33, BLKDUP = 34, PIXCODE = 35, PIXSPEC = 36, EXIT = 37, LATCHED = 38, MOVEXY1 = 39, MODE1 = 40, PIXRGBG = 41, PIXRGBB = 42, HUNT = 43, PRINT0 = 44, PRINT1 = 45, CORP = 46, MODE2 = 47, PIXRGB = 48, LEFT = [ 8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], RIGHT = [ 8, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0 ], en_kbd_map = [ 0, 0, 0, 72, 0, 0, 0, 0, 42, 43, 0, 0, 216, 40, 0, 0, 0, 0, 0, 72, 57, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 44, 75, 78, 77, 74, 80, 82, 79, 81, 0, 0, 0, 70, 73, 76, 0, 39, 30, 31, 32, 33, 34, 35, 36, 37, 38, 37, 51, 0, 0, 0, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 227, 231, 101, 0, 0, 98, 89, 90, 91, 92, 93, 94, 95, 96, 97, 85, 87, 0, 86, 99, 84, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 229, 224, 228, 226, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 46, 54, 45, 55, 56, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 49, 48, 52, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255 ], ja_kbd_map = [ 0, 0, 0, 72, 0, 0, 0, 0, 42, 43, 0, 0, 216, 40, 0, 0, 0, 0, 0, 72, 57, 0, 0, 0, 0, 53, 0, 41, 138, 139, 0, 0, 44, 75, 78, 77, 74, 80, 82, 79, 81, 0, 0, 0, 70, 73, 76, 0, 39, 30, 31, 32, 33, 34, 35, 36, 37, 38, 37, 51, 0, 0, 0, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 227, 231, 101, 0, 0, 98, 89, 90, 91, 92, 93, 94, 95, 96, 97, 85, 87, 0, 86, 99, 84, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 229, 224, 228, 226, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 51, 54, 45, 55, 56, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 137, 50, 46, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 136, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255 ], locations = { + 0: "", + 1: "Left", + 2: "Right", + 3: "Numpad" +}, keyboardCodes = { + KeyA: 4, + KeyB: 5, + KeyC: 6, + KeyD: 7, + KeyE: 8, + KeyF: 9, + KeyG: 10, + KeyH: 11, + KeyI: 12, + KeyJ: 13, + KeyK: 14, + KeyL: 15, + KeyM: 16, + KeyN: 17, + KeyO: 18, + KeyP: 19, + KeyQ: 20, + KeyR: 21, + KeyS: 22, + KeyT: 23, + KeyU: 24, + KeyV: 25, + KeyW: 26, + KeyX: 27, + KeyY: 28, + KeyZ: 29, + Digit1: 30, + Digit2: 31, + Digit3: 32, + Digit4: 33, + Digit5: 34, + Digit6: 35, + Digit7: 36, + Digit8: 37, + Digit9: 38, + Digit0: 39, + Enter: 40, + Escape: 41, + Backspace: 42, + Tab: 43, + Space: 44, + Minus: 45, + Equal: 46, + BracketLeft: 47, + BracketRight: 48, + Backslash: 49, + IntlHash: 50, + Semicolon: 51, + Quote: 52, + Backquote: 53, + Comma: 54, + Period: 55, + Slash: 56, + CapsLock: 57, + F1: 58, + F2: 59, + F3: 60, + F4: 61, + F5: 62, + F6: 63, + F7: 64, + F8: 65, + F9: 66, + F10: 67, + F11: 68, + F12: 69, + PrintScreen: 70, + ScrollLock: 71, + Pause: 72, + Insert: 73, + Home: 74, + PageUp: 75, + Delete: 76, + End: 77, + PageDown: 78, + ArrowRight: 79, + ArrowLeft: 80, + ArrowDown: 81, + ArrowUp: 82, + NumLock: 83, + NumpadDivide: 84, + NumpadMultiply: 85, + NumpadSubtract: 86, + NumpadAdd: 87, + NumpadEnter: 88, + Numpad1: 89, + Numpad2: 90, + Numpad3: 91, + Numpad4: 92, + Numpad5: 93, + Numpad6: 94, + Numpad7: 95, + Numpad8: 96, + Numpad9: 97, + Numpad0: 98, + NumpadDecimal: 99, + IntlBackslash: 100, + ContextMenu: 101, + Power: 102, + NumpadEqual: 103, + F13: 104, + F14: 105, + F15: 106, + F16: 107, + F17: 108, + F18: 109, + F19: 110, + F20: 111, + F21: 112, + F22: 113, + F23: 114, + F24: 115, + Open: 116, + Help: 117, + Props: 118, + Select: 119, + Stop: 120, + Again: 121, + Undo: 122, + Cut: 123, + Copy: 124, + Paste: 125, + Find: 126, + AudioVolumeMute: 127, + AudioVolumeUp: 128, + AudioVolumeDown: 129, + NumpadComma: 133, + IntlRo: 135, + KanaMode: 136, + IntlYen: 137, + Convert: 138, + NonConvert: 139, + Lang1: 144, + Lang2: 145, + Lang3: 146, + Lang4: 147, + Lang5: 148, + Lang6: 149, + Lang7: 150, + Lang8: 151, + Lang9: 152, + NumpadParenLeft: 182, + NumpadParenRight: 183, + NumpadBackspace: 187, + NumpadMemoryStore: 208, + NumpadMemoryRecall: 209, + NumpadMemoryClear: 210, + NumpadMemoryAdd: 211, + NumpadMemorySubtract: 212, + NumpadClear: 216, + NumpadClearEntry: 217, + ControlLeft: 224, + ShiftLeft: 225, + AltLeft: 226, + OSLeft: 227, + MetaLeft: 227, + ControlRight: 228, + ShiftRight: 229, + AltRight: 230, + OSRight: 231, + MetaRight: 231 +}; \ No newline at end of file diff --git a/public/hpilo/js/extendedIcons.js b/public/hpilo/js/extendedIcons.js new file mode 100644 index 0000000..895124f --- /dev/null +++ b/public/hpilo/js/extendedIcons.js @@ -0,0 +1,11 @@ +HTTP/1.1 200 OK +Content-Type: application/x-javascript +Content-Length: 23 +Content-Security-Policy: script-src 'self' 'unsafe-inline' 'unsafe-eval'; +Date: Mon, 10 Jul 2023 09:58:35 GMT +ETag: "0080e062" +X-Content-Type-Options: nosniff +X-Frame-Options: sameorigin +X-XSS-Protection: 1; mode=block + +var extendedIcons = {}; \ No newline at end of file diff --git a/public/hpilo/js/hostPwr.js b/public/hpilo/js/hostPwr.js new file mode 100644 index 0000000..d6e88bb --- /dev/null +++ b/public/hpilo/js/hostPwr.js @@ -0,0 +1,42 @@ +function HostPower(parent) { + this.verifyPowerChange = function(change, callback) { + var icon = myIcons.circleQuestion, msgText = iLO.translateString("summary.verPwrChg1", "Are you sure you want to ") + change + iLO.translateString("summary.verPwrChg2", " this device?") + "

", msgbox = { + message: icon + msgText + }; + iLO.confirm(msgbox, function(resp) { + callback(resp); + }); + }, this.momentaryPress = function(callback) { + this.verifyPowerChange(iLO.translateString("summary._monentaryPress", "momentary press"), function(resp) { + 1 == resp && iLO.sendJsonRequest("host_power/press_power_button", "POST", "json/host_power", { + method: "press_power_button" + }, this.getHostPower); + }); + }, this.pressAndHold = function(callback) { + this.verifyPowerChange(iLO.translateString("summary._pressHold", "press and hold"), function(resp) { + 1 == resp && iLO.sendJsonRequest("host_power/hold_power_button", "POST", "json/host_power", { + method: "hold_power_button" + }, this.getHostPower); + }); + }, this.systemReset = function(callback) { + this.verifyPowerChange(iLO.translateString("pwr_srv._reset", "reset"), function(resp) { + 1 == resp && iLO.sendJsonRequest("host_power/system_reset", "POST", "json/host_power", { + method: "system_reset" + }, this.getHostPower); + }); + }, this.ColdBoot = function(callback) { + this.verifyPowerChange(iLO.translateString("pwr_srv._coldBoot", "cold boot"), function(resp) { + 1 == resp && iLO.sendJsonRequest("host_power/system_coldboot", "POST", "json/host_power", { + method: "system_coldboot" + }, this.coldBootCallback); + }); + }, this.getHostPower = function() { + iLO.sendJsonRequest("host_power", "GET", "json/host_power", null, this.hostPowerCallback); + }, this.coldBootCallback = function(o, fname, error) { + error != iLOGlobal.constants.HttpErrors.None && (iLO.showMainScreen(), $("#errorDisplay").displayError("Error making cold boot call: " + o.message + " " + o.details)); + }; +} + +var hostPwr = null; + +hostPwr = new HostPower(this), hostPwr.getHostPower(); \ No newline at end of file diff --git a/public/hpilo/js/iLO.js b/public/hpilo/js/iLO.js new file mode 100644 index 0000000..37e6024 --- /dev/null +++ b/public/hpilo/js/iLO.js @@ -0,0 +1,2273 @@ +function MsgBoxQueue(max_depth) { + function formatTimerString(msgbox) { + var msgBox = msgbox || curMsgBox, strMsg = iLO.translateString(msgBox.timerStringKey, msgBox.timerString), secType = msgBox.remaining > 1 ? "seconds" : "second", secStr = iLO.translateString("IRC.unit." + secType, secType); + if ($.isValidString(msgBox.actionKey) || $.isValidString(msgBox.action)) { + var actMsg = iLO.translateString(msgBox.actionKey, msgBox.action); + return strMsg.replace("{0}", actMsg).replace("{1}", msgBox.remaining).replace("{2}", secStr); + } + return strMsg.replace("{0}", msgBox.remaining).replace("{1}", secStr); + } + function formatMessage(msgbox) { + var msgBox = msgbox || curMsgBox, strMsg = iLO.translateString(msgBox.messageKey, msgBox.message); + if (msgBox.messageInserts.length > 0) for (var i = 0; i < msgBox.messageInserts.length; i++) { + var insert = msgBox.messageInserts[i]; + strMsg = strMsg.replace(insert.placeHolder, iLO.translateString(insert.valueKey, insert.value)); + } + return strMsg; + } + function countdown() { + --curMsgBox.remaining > 0 ? $.isValidString(curMsgBox.timerString) && $(".msgbox-timer-msg").text(formatTimerString()) : (stopCountdown(), + me.pop()); + } + function startCountdown() { + stopCountdown(), timerId = window.setInterval(countdown, 1e3); + } + function stopCountdown() { + timerId > 0 && (window.clearInterval(timerId), timerId = 0); + } + function escapeHandler(evt) { + evt.keyCode == $.ui.keyCode.ESCAPE && msgBoxQueue.pop(); + } + function getJqueryUiDialogOptions(elem) { + var opts = $(elem).data().uiDialog ? $(elem).data().uiDialog.options : null; + if (!opts) for (var prop in elem) if (elem[prop] && elem[prop].uiDialog && elem[prop].uiDialog.options) { + opts = elem[prop].uiDialog.options; + break; + } + return opts; + } + function overrideJqueryUiDialogControl() { + jq_modal_count = 0, jq_options = new Array(), $("div.ui-dialog-content:visible").each(function() { + var opts = getJqueryUiDialogOptions(this); + opts && 0 == opts.disabled && (opts.disabled = !0, jq_options.push(opts)), opts && 1 == opts.modal && jq_modal_count++; + }); + } + function restoreJqueryUiDialogControl() { + for (var i = 0; i < jq_options.length; i++) jq_options[i].disabled = !1; + } + function showNextMsg() { + if (0 != queue.length) { + var msgbox = queue[0]; + msgbox.id = msgBoxId++, $prevFocusElement = $(document.activeElement), overrideJqueryUiDialogControl(), + msgbox.$parent = $("#videoContainer .control").hasClass("fullscreenMode") ? $("#videoContainer") : $(".app-container"), + $(msgbox.$overlay).appendTo(msgbox.$parent).addClass("msgbox-overlay-" + (jq_modal_count > 0 ? "light" : "medium")).fadeIn("fast").css("display", "block !important"), + $(msgbox.$msgbox).appendTo(msgbox.$parent).fadeIn("fast", function() { + $("svg", ".msgbox-contents").addClass("background-color-index-light"), $(".msgbox-contents .button--primary").trigger("focus"); + }).css("display", "block !important"), curMsgBox = msgbox, me.centerMsgBox(), msgbox.closeOnEscape ? (msgbox.closeOnClick && $(msgbox.$overlay).on("click", function(evt) { + msgBoxQueue.pop(); + }), $(document).on("keydown", escapeHandler)) : $(document).off("keydown", escapeHandler), + curMsgBox.stayTime > 0 && startCountdown(); + } + } + function removeMsg() { + stopCountdown(), $(".msgbox-wrapper, .msgbox-overlay").fadeOut(100, function() { + $(this).remove(); + }); + } + var me = this, maxDepth = max_depth || 5, timerId = 0, msgBoxId = 1, curMsgBox = null, queue = new Array(), $prevFocusElement = null, jq_modal_count = 0, jq_options = null; + this.timerStringFormatter = function(msgbox) { + return formatTimerString(msgbox); + }, this.messageFormatter = function(msgbox) { + return formatMessage(msgbox); + }, this.push = function(msgbox) { + queue.push(msgbox), 1 == queue.length ? showNextMsg() : queue.length > maxDepth && me.pop(); + }, this.pop = function(resp) { + var msgbox = queue.shift(); + msgbox && (removeMsg(), iLO.isFunction(msgbox.callback) && (void 0 === resp && null !== msgbox.retvalOverride ? msgbox.callback(msgbox.retvalOverride) : msgbox.callback(resp))), + restoreJqueryUiDialogControl(), $prevFocusElement.trigger("focus"), showNextMsg(); + }, this.centerMsgBox = function() { + var $msgWrapper = $(".msgbox-wrapper"), $wdw = $(window), w = $msgWrapper.width(), h = $msgWrapper.height(); + $msgWrapper.css({ + top: Math.max($wdw.height() / 2 - h / 2, 0) + "px", + left: Math.max($wdw.width() / 2 - w / 2, 0) + "px" + }); + }, this.moveMsgBox = function() { + var isFullScreen = $("#videoContainer").fullScreen(), oldParent = isFullScreen ? ".app-container" : "#videoContainer", newParent = isFullScreen ? "#videoContainer" : ".app-container"; + $(oldParent + " .msgbox-overlay").length && $(".msgbox-overlay").appendTo(newParent), + $(oldParent + " .msgbox-wrapper").length && $(".msgbox-wrapper").appendTo(newParent), + $(".msgbox-contents .button--primary").trigger("focus"); + }, this.queueLength = function() { + return queue.length; + }, this.clear = function() { + queue = new Array(), removeMsg(); + }; +} + +if (jQuery.isValidString = function(obj) { + return "string" == typeof obj && obj.length > 0 && /\S/.test(obj); +}, jQuery.existsNonNull = function(arg) { + return !("undefined" == typeof arg || null == arg); +}, jQuery.isNonZeroInteger = function(arg) { + return "undefined" != typeof arg && null !== arg && !isNaN(arg) && 0 !== arg && parseInt(arg, 10) == parseFloat(arg); +}, jQuery.isValidIPAddress = function(address) { + if (!jQuery.existsNonNull(address)) return !1; + if (address = address.trim(), !jQuery.isValidString(address)) return !1; + var addressValid = !0, ipPattern = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/, ipArray = address.match(ipPattern); + if (null === ipArray) addressValid = !1; else if (5 == ipArray.length) if ("255.255.255.255" != ipArray[0]) for (var i = 1; i < ipArray.length; i++) try { + if (parseInt(ipArray[i], 10) > 255) { + addressValid = !1; + break; + } + } catch (e) { + addressValid = !1; + } else addressValid = !1; else addressValid = !1; + return addressValid; +}, jQuery.isValidIPv6Address = function(address) { + var i, mySplitResult = null, length = 0, pos = address.indexOf("/"); + if ("" == address) return !0; + if (pos >= 0 && (mySplitResult = address.split("/"), address = mySplitResult[0], + !isValidIPv6AddressPrefix(mySplitResult[1]))) return !1; + if (mySplitResult = address.split("::"), mySplitResult.length > 2) return !1; + if (mySplitResult = address.split(":"), length = mySplitResult.length, 8 >= length) { + for (i = 0; length > i; i++) if (null == mySplitResult[i].match(/^[0-9a-fA-F]{1,4}$/) && "" != mySplitResult[i]) return !1; + return !0; + } + return !1; +}, jQuery.expr.pseudos.hasText = function(element, index) { + return element.childNodes.length > 0 && 3 == element.firstChild.nodeType ? element.innerHTML.trim().length > 0 : "span" == element.nodeName.toLowerCase(); +}, jQuery.log = function() { + return iLOGlobal.debug && "undefined" != typeof window.console && iLO.isFunction(window.console.log) ? (console.log.apply(console, arguments), + !0) : !1; +}, jQuery.logWarn = function() { + return iLOGlobal.debug && "undefined" != typeof window.console && iLO.isFunction(window.console.warn) ? (console.warn.apply(console, arguments), + !0) : !1; +}, jQuery.logError = function() { + return iLOGlobal.debug && "undefined" != typeof window.console && iLO.isFunction(window.console.error) ? (console.error.apply(console, arguments), + !0) : !1; +}, String.prototype.trim || (String.prototype.trim = function() { + return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ""); +}), window.ie = !1, window.compute_ie = function() { + for (var a = 3, b = document.createElement("b"), c = b.all || []; b.innerHTML = "", + c[0]; ) ; + return a > 4 ? a : document.documentMode; +}(), "undefined" == typeof iLOGlobal || !iLOGlobal && self != top && parent.iLOGlobal) try { + iLOGlobal = parent.iLOGlobal; +} catch (e) {} + +if ("undefined" == typeof iLOGlobal || !iLOGlobal) { + iLOGlobal = { + constants: { + HttpErrors: { + None: "success", + NoContent: 204, + NotModified: 304, + BadRequest: 400, + Unauthorized: 401, + Forbidden: 403, + NotFound: 404, + TimedOut: 408, + InternalError: 500, + BadGateway: 502 + }, + alt_mode: { + HP: 0, + Enabled: 1, + ProfileError: 2, + NANDError: 3, + Errors: 2 + }, + alt_level: { + Light: 0, + Medium: 1, + Heavy: 2 + } + }, + remote_address: "ilo_service", + logout_message: null, + login_delay: 0, + default_language: "en", + accept_language: {}, + langData: {}, + isApplication: !1, + pollingDialogDoc: null, + topPage: self, + content: "summary.html", + reqPathPrefix: "../lang/", + initialLink: "summary.html", + initialTab: void 0, + debug: !1, + helpWin: {}, + features: { + alt_mode: null, + alt_mode_en: null, + alt_mode_err: null, + alt_level: null, + alt_vnd: "", + blade: 0, + storage: 0 + }, + bay_num: 0, + init: function() { + jQuery.extend(iLOGlobal, { + cache: { + eventPoll: { + timestamp: 0 + } + }, + isFlashPolling: !1, + uploading: 0, + eventAttempts: 0, + pollingDialogDoc: null, + titleFrame: null, + applicationDoc: null, + setTitle: !1 + }); + }, + federation_filter: [], + icons: { + critical: 'Critical', + power: 'power', + indicator: 'indicator', + spinning: 'Spinning' + }, + ie: function() { + return window.ie === !1 && (window.ie = window.compute_ie), window.ie; + }() + }, iLOGlobal.init(); + var ajax_settings = { + async: $.ajaxSettings.async, + cache: $.ajaxSettings.cache + }; + $.ajaxSetup(ajax_settings); +} + +if ("undefined" == typeof iLO || !iLO) { + /*! + * jQuery doTimeout: Like setTimeout, but better! - v1.0 - 3/3/2010 + * http://benalman.com/projects/jquery-dotimeout-plugin/ + * + * Copyright (c) 2010 "Cowboy" Ben Alman + * Dual licensed under the MIT and GPL licenses. + * http://benalman.com/about/license/ + */ + !function($) { + function b(l) { + function e() { + l ? h.removeData(l) : f && delete a[f]; + } + function o() { + k.id = setTimeout(function() { + k.fn(); + }, j); + } + var h, m = this, k = {}, g = l ? $.fn : $, n = arguments, i = 4, f = n[1], j = n[2], p = n[3]; + if ("string" != typeof f && (i--, f = l = 0, j = n[1], p = n[2]), l ? (h = m.eq(0), + h.data(l, k = h.data(l) || {})) : f && (k = a[f] || (a[f] = {})), k.id && clearTimeout(k.id), + delete k.id, p) k.fn = function(q) { + try { + "string" == typeof p && (p = g[p]), p.apply(m, d.call(n, i)) !== !0 || q ? e() : o(); + } catch (e) {} + }, o(); else { + if (k.fn) return void 0 === j ? e() : k.fn(j === !1), !0; + e(); + } + } + var a = {}, c = "doTimeout", d = Array.prototype.slice; + $[c] = function() { + return b.apply(window, [ 0 ].concat(d.call(arguments))); + }, $.fn[c] = function() { + var f = d.call(arguments), e = b.apply(this, [ c + f[0] ].concat(f)); + return "number" == typeof f[0] || "number" == typeof f[1] ? this : e; + }; + }(jQuery), /*! + *jQuery table2csv plugin 0.1.0 + *Converts table html element to csv string + *Copyright (c) 2009 Leonardo Rossetti motw.leo@gmail.com + * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php) + *THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + *IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + *FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + *AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + *LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + *OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + *THE SOFTWARE. + */ + function($) { + $.fn.table2csv = function(options) { + var defaults = { + delimiter: ",", + callback: function(csv) { + return csv; + } + }, settings = $.extend(defaults, options); + return this.each(function() { + var csv = ""; + $(this).find("thead tr:not('.tablesorter-ignoreRow') th:not('.csv_exclude')").each(function() { + csv += '"' + $(this).text().replace(/(\")/gim, '\\"\\"') + '"' + settings.delimiter; + }), csv += "\n", $(this).find("tbody tr:not('.tablesorter-scroller-spacer')").each(function() { + $(this).find("td:not('.csv_exclude')").each(function() { + csv += this.children.length && ($(this.children[0]).is("img") || $(this.children[0]).hasClass("status-icon")) ? '"' + $(this.children[0]).attr("title").replace(/(\")/gim, '\\"\\"') + '"' + settings.delimiter : settings.trim && (void 0 == iLO.getIEVersion() || iLO.getIEVersion() > 8) ? '"' + $(this).text().trim().replace(/(\")/gim, '\\"\\"') + '"' + settings.delimiter : '"' + $(this).text().replace(/(\")/gim, '\\"\\"') + '"' + settings.delimiter; + }), csv += "\n"; + }), settings.callback(csv); + }); + }; + }(jQuery), jQuery.fn.check = function(mode) { + return "undefined" == typeof mode && (mode = 1), mode = mode === !1 || 0 === mode ? "off" : mode === !0 || 1 == mode || "man" == mode ? "on" : mode, + this.each(function() { + switch (mode) { + case "on": + case "true": + $(this).prop("checked", !0); + break; + + case "off": + case "false": + $(this).prop("checked", !1); + break; + + case "toggle": + $(this).prop("checked", !$(this).is(":checked")); + } + }); + }, function($) { + $.fn.extend({ + disable: function() { + return this.each(function() { + var $this = jQuery(this); + $this.prop("disabled", !0); + var type = $this.attr("type"); + if ($this.length > 0) if ("text" === type || "password" === type) { + var temp = $this.val(); + $this.addClass("textfield_disabled"), jQuery.existsNonNull($this.attr("data-prev_value")) && $this.val($this.attr("data-prev_value")).attr("data-prev_value", temp); + } else "checkbox" === type && ($this.attr("data-prev_checked", $this.is(":checked") ? "true" : "false"), + $this.check(!1)); + }); + }, + enable: function() { + return this.each(function() { + var $this = jQuery(this), type = $this.attr("type"); + if ($this.prop("disabled", !1), $this.length > 0) if ("text" === type || "password" === type) { + $this.removeClass("textfield_disabled"); + var temp = $this.attr("data-prev_value"); + jQuery.existsNonNull(temp) && ($this.attr("data-prev_value", $this.val()), $this.val(temp)); + } else "checkbox" === type && jQuery.existsNonNull($this.attr("data-prev_checked")) && ($this.is(":checked") || $this.check("true" === $this.attr("data-prev_checked")), + $this.removeAttr("data-prev_checked")); + }); + }, + toggleEnabled: function(enable) { + switch (typeof enable) { + case "boolean": + break; + + case "number": + enable = enable > 0; + break; + + default: + enable = this.is(":disabled"); + } + return $(this)[enable ? "enable" : "disable"](); + }, + toggleEnabledAll: function(enable) { + switch (typeof enable) { + case "boolean": + break; + + case "number": + enable = enable > 0; + break; + + default: + enable = this.is(":disabled"); + } + return this.each(function() { + $(this).find("*")[enable ? "enable" : "disable"](); + }); + }, + toggleReadOnly: function(readOnly) { + return this.each(function() { + ("boolean" == typeof readOnly || "number" == typeof readOnly) && (readOnly ? $(this).prop("readonly", !0).addClass("textfield_readonly") : $(this).prop("readonly", !1).removeClass("textfield_readonly")); + }); + }, + toggleShow: function() { + return this.each(function() { + var This = $(this); + This.is(":hidden") ? This.show() : This.hide(); + }); + }, + translate: function(reqLang, reqPathPrefix) { + return this.each(function() { + var lang = reqLang ? reqLang : iLO.getLanguage(), pPrefix = reqPathPrefix ? reqPathPrefix : "en" == lang ? iLOGlobal.reqPathPrefix : "/lang/"; + $("[data-localize],[rel*=localize]", jQuery(this)).each(function() { + var $elem = $(this); + $elem.removeData(); + var key = $elem.attr("data-localize"); + "undefined" != typeof key || (key = $elem.attr("rel").match(/localize\[(.*?)\]/)[1]); + var translatedText = iLO.translateString(key, null, pPrefix, lang); + jQuery.isValidString(translatedText) && ("INPUT" == $elem.prop("tagName") ? $elem.val(translatedText) : $elem.html(translatedText)); + }), $("[langKey],[langAttr]").each(function() { + var attribute = $(this).attr("langAttr") || $(this)[0].getAttribute("langAttr"), key = $(this).attr("langKey") || $(this)[0].getAttribute("langKey"), defaultText = $(this).attr(attribute) || $(this)[0].getAttribute(attribute), tableTitle = $(this).attr("data-th") || $(this)[0].getAttribute("data-th"); + try { + tableTitle ? $(this).attr("data-th", iLO.translateString(key, attribute)) : $(this).attr(attribute, iLO.translateString(key, defaultText, pPrefix, lang)); + } catch (e) { + key = key; + } + }); + }); + } + }); + }(jQuery), function($) { + function displayMessage(i, j, data, fn) { + var langKey = "", translatedText = "", msg = ""; + jQuery.isPlainObject(this.message) ? ($.isValidString(this.message.langKey) && (langKey = this.message.langKey), + translatedText = iLO.translateString(langKey, this.message.text), "undefined" != typeof this.message.message && this.message.message && (msg = this.message.message)) : msg = this.message; + var out = ""; + return out = '

' + translatedText + "" + msg + "

"; + } + displayMessage.jqote_id = 1, $.fn.extend({ + runEffect: function() { + return this.each(function() { + $(this).fadeIn(); + }); + }, + hideMessage: function() { + return this.each(function() { + $(this).fadeOut(); + }); + }, + displayError: function(o) { + return this.each(function() { + $(this).show().jqotesub(displayMessage, { + "class": "ui-state-error", + message: o + }).runEffect(); + }); + }, + displayWarning: function(o) { + return this.each(function() { + $(this).show().jqotesub(displayMessage, { + "class": "ui-state-warning", + message: o + }).runEffect(); + }); + }, + displayInformative: function(o) { + return this.each(function() { + $(this).show().jqotesub(displayMessage, { + "class": "ui-state-highlight", + message: o + }).runEffect(); + }); + }, + displayNormal: function(o) { + return this.each(function() { + $(this).show().jqotesub(displayMessage, { + "class": "ui-state-normal", + message: o + }).runEffect(); + }); + }, + addMessageText: function(o, type, force) { + var iconClasses = [ "ui-state-highlight", "ui-state-normal", "ui-state-warning", "ui-state-error" ], iconClass = -1 == $.inArray(type, iconClasses) ? iconClasses[0] : type; + return this.each(function() { + if (this.children.length) { + var langKey = "", translatedText = "", message = ""; + "undefined" != typeof o.langKey && o.langKey && (langKey = o.langKey), "undefined" != typeof o.text && o.text && (translatedText = iLO.translateString(langKey, o.text)), + "undefined" != typeof o.message && o.message && (message = o.message); + var result = '

'; + result += "" != langKey ? '' + translatedText + "" : translatedText, + result += message + "

", (-1 == $(".msgText p span").text().indexOf(translatedText) || force) && $(".msgText", $(this)).append(result); + } else $(this).show().jqotesub(displayMessage, { + "class": iconClass, + message: o + }).runEffect(); + }); + }, + addNormal: function(o, force) { + return $(this).addMessageText(o, "ui-state-normal", force); + }, + addWarning: function(o, force) { + return $(this).addMessageText(o, "ui-state-warning", force); + }, + addInformative: function(o, force) { + return $(this).addMessageText(o, "ui-state-highlight", force); + }, + addError: function(o, force) { + return $(this).addMessageText(o, "ui-state-error", force); + }, + createWaitScreen: function(o) { + var langKey = "", translatedText = "Loading...", spinner = iLOGlobal.icons.spinning, result = ""; + return "undefined" != typeof o && o || (o = {}), "undefined" != typeof o.langKey && o.langKey && (langKey = o.langKey), + "undefined" != typeof o.text && o.text && (translatedText = iLO.translateString(langKey, o.text)), + result = '
' + spinner + '
' + translatedText + "
", + this.each(function() { + $(this).html(result); + }); + } + }); + }(jQuery), /*! + * jQote2 - client-side Javascript templating engine + * Copyright (C) 2010, aefxx + * http://aefxx.com/ + * + * Dual licensed under the WTFPL v2 or MIT (X11) licenses + * WTFPL v2 Copyright (C) 2004, Sam Hocevar + * + * Date: Thu, Oct 21st, 2010 + * Version: 0.9.7 + */ + function($) { + function raise(error, ext) { + throw $.extend(error, ext), error; + } + function dotted_ns(fn) { + var ns = []; + if (type_of.call(fn) !== ARR) return !1; + for (var i = 0, l = fn.length; l > i; i++) ns[i] = fn[i].jqote_id; + return ns.length ? ns.sort().join(".").replace(/(\b\d+\b)\.(?:\1(\.|$))+/g, "$1$2") : !1; + } + function lambda(tmpl, t) { + var f, fn = [], type = type_of.call(tmpl); + if (t = t || tag, type === FUNC) return tmpl.jqote_id ? [ tmpl ] : !1; + if (type !== ARR) return [ $.jqotec(tmpl, t) ]; + if (type === ARR) for (var i = 0, l = tmpl.length; l > i; i++) (f = lambda(tmpl[i], t)) && fn.push(f[0]); + return fn.length ? fn : !1; + } + var JQOTE2_TMPL_UNDEF_ERROR = "UndefinedTemplateError", JQOTE2_TMPL_COMP_ERROR = "TemplateCompilationError", JQOTE2_TMPL_EXEC_ERROR = "TemplateExecutionError", ARR = "[object Array]", STR = "[object String]", FUNC = "[object Function]", n = 1, tag = "%", qreg = /^[^<]*(<[\w\W]+>)[^>]*$/, type_of = Object.prototype.toString; + $.fn.extend({ + jqote: function(data, t) { + var dom = ""; + return data = type_of.call(data) === ARR ? data : [ data ], this.each(function(i) { + for (var fn = $.jqotec(this, t), j = 0; j < data.length; j++) dom += fn.call(data[j], i, j, data, fn); + }), dom; + } + }), $.each({ + app: "append", + pre: "prepend", + sub: "html" + }, function(name, method) { + $.fn["jqote" + name] = function(elem, data, t) { + var ns, regexp, str = $.jqote(elem, data, t), $$ = qreg.test(str) ? $ : function(str) { + return $(document.createTextNode(str)); + }; + return (ns = dotted_ns(lambda(elem))) && (regexp = new RegExp("(^|\\.)" + ns.split(".").join("\\.(.*)?") + "(\\.|$)")), + this.each(function() { + var dom = $$(str); + $(this)[method](dom), (3 === dom[0].nodeType ? $(this) : dom).trigger("jqote." + name, [ dom, regexp ]); + }); + }; + }), $.extend({ + jqote: function(elem, data, t) { + var str = "", fn = lambda(elem); + t = t || tag, fn === !1 && raise(new Error("Empty or undefined template passed to $.jqote"), { + type: JQOTE2_TMPL_UNDEF_ERROR + }), data = type_of.call(data) !== ARR ? [ data ] : data; + for (var i = 0, l = fn.length; l > i; i++) for (var j = 0; j < data.length; j++) str += fn[i].call(data[j], i, j, data, fn[i]); + return str; + }, + jqotec: function(template, t) { + var cache, elem, tmpl, type = type_of.call(template); + if (t = t || tag, type === STR && qreg.test(template)) { + if (elem = tmpl = template, cache = $.jqotecache[template]) return cache; + } else if (elem = type === STR || template.nodeType ? $(template) : template instanceof jQuery ? template : null, + elem[0] && ((tmpl = elem[0].innerHTML) || (tmpl = elem.text())) || raise(new Error("Empty or undefined template passed to $.jqotec"), { + type: JQOTE2_TMPL_UNDEF_ERROR + }), cache = $.jqotecache[$.data(elem[0], "jqote_id")]) return cache; + for (var index, str = "", arr = tmpl.replace(/\s*\/\*!\s*|\s*!\*\/\s*|\s*\s*|[\r\n\t]/g, "").split("<" + t).join(t + ">").split(t + ">"), m = 0, l = arr.length; l > m; m++) str += "" !== arr[m].charAt(0) ? "out+='" + arr[m].replace(/(\\|["'])/g, "\\$1") + "'" : "=" === arr[m].charAt(1) ? ";out+=(" + arr[m].substr(2) + ");" : "!" === arr[m].charAt(1) ? ";out+=$.jqotenc((" + arr[m].substr(2) + "));" : ";" + arr[m].substr(1); + str = "try{" + ('var out="";' + str + ";return out;").split("out+='';").join("").split('var out="";out+=').join("var out=") + '}catch(e){e.type="' + JQOTE2_TMPL_EXEC_ERROR + '";e.args=arguments;e.template=arguments.callee.toString();throw e;}'; + try { + var fn = new Function("i, j, data, fn", str); + } catch (e) { + raise(e, { + type: JQOTE2_TMPL_COMP_ERROR + }); + } + return index = elem instanceof jQuery ? $.data(elem[0], "jqote_id", n) : elem, $.jqotecache[index] = (fn.jqote_id = n++, + fn); + }, + jqotefn: function(elem) { + var type = type_of.call(elem), index = type === STR && qreg.test(elem) ? elem : $.data($(elem)[0], "jqote_id"); + return $.jqotecache[index] || !1; + }, + jqotetag: function(str) { + type_of.call(str) === STR && (tag = str); + }, + jqotenc: function(str) { + return jQuery.existsNonNull(str) && str.toString && jQuery.isValidString(str.toString()) ? str.toString().replace(/&(?!\w+;)/g, "&").split("<").join("<").split(">").join(">").split('"').join(""").split("'").join("'") : ""; + }, + jqotecache: {} + }), $.event.special.jqote = { + add: function(obj) { + var ns, handler = obj.handler, data = obj.data ? type_of.call(obj.data) !== ARR ? [ obj.data ] : obj.data : []; + obj.namespace || (obj.namespace = "app.pre.sub"), data.length && (ns = dotted_ns(lambda(data))) && (obj.handler = function(event, dom, regexp) { + return !regexp || regexp.test(ns) ? handler.apply(this, [ event, dom ]) : null; + }); + } + }; + }(jQuery); + /*! jquery.cookies.2.2.0.min.js */ + /*! + * Copyright (c) 2005 - 2010, James Auldridge + * All rights reserved. + * + * Licensed under the BSD, MIT, and GPL (your choice!) Licenses: + * http://code.google.com/p/cookies/wiki/License + */ + var jaaulde = window.jaaulde || {}; + jaaulde.utils = jaaulde.utils || {}, jaaulde.utils.cookies = function() { + var resolveOptions, assembleOptionsString, parseCookies, constructor, defaultOptions = { + expiresAt: null, + path: "/", + domain: null, + secure: !1 + }; + return resolveOptions = function(options) { + var returnValue, expireDate; + return "object" != typeof options || null === options ? returnValue = defaultOptions : (returnValue = { + expiresAt: defaultOptions.expiresAt, + path: defaultOptions.path, + domain: defaultOptions.domain, + secure: defaultOptions.secure + }, "object" == typeof options.expiresAt && options.expiresAt instanceof Date ? returnValue.expiresAt = options.expiresAt : "number" == typeof options.hoursToLive && 0 !== options.hoursToLive && (expireDate = new Date(), + expireDate.setTime(expireDate.getTime() + 60 * options.hoursToLive * 60 * 1e3), + returnValue.expiresAt = expireDate), "string" == typeof options.path && "" !== options.path && (returnValue.path = options.path), + "string" == typeof options.domain && "" !== options.domain && (returnValue.domain = options.domain), + options.secure === !0 && (returnValue.secure = options.secure)), returnValue; + }, assembleOptionsString = function(options) { + return options = resolveOptions(options), ("object" == typeof options.expiresAt && options.expiresAt instanceof Date ? "; expires=" + options.expiresAt.toGMTString() : "") + "; path=" + options.path + ("string" == typeof options.domain ? "; domain=" + options.domain : "") + (options.secure === !0 ? "; secure" : ""); + }, parseCookies = function() { + var i, pair, name, value, unparsedValue, cookies = {}, separated = document.cookie.split(";"); + for (i = 0; i < separated.length; i += 1) { + pair = separated[i].split("="), name = pair[0].replace(/^\s*/, "").replace(/\s*$/, ""); + try { + value = decodeURIComponent(pair[1]); + } catch (e1) { + value = pair[1]; + } + if ("object" == typeof JSON && null !== JSON && "function" == typeof JSON.parse) try { + unparsedValue = value, value = JSON.parse(value); + } catch (e2) { + value = unparsedValue; + } + cookies[name] = value; + } + return cookies; + }, constructor = function() {}, constructor.prototype.get = function(cookieName) { + var returnValue, ckitem, cookies = parseCookies(); + if ("string" == typeof cookieName) returnValue = "undefined" != typeof cookies[cookieName] ? cookies[cookieName] : null; else if ("object" == typeof cookieName && null !== cookieName) { + returnValue = {}; + for (ckitem in cookieName) "undefined" != typeof cookies[cookieName[ckitem]] ? returnValue[cookieName[ckitem]] = cookies[cookieName[ckitem]] : returnValue[cookieName[ckitem]] = null; + } else returnValue = cookies; + return returnValue; + }, constructor.prototype.filter = function(cookieNameRegExp) { + var cookieName, returnValue = {}, cookies = parseCookies(); + "string" == typeof cookieNameRegExp && (cookieNameRegExp = new RegExp(cookieNameRegExp)); + for (cookieName in cookies) cookieName.match(cookieNameRegExp) && (returnValue[cookieName] = cookies[cookieName]); + return returnValue; + }, constructor.prototype.set = function(cookieName, value, options) { + if (("object" != typeof options || null === options) && (options = {}), "undefined" == typeof value || null === value) value = "", + options.hoursToLive = -8760; else if ("string" != typeof value) { + if ("object" != typeof JSON || null === JSON || "function" != typeof JSON.stringify) throw new Error("cookies.set() received non-string value and could not serialize."); + value = JSON.stringify(value); + } + var optionsString = assembleOptionsString(options); + document.cookie = cookieName + "=" + encodeURIComponent(value) + optionsString; + }, constructor.prototype.del = function(cookieName, options) { + var name, allCookies = {}; + ("object" != typeof options || null === options) && (options = {}), "boolean" == typeof cookieName && cookieName === !0 ? allCookies = this.get() : "string" == typeof cookieName && (allCookies[cookieName] = !0); + for (name in allCookies) "string" == typeof name && "" !== name && this.set(name, null, options); + }, constructor.prototype.test = function() { + var returnValue = !1, testName = "cT", testValue = "data"; + try { + this.set(testName, testValue); + } catch (e) { + return !1; + } + return this.get(testName) === testValue && (this.del(testName), returnValue = !0), + returnValue; + }, constructor.prototype.setOptions = function(options) { + "object" != typeof options && (options = null), defaultOptions = resolveOptions(options); + }, new constructor(); + }(), function() { + window.jQuery && !function($) { + $.cookies = jaaulde.utils.cookies; + var extensions = { + cookify: function(options) { + return this.each(function() { + var i, name, value, nameAttrs = [ "name", "id" ], $this = $(this); + for (i in nameAttrs) if (!isNaN(i) && (name = $this.attr(nameAttrs[i]), "string" == typeof name && "" !== name)) { + $this.is(":checkbox, :radio") ? $this.is(":checked") && (value = $this.val()) : value = $this.is(":input") ? $this.val() : $this.html(), + ("string" != typeof value || "" === value) && (value = null), $.cookies.set(name, value, options); + break; + } + }); + }, + cookieFill: function() { + return this.each(function() { + var n, getN, name, value, nameAttrs = [ "name", "id" ], $this = $(this); + for (getN = function() { + return n = nameAttrs.pop(), !!n; + }; getN(); ) if (name = $this.attr(n), "string" == typeof name && "" !== name) { + value = $.cookies.get(name), null !== value && ($this.is(":checkbox, :radio") ? $this.val() === value ? $this.check(!0) : $this.check(!1) : $this.is(":input") ? $this.val(value) : $this.html(value)); + break; + } + }); + }, + cookieBind: function(options) { + return this.each(function() { + var $this = $(this); + $this.cookieFill().on("change", function() { + $this.cookify(options); + }); + }); + } + }; + $.each(extensions, function(i) { + $.fn[i] = this; + }); + }(window.jQuery); + }(), /*! Copyright (c) Jim Garvin (http://github.com/coderifous), 2008. + * Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses. + * Written by Jim Garvin (@coderifous) for use on LMGTFY.com. + * http://github.com/coderifous/jquery-localize + * Based off of Keith Wood's Localisation jQuery plugin. + * http://keith-wood.name/localisation.html + */ + function($) { + function normaliseLang(lang) { + return lang.substring(0, 2).toLowerCase(); + } + $.localize = function(pkg, options) { + function loadLanguage(pkg, lang, level) { + level = level || 1; + var file; + options && options.loadBase && 1 == level ? (intermediateLangData = {}, file = pkg + ".js", + jsonCall(file, pkg, lang, level)) : 1 == level ? (intermediateLangData = {}, loadLanguage(pkg, lang, 2)) : 2 == level && lang.length >= 2 ? (file = pkg + ".js", + jsonCall(file, pkg, lang, level)) : 3 == level && lang.length >= 5 && (file = pkg + "-" + lang.substring(0, 5) + ".js", + jsonCall(file, pkg, lang, level)); + } + function jsonCall(file, pkg, lang, level) { + options.pathPrefix && (file = options.pathPrefix + "/" + file), $.getJSON(file, null, function(d) { + $.extend(intermediateLangData, d), notifyDelegateLanguageLoaded(intermediateLangData), + loadLanguage(pkg, lang, level + 1); + }); + } + function defaultCallback(data) { + $.localize.data[pkg] = data; + try { + $wrappedSet.each(function(i) { + var elem, key, value; + elem = $(this), key = elem.attr("data-localize"), "undefined" != typeof key || (key = elem.attr("rel").match(/localize\[(.*?)\]/)[1]), + value = valueForKey(key, data), null != value && ("INPUT" == elem.prop("tagName") ? elem.val(value) : elem.html(value)); + }); + } catch (e) {} + } + function notifyDelegateLanguageLoaded(data) { + options.callback ? (defaultCallback(data), options.callback(data, defaultCallback)) : defaultCallback(data); + } + function valueForKey(key, data) { + for (var keys = key.split(/\./), value = data; keys.length > 0; ) { + if (!value) return null; + value = value[keys.shift()]; + } + return value; + } + function regexify(string_or_regex_or_array) { + if ("string" == typeof string_or_regex_or_array) return "^" + string_or_regex_or_array + "$"; + if (string_or_regex_or_array.length) { + for (var matchers = [], x = string_or_regex_or_array.length; x--; ) matchers.push(regexify(string_or_regex_or_array[x])); + return matchers.join("|"); + } + return string_or_regex_or_array; + } + var $wrappedSet = this, intermediateLangData = {}; + options = options || {}; + var saveSettings = { + async: $.ajaxSettings.async, + timeout: $.ajaxSettings.timeout + }; + $.ajaxSetup({ + async: !1, + timeout: options && options.timeout ? options.timeout : 5e3 + }); + var lang = normaliseLang(options && options.language ? options.language : $.defaultLanguage); + options.skipLanguage && lang.match(regexify(options.skipLanguage)) || (loadLanguage(pkg, lang, 1), + $.ajaxSetup(saveSettings)); + }, $.fn.localize = $.localize, $.localize.data = {}, $.defaultLanguage = normaliseLang(navigator.browserLanguage ? navigator.browserLanguage : navigator.language ? navigator.language : navigator.userLanguage ? navigator.userLanguage : navigator.systemLanguage ? navigator.systemLanguage : iLOGlobal.default_language); + }(jQuery), function(jQuery) { + "undefined" != typeof iLOGlobal.cache.subscription_hash && iLOGlobal.cache.subscription_hash || (iLOGlobal.cache.subscription_hash = {}), + jQuery.publish = function(topic, args) { + var cache = iLOGlobal.cache.subscription_hash; + return "undefined" == typeof cache ? !1 : void ("undefined" != typeof cache[topic] && Array.isArray(cache[topic]) && jQuery.each(cache[topic], function(i, val) { + try { + this.apply(jQuery, args || []); + } catch (e) { + try { + delete cache[topic][i]; + } catch (e2) {} + } + })); + }, jQuery.subscribe = function(topic, callback) { + var cache = iLOGlobal.cache.subscription_hash; + if ("undefined" == typeof cache) return !1; + if ("undefined" == typeof cache[topic] || !Array.isArray(cache[topic])) return cache[topic] = iLOGlobal.topPage.jQuery.makeArray(callback), + [ topic, callback ]; + for (var i in cache[topic]) cache[topic][i] == callback && delete cache[topic][i]; + try { + cache[topic].push(callback); + } catch (e) { + try { + delete cache[topic], cache[topic] = jQuery.makeArray(callback); + } catch (e2) {} + } + return [ topic, callback ]; + }, jQuery.subscribeToEvent = function(event, callback) { + return jQuery.subscribe(event, callback); + }, jQuery.unsubscribe = function(handle) { + var cache = iLOGlobal.cache.subscription_hash; + if ("undefined" == typeof cache) return !1; + var t; + try { + t = handle[0]; + } catch (e) { + return !1; + } + cache[t] && jQuery.each(cache[t], function(idx) { + this == handle[1] && cache[t].splice(idx, 1); + }); + try { + if (0 === cache[t].length) return delete cache[t], !0; + } catch (e2) {} + return !1; + }; + }(jQuery), function($) { + $.fn.hpTooltip = function(options) { + function hpTooltip(elem) { + function hide(ev) { + tip && ($("body").off("mousemove", onMove), $("body").off("click", onMove), source.off("focus", hide), + source.off("click", hide), tip.remove(), tip = null); + } + function onOver(ev) { + var refId, tipId, sourceOffset, tipStyle, tipWidth, tipHeight; + !tip && source.attr("data-tooltip") && (refId = source.attr("id"), tipId = refId + "-tooltip", + tip = $('
' + source.attr("data-tooltip") + "
"), + source.parents(".hp-global").length > 0 && tip.addClass("hp-global"), $("body").append(tip), + tipWidth = tip.outerWidth(), tipHeight = tip.outerHeight(), sourceOffset = source.offset(), + tipStyle = { + position: "absolute", + top: sourceOffset.top - tipHeight - 10, + left: sourceOffset.left - 15 + }, tipStyle.top < 0 ? (tipStyle.top = sourceOffset.top + source.outerHeight() + 10, + tipStyle.left + tipWidth > $(window).width() ? (tipStyle.left = $(window).width() - tipWidth, + tip.css(tipStyle).addClass("hp-below-right")) : tip.css(tipStyle).addClass("hp-below")) : tipStyle.left + tipWidth > $(window).width() ? (tipStyle.left = $(window).width() - tipWidth, + tip.css(tipStyle).addClass("hp-above-right")) : tip.css(tipStyle).addClass("hp-above"), + $("body").on("mousemove", onMove), $("body").on("click", onMove), source.on("focus", hide), + source.on("click", hide)); + } + function initialize(elem) { + var text = $(elem).attr("tooltip"); + "string" == typeof options && (text = options), source = $(elem), source.attr("data-tooltip", text), + text && !source.hasClass("hp-tooltipped") && (source.addClass("hp-tooltipped"), + source.on("mouseenter", onOver)); + } + var source, tip, onMove; + onMove = function(ev) { + tip && (ev.pageX < source.offset().left || ev.pageX > source.offset().left + source.outerWidth() || ev.pageY < source.offset().top || ev.pageY > source.offset().top + source.outerHeight()) && hide(); + }, initialize(elem); + } + var instance, ret; + return this.each(function() { + var $elem = $(this); + instance = new hpTooltip($elem[0]), ret = ret ? ret.add($elem) : $elem; + }), ret; + }; + }(jQuery), function($) { + function startAnimation($elem) { + $elem.attr("alt", "UID BLINK").removeClass("indicator-blink indicator-on icon-spinning").addClass("indicator-off"); + var timer = setInterval(function() { + $elem.toggleClass("indicator-off indicator-on"); + }, 500); + $elem.attr("data-timer", timer); + } + $.fn.extend({ + setUID: function(status) { + return this.each(function() { + var $elem = jQuery(this); + if (iLOGlobal.ie) { + var timer = $elem.attr("data-timer"); + timer && clearInterval(timer), $elem.removeData("timer"); + } + switch (status) { + case "UID_ON": + $elem.attr("alt", "UID ON").removeClass("indicator-off indicator-blink icon-spinning").addClass("indicator-on"); + break; + + case "UID_OFF": + $elem.attr("alt", "UID OFF").removeClass("indicator-blink indicator-on icon-spinning").addClass("indicator-off"); + break; + + case "UID_LOADING": + 0 == $elem.find("svg.icon-spinning").length && $elem.prepend(iLOGlobal.icons.spinning), + $elem.addClass("icon-spinning"); + break; + + case "UID_BLINK": + iLOGlobal.ie ? startAnimation($elem) : $elem.attr("alt", "UID BLINK").removeClass("indicator-off indicator-on icon-spinning").addClass("indicator-blink"); + break; + + default: + $elem.attr("alt", "UID UNKNOWN").removeClass("indicator-off indicator-blink indicator-on icon-spinning"); + } + }); + } + }); + }(jQuery), function($) { + var settings = { + inEffectDuration: 600, + outEffectDuration: 800, + inEffect: "easeOutExpo", + outEffect: "easeOutCirc", + stayTime: 1e4, + maxDepth: 5, + text: "", + textKey: "", + sticky: !1, + type: "inform", + position: "top-right", + closeText: "", + closeTextKey: "", + close: null, + parent: ".app-container" + }, methods = { + init: function(options) { + options && $.extend(settings, options); + }, + showToast: function(options) { + var localSettings = {}, orientation = { + "top-right": "top", + "bottom-right": "bottom" + }; + $.extend(localSettings, settings, options), $.isValidString(localSettings.textKey) && (localSettings.text = iLO.translateString(localSettings.textKey)), + $.isValidString(localSettings.closeTextKey) && (localSettings.closeText = iLO.translateString(localSettings.closeTextKey)); + var toastWrapAll, toastItemOuter, toastItemInner, toastItemMsg, toastItemClose, toastItemImage, which = orientation[localSettings.position] || "top", parent = localSettings.parent ? localSettings.parent : "body"; + return toastWrapAll = $(parent + " > .toast-container-" + which).length ? $(parent + " > .toast-container-" + which) : $("
").addClass("toast-container-" + which).addClass("toast-position-" + localSettings.position).appendTo(parent), + toastItemOuter = $("
").addClass("toast-item-wrapper"), toastItemInner = $("
").hide().addClass("toast-item").attr("which", which), + toastItemImage = $("
").addClass("toast-item-image").addClass("toast-item-image-" + localSettings.type).appendTo(toastItemInner).html(myIcons[localSettings.type]), + toastItemMsg = $("
").addClass("toast-item-msg").html(localSettings.text).appendTo(toastItemInner), + toastItemClose = $("
").addClass("toast-item-close").appendTo(toastItemInner).html(myIcons.close).on("click", function() { + $().toastmessage("removeToast", toastItemInner, localSettings); + }), "top" == which ? (toastWrapAll.children(".toast-item-wrapper").length >= localSettings.maxDepth && toastWrapAll.children(".toast-item-wrapper").first().remove(), + toastItemInner.appendTo(toastWrapAll).wrap(toastItemOuter).slideToggle(localSettings.inEffectDuration, localSettings.inEffect)) : (toastWrapAll.children(".toast-item-wrapper").length >= localSettings.maxDepth && toastWrapAll.children(".toast-item-wrapper").last().remove(), + toastItemInner.prependTo(toastWrapAll).wrap(toastItemOuter).slideToggle(localSettings.inEffectDuration, localSettings.inEffect)), + localSettings.sticky || setTimeout(function() { + $().toastmessage("removeToast", toastItemInner, localSettings); + }, localSettings.stayTime), toastItemInner; + }, + removeToast: function(obj, options) { + try { + "top" == obj.attr("which") ? obj.first().animate({ + "margin-top": -1 * obj.first()[0].offsetHeight + }, options.outEffectDuration, options.outEffect, function() { + obj.parent().remove(); + }) : obj.first().animate({ + "margin-bottom": -1 * obj.first()[0].offsetHeight + }, options.outEffectDuration, options.outEffect, function() { + obj.parent().remove(); + }); + } catch (e) { + $.error("removeToast error: " + e.message); + } + options && null !== options.close && options.close(); + } + }; + $.fn.toastmessage = function(method) { + return methods[method] ? methods[method].apply(this, Array.prototype.slice.call(arguments, 1)) : "object" != typeof method && method ? void $.error("Method " + method + " does not exist on jQuery.toastmessage") : methods.init.apply(this, arguments); + }; + }(jQuery); + var msgBoxQueue; + "undefined" != typeof msgBoxQueue && msgBoxQueue || (msgBoxQueue = new MsgBoxQueue()), + $(window).on("resize", function() { + $(".msgbox-wrapper").is(":visible") && msgBoxQueue.centerMsgBox(); + }), $(document).on("fullscreenchange", function(event, data) { + $(".msgbox-wrapper").length > 0 && msgBoxQueue.moveMsgBox(); + }), function($) { + function buildMessage(msgObj) { + return $.isValidString(msgObj.messageKey) && (msgObj.message = iLO.translateString(msgObj.messageKey)), + $.isValidString(msgObj.timerStringKey) && (msgObj.timerString = iLO.translateString(msgObj.timerStringKey)), + msgObj.icon || (msgObj.icon = myIcons[msgObj.type] || null), msgObj.stayTime > 0 && (msgObj.remaining = msgObj.stayTime, + msgObj.timerStringFormatter = msgBoxQueue.timerStringFormatter), msgObj.messageFormatter = msgBoxQueue.messageFormatter, + msgObj.$overlay = $('
'), msgObj.$msgbox = $('
').jqoteapp("#msgbox", msgObj), + msgObj; + } + var defaultOptions = { + icon: null, + title: "", + titleKey: "", + message: "", + messageKey: "", + messageInserts: [], + action: "", + actionKey: "", + timerString: "", + timerStringKey: "", + stayTime: 0, + closeOnEscape: !0, + closeOnClick: !0, + callback: null, + retvalOverride: null + }, methods = { + alert: function(options, callback) { + var opts = { + buttons: [ { + text: "OK", + textKey: "ok", + isDefault: !0, + value: !0 + } ] + }; + $.extend(opts, defaultOptions, options); + var msgObj = buildMessage(opts); + msgObj.callback = callback, msgBoxQueue.push(msgObj); + }, + confirm: function(options, callback) { + var opts = { + buttons: [ { + text: "OK", + textKey: "ok", + isDefault: !0, + value: !0 + }, { + text: "Cancel", + textKey: "cancel", + value: !1 + } ] + }; + $.extend(opts, defaultOptions, options); + var msgObj = buildMessage(opts); + msgObj.callback = callback, msgBoxQueue.push(msgObj); + } + }; + $.fn.msgbox = function(method) { + return methods[method] ? methods[method].apply(this, Array.prototype.slice.call(arguments, 1)) : void $.error("Method " + method + " does not exist on $.msgbox"); + }; + }(jQuery); +} + +if ("undefined" == typeof iLO || !iLO) { + $.cookies.test() || alert("Your browser must be set to accept cookies!"); + var cookieOptions = { + path: "/", + secure: !1 + }; + $.cookies.setOptions(cookieOptions), $.ajaxSetup({ + xhr: window.XMLHttpRequest && (window.location && "file:" !== window.location.protocol || !window.ActiveXObject) ? function() { + return new window.XMLHttpRequest(); + } : function() { + try { + var obj = null, types = [ "Msxml2.XMLHTTP", "Microsoft.XMLHTTP" ]; + for (var i in types) try { + obj = new window.ActiveXObject(types[i]); + break; + } catch (e) {} + return obj; + } catch (e) {} + return null; + }, + cache: !1, + contentType: "application/json; charset=utf-8", + beforeSend: function(xhr) { + try { + if (document.all && document.cookie && "" != document.cookie) for (var cookies = document.cookie.split(";"), i = 0; i < cookies.length; i++) { + var cookie = cookies[i].trim(); + if ("sessionKey=" == cookie.substring(0, 11)) { + var cookieValue = decodeURIComponent(cookie.substring(11)); + if (cookieValue && "" != cookieValue) try { + xhr.setRequestHeader("Cookie", "blank"), xhr.setRequestHeader("Cookie", "sessionKey=" + cookieValue); + } catch (e) {} + } + } + } catch (e) {} + xhr.overrideMimeType && xhr.overrideMimeType("text/plain"), -1 == window.location.protocol.indexOf("http") && "undefined" != typeof netscape && "undefined" != typeof netscape.security && netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"), + document.all || -1 != window.location.protocol.indexOf("http") || (xhr.withCredentials = "true", + xhr.setRequestHeader("Content-type", "text/plain")); + }, + data: {}, + timeout: 6e4, + dataFilter: function(data, type) { + return "json" == type && "" == data && (data = null), data; + } + }); +} + +if ("undefined" == typeof iLO || !iLO) { + var iLO = { + cache: iLOGlobal.cache, + remote_address: iLOGlobal.remote_address, + constants: iLOGlobal.constants, + logout_message: iLOGlobal.logout_message, + login_delay: iLOGlobal.login_delay, + default_language: iLOGlobal.default_language, + trim: function(val) { + return (val ? val.toString() : "").trim(); + }, + val: function(selector) { + return iLO.trim($(selector).val()); + }, + isFunction: function(arg) { + switch (typeof arg) { + case "function": + return "number" != typeof arg.nodeType; + + case "object": + if (null != arg && arg.constructor.toString().indexOf("Function()") > -1) return !0; + + default: + return !1; + } + }, + doLogout: function(msg, wait) { + try { + iLOGlobal.topPage.doLogout(msg, wait); + } catch (e) {} + }, + doReset: function(resetOptions) { + var reset_cause = "config"; + reset_cause = location.href.match("info_diagnostics") ? "diags" : "config", iLO.sendJsonRequest("ilo_status", "POST", "json/ilo_status", { + method: "reset_ilo", + cause: reset_cause + }, function(o, fname, error) { + if (iLO.checkError(o, fname, error)) iLO.isFunction(resetOptions.errorCallback) && resetOptions.errorCallback(o, fname, error); else { + iLO.clearSessionKey(); + var tmpver = iLOGlobal.cache.version, tmpcn = iLOGlobal.cache.cn; + iLOGlobal.init(), iLOGlobal.logout_message = { + text: resetOptions.message, + langKey: resetOptions.langKey + }, iLOGlobal.login_delay = resetOptions.login_delay, iLOGlobal.cache.version = tmpver, + iLOGlobal.cache.cn = tmpcn, iLO.favIcon(); + try { + iLOGlobal.topPage.stopAllPolling(); + } catch (e) {} + try { + iLOGlobal.features.alt_mode_err ? iLOGlobal.topPage.showAltModeErrorCases("logout") : iLOGlobal.topPage.showLogin(); + } catch (e) {} + } + }); + }, + isiLO5: function() { + return iLOGlobal.cache.version && jQuery.isValidString(iLOGlobal.cache.version) && iLOGlobal.cache.version.indexOf("9.0") >= 0 || iLOGlobal.alt_tokens && iLOGlobal.alt_tokens.PRODGEN && jQuery.isValidString(iLOGlobal.alt_tokens.PRODGEN) && "iLO 5" === iLOGlobal.alt_tokens.PRODGEN ? !0 : !1; + }, + normaliseLang: function(lang) { + return lang.substring(0, 2).toLowerCase(); + }, + getLanguageCookie: function() { + var lang = $.cookies.get("sessionLang"); + return lang; + }, + getLanguage: function() { + var lang = $.cookies.get("sessionLang"); + if (null == lang && null != iLOGlobal.accept_language) { + for (var i = 0; i < iLOGlobal.accept_language.length; i++) if (iLO.isSupportedLanguage(iLOGlobal.accept_language[i])) return lang = iLOGlobal.accept_language[i]; + lang = iLO.isSupportedLanguage(iLOGlobal.default_language) ? iLOGlobal.default_language : "en"; + } + return lang; + }, + setLanguage: function(lang) { + if (iLO.isSupportedLanguage(lang)) { + var expires = new Date(); + expires.setDate(expires.getDate() + 3650); + var r = $.cookies.set("sessionLang", lang, { + expiresAt: expires, + path: "/" + }); + return setTimeout(function() { + try { + iLOGlobal.topPage.jQuery.publish("/language/change", [ lang ]); + } catch (e) {} + }, 1), r; + } + }, + logEvent: function(data, reserved, debugLevel, severity) { + var s = ""; + jQuery.isValidString(data) ? s = data : jQuery.each(data, function(i, val) { + s += " : " + val; + }); + }, + setSupportedLanguages: function(langs) { + Array.isArray(langs) ? iLOGlobal.langs = langs : iLOGlobal.langs = [ { + lang: "en", + trans_name: "English", + version: "*" + } ]; + }, + isSupportedLanguage: function(lang) { + var langs = iLOGlobal.langs; + if (Array.isArray(langs)) { + for (var i = 0; i < langs.length; i++) if (lang == langs[i].lang) return !0; + return !1; + } + return "en" == lang; + }, + translatePage: function(reqLang, reqPathPrefix) { + var lang = reqLang ? reqLang : iLO.getLanguage(), pPrefix = reqPathPrefix ? reqPathPrefix : "../lang/"; + iLO.isSupportedLanguage(lang) && (document.all && jQuery.isValidString(iLOGlobal.titleLangKey) && (document.title = iLO.translateString(iLOGlobal.titleLangKey, document.title, pPrefix, lang)), + $("[data-localize],[rel*=localize]").each(function() { + var elem = $(this); + elem.removeData(); + var key = elem.attr("data-localize"); + "undefined" != typeof key || (key = elem.attr("rel").match(/localize\[(.*?)\]/)[1]); + var translatedText = iLO.translateString(key, null, pPrefix, lang); + jQuery.isValidString(translatedText) && ("INPUT" == elem.prop("tagName") ? elem.val(translatedText) : elem.html(translatedText)); + }), $("[langKey],[langAttr]").each(function() { + var attribute = $(this).attr("langAttr") || $(this)[0].getAttribute("langAttr"), key = $(this).attr("langKey") || $(this)[0].getAttribute("langKey"), defaultText = attribute ? $(this).attr(attribute) || $(this)[0].getAttribute(attribute) : "", tableTitle = $(this).attr("data-th") || $(this)[0].getAttribute("data-th"); + try { + tableTitle ? $(this).attr("data-th", iLO.translateString(key, attribute)) : $(this).attr(attribute, iLO.translateString(key, defaultText, pPrefix, lang)); + } catch (e) { + key = key; + } + })); + }, + translateString: function(key, defaultText, reqPathPrefix, reqLang, callback) { + var result = defaultText ? defaultText : "", lang = reqLang ? reqLang : iLO.getLanguage(), pPrefix = reqPathPrefix ? reqPathPrefix : iLOGlobal.reqPathPrefix; + if (iLO.isSupportedLanguage(lang) && $.isPlainObject(iLOGlobal.alt_tokens)) { + iLOGlobal.langData[lang] || ($.localize("strings", { + language: lang, + pathPrefix: pPrefix + lang, + callback: callback + }), iLOGlobal.langData[lang] = {}, jQuery.extend(iLOGlobal.langData[lang], jQuery.fn.localize.data.strings)); + var translatedText = ""; + try { + var keyArray = key.split("."), o = iLOGlobal.langData[lang]; + $(keyArray).each(function() { + o = o[this]; + }), translatedText = o; + } catch (e) {} + jQuery.isValidString(translatedText) ? result = translatedText : "en" !== lang && (result = iLO.translateString(key, defaultText, null, "en")), + result = result.replace(/#\w+#/g, function(matched) { + var val = iLOGlobal.alt_tokens[matched.replace(/#/g, "")]; + return val ? val : matched; + }); + } + return result; + }, + enableLanguageHotkey: function() { + $(document).on("keydown", "shift+l", function() { + if ("en" != iLO.getLanguage()) iLO.setLanguage("en"); else { + var langs = iLOGlobal.langs; + if (Array.isArray(langs)) { + for (var i = 0; i < langs.length; i++) if ("en" != langs[i].lang) { + iLO.setLanguage(langs[i].lang); + break; + } + } else iLO.setLanguage("en"); + } + return iLO.translatePage(), iLO.getLanguage(); + }); + }, + showWaitScreen: function(containerId, waitId, mainId) { + var cId = jQuery.isValidString(containerId) ? containerId : null, mId = jQuery.isValidString(mainId) ? mainId : null, wStr = jQuery.isValidString(waitId) ? "#" + waitId : "#waitContainer, .waitContainer"; + iLO.hideMainScreen(cId, mId), jQuery(wStr, jQuery(cId ? "#" + cId : "body")).show(); + }, + hideWaitScreen: function(containerId, waitId) { + var cId = jQuery.isValidString(containerId) ? containerId : null, wStr = jQuery.isValidString(waitId) ? "#" + waitId : "#waitContainer, .waitContainer"; + jQuery(wStr, jQuery(cId ? "#" + cId : "body")).hide(); + }, + showMainScreen: function(containerId, mainId, waitId) { + var cId = jQuery.isValidString(containerId) ? containerId : null, wId = jQuery.isValidString(waitId) ? waitId : null, mStr = jQuery.isValidString(mainId) ? "#" + mainId : "#bodyContent, .bodyContent"; + iLO.hideWaitScreen(cId, wId), jQuery(mStr, jQuery(cId ? "#" + cId : "body")).show(); + }, + hideMainScreen: function(containerId, mainId) { + var cId = jQuery.isValidString(containerId) ? containerId : null, mStr = jQuery.isValidString(mainId) ? "#" + mainId : "#bodyContent, .bodyContent"; + jQuery(mStr, jQuery(cId ? "#" + cId : "body")).hide(); + }, + clearErrorContainers: function(id) { + "undefined" != typeof id && id ? jQuery(id).empty().hide() : jQuery(".errorDisplay,#errorDisplay").empty().hide(); + }, + exportText: function(windowName, data) { + var win = window.open("", windowName.replace(/(?!^_)[^0-9a-zA-Z]/gi, ""), "status=0,toolbar=0,menubar=1,directories=0,resizable=1,scrollbars=1"); + win && win.document && (win.document.open("text/plain"), win.document.write(data), + win.document.close()); + }, + selectAll: function(id) { + document.getElementById(id).focus(), document.getElementById(id).select(); + }, + closeCSV: function(id) { + $("#" + id).dialog("close"); + }, + csv_popup: function(id, data, defaultFile, msgKey, msg) { + var saveHelp = "
", height = .85 * $(window).height(), width = .75 * $(window).width(), textboxHeight = 87, $id = $("#" + id); + $id.dialog({ + autoOpen: !1, + modal: !0, + width: width, + height: height, + position: "top", + closeText: "", + open: function() { + $(".ui-dialog-titlebar-close").attr("title", iLO.translateString("Close")); + }, + title: function() { + $(this).attr("data-localize", "csvOut").attr("id", "csv_title").text(iLO.translateString("csvOut", "CSV Output")); + } + }), $id.text(""), msgKey && jQuery.isValidString(msgKey) && msg && jQuery.isValidString(msg) && (saveHelp = '

' + iLO.translateString(msgKey, msg) + "

"), + iLO.canSaveFile() || (saveHelp += '

To save this data: Copy the text below, paste it into a text editor, and save as a .csv file.


', + textboxHeight = 80), iLOGlobal.features.alt_mode || (textboxHeight -= 5), $id.append([ saveHelp, "
", '", "

", '
', ' ', '", "
", "
" ].join("")), + $(".ui-dialog-titlebar-close").enable(), $id.dialog("open"), $("#csv_content").trigger("blur"), + iLO.translatePage(), iLO.canSaveFile() && $("#csvSave").show().on("click", function() { + defaultFile || (defaultFile = "logs.csv"), iLO.saveFile(data, defaultFile); + }); + }, + canSaveFile: function() { + return null != window.Blob; + }, + saveFile: function(data, fileNameIn) { + var text = new Blob([ "\ufeff", data ], { + encoding: "UTF-8", + type: "text/plain;charset=utf-8" + }), fileName = $.isValidString(fileNameIn) ? fileNameIn : "file.txt"; + null != window.navigator && null != window.navigator.msSaveOrOpenBlob ? window.navigator.msSaveOrOpenBlob(text, fileName) : saveAs(text, fileName); + }, + Html2Text: function(htmlString) { + return htmlString.replace(/&(?!\w+;)/g, "&").split("<").join("<").split(">").join(">").split('"').join(""").split("'").join("'"); + }, + getIEVersion: function() { + return iLOGlobal.ie; + }, + pianoStatusHTML: function(system_health, changing, dialog) { + var statusString = "
' : "", healthString = "ok"; + switch (("" + system_health).toUpperCase()) { + case "OP_STATUS_CRITICAL": + case "CRITICAL": + case "ERROR": + healthString = "error"; + break; + + case "OP_STATUS_DEGRADED": + case "WARNING": + healthString = "warning"; + break; + + case "UNKNOWN": + healthString = "unknown"; + } + return statusString += changeString + '>
' + healthString + "
" + statusChangeString + "
", + dialog && (statusString = '
' + healthString + "
"), + statusString; + }, + grommetStatusHTML: function(severity, size) { + var s, title, sort_order = 3, size_string = size ? "small" == size ? " status-icon--small" : "large" == size ? " status-icon--large" : "" : ""; + switch (severity.toUpperCase()) { + case "REPAIRED": + s = "ok", sort_order = 2, title = "Repaired"; + break; + + case "OK": + s = "ok", sort_order = 2, title = "OK"; + break; + + case "INFORMATIONAL": + s = "info", sort_order = 4, title = "Informational"; + break; + + case "DISABLED": + s = "disabled", sort_order = 4, title = "Disabled"; + break; + + case "CAUTION": + s = "warning", sort_order = 6, title = "Caution"; + break; + + case "WARNING": + s = "warning", sort_order = 6, title = "WARNING"; + break; + + case "CRITICAL": + s = "error", sort_order = 8, title = "Critical"; + break; + + case "ERROR": + s = "error", sort_order = 8, title = "ERROR"; + break; + + default: + s = "unknown", title = "Unknown"; + } + return s = ''; + }, + getStatusHtml: function(statusCode, options) { + if (!jQuery.isValidString(statusCode)) return ""; + var o = jQuery.isPlainObject(options) ? options : null, hasIcon = o && jQuery.existsNonNull(o.icon) && o.icon === !1 ? !1 : !0, hasLabel = o && jQuery.existsNonNull(o.label) && o.label === !1 ? !1 : !0, statusObj = iLO.getStatusIcon(statusCode), imgStyle = jQuery.isValidString(statusObj.style) ? statusObj.style : ""; + o && jQuery.isValidString(o.style) && (imgStyle = o.style); + var out = ''; + return hasIcon && (out += [ '' ].join(""), + statusObj.svg ? out += statusObj.svg.replace("control-icon ", "control-icon icon13nt " + (o && o.noSvgClass || iLOGlobal.ie && statusObj.className.indexOf("indicator") > -1 ? " " : statusObj.className + " ")) : (out += ' 0 && (out += 'style="' + imgStyle + '" '), out += "/>"), out += ""), + out += hasLabel ? [ hasIcon ? " " : "", '', statusObj.label, "" ].join("") : ""; + }, + getStringLabel: function(statusStr) { + if (!jQuery.isValidString(statusStr)) return ""; + var langKey = statusStr.toUpperCase(), moduleStr = langKey.match(/(\D+)|(\d+)/g); + 2 !== moduleStr.length && (moduleStr = ""); + var label = "", out = ""; + switch (moduleStr[0]) { + case "FAN BLOCK ": + label = iLO.translateString("fanBlock", moduleStr[0]), out = [ '', label, " ", moduleStr[1], "" ].join(""); + break; + + case "FAN ": + label = iLO.translateString("fan", moduleStr[0]), out = [ '', label, " ", moduleStr[1], "" ].join(""); + break; + + default: + label = iLO.translateString("StrLabel." + langKey, statusStr), out = [ '', label, "" ].join(""); + } + return out; + }, + getStatusIcon: function(statusCode) { + var iconObj = {}; + return jQuery.extend(iconObj, iLO.getStatusIconImg(statusCode), iLO.getStatusIconLabel(statusCode)), + iconObj; + }, + getStatusIconImg: function(statusCode) { + if (!jQuery.isValidString(statusCode)) return null; + var imgObj = { + src: "../images/icon_status_07_unknown.svg" + }; + switch (statusCode.toUpperCase()) { + case "ON": + imgObj.svg = "" + iLOGlobal.icons.power, imgObj.className = "powered-on"; + break; + + case "OFF": + imgObj.svg = "" + iLOGlobal.icons.power, imgObj.className = "powered-off"; + break; + + case "UID_ON": + imgObj.svg = "" + iLOGlobal.icons.indicator, imgObj.className = "indicator-on"; + break; + + case "UID_OFF": + imgObj.svg = "" + iLOGlobal.icons.indicator, imgObj.className = "indicator-off"; + break; + + case "UID_BLINK": + imgObj.svg = "" + iLOGlobal.icons.indicator, imgObj.className = "indicator-blink"; + break; + + case "OK": + case "OP_STATUS_OK": + case "OP_STATUS_UP": + case "INTERCONNECT_TRAY_PORT_STATUS_OK": + case "OP_STATUS_COMPLETED": + case "REPAIRED": + case "REDUNDANT": + case "PDU_REDUNDANT": + case "AMS_READY": + case "BOOT_PROGRESS_FABRICLOGINSUCCESS": + case "BOOT_PROGRESS_COMPLETED": + imgObj.src = "../images/icon_status_08_normal.svg"; + break; + + case "INFORMATIONAL": + case "OP_STATUS_OTHER": + case "OP_STATUS_DORMANT": + case "OP_STATUS_POWER_MODE": + case "OP_STATUS_STARTING": + case "OP_STATUS_STOPPING": + case "AMS_UNAVAILABLE": + case "NO_SUPPORTING_CPU": + case "OP_STATUS_NEGOTIATING": + case "OP_STATUS_NOT_CONNECTED": + case "AMS_UNAVAILABLE": + case "BOOT_PROGRESS_TARGETFOUND": + case "BOOT_PROGRESS_LUNFOUND": + case "BOOT_PROGRESS_LOGGEDINTOTGT": + case "BOOT_PROGRESS_IMAGEDOWNLOAD": + case "BOOT_PROGRESS_OSHANDOFF": + imgObj.src = "../images/icon_status_06_informational.svg"; + break; + + case "WARNING": + case "OP_STATUS_WARNING": + imgObj.src = "../images/icon_status_04_warning.svg"; + break; + + case "MINOR FAILURE": + case "DEGRADED/WARNING": + case "CAUTION": + case "OP_STATUS_STOPPED": + case "OP_STATUS_DEGRADED": + case "OP_STATUS_STRESSED": + case "OP_STATUS_LOCAL_FAULT": + case "OP_STATUS_REMOTE_FAULT": + case "OP_STATUS_NOT_INSTALLED": + case "NOT_REDUNDANT": + case "PDU_NOT_REDUNDANT": + case "NOT_ACTIVE_WARN": + case "NOT_SUPPORTED": + imgObj.src = "../images/icon_status_03_minor.gif"; + break; + + case "OP_STATUS_PREDICTIVE_FAILURE": + case "OP_STATUS_MISMATCHED": + case "OP_STATUS_ABORTED": + case "OP_STATUS_SUPPORTING_ENTITY_IN_ERROR": + case "OP_STATUS_LINK_DOWN": + case "OP_STATUS_DOWN": + case "OP_STATUS_SHUTDOWN": + case "OP_STATUS_LOOP_DEGRADED": + case "OP_STATUS_LOOP_FAILED": + case "INTERCONNECT_TRAY_PORT_STATUS_MISMATCH": + case "OP_STATUS_MAJOR": + imgObj.src = "../images/icon_status_02_major.gif"; + break; + + case "MAJOR FAILURE": + case "CRITICALFAILURE": + case "CRITICAL": + case "FAILED": + case "OP_STATUS_ERROR": + case "OP_STATUS_FAILED": + case "OP_STATUS_CRITICAL": + case "OP_STATUS_NON_RECOVERABLE_ERROR": + case "OP_STATUS_LOST_COMMUNICATION": + case "FAILED_REDUNDANT": + case "LIC_EXPIRED": + imgObj.src = "../images/icon_status_01_critical.svg"; + break; + + case "OP_STATUS_ABSENT": + case "OP_STATUS_DISABLED": + case "OP_STATUS_IN_SERVICE": + case "BOOT_PROGRESS_NONE": + imgObj.src = "../images/icon_status_05_disabled.svg"; + break; + + case "LOCKED": + imgObj.src = "../images/icon_lock_16.gif"; + break; + + case "UNKNOWN": + case "OP_STATUS_UNKNOWN": + case "OP_STATUS_NO_CONTACT": + case "RESET": + imgObj.src = "../images/icon_status_07_unknown.svg"; + break; + + case "OP_STATUS_X": + imgObj.src = "../images/icon-x.png", iLOGlobal.features.alt_mode_en && "H3C" == iLOGlobal.features.alt_vnd ? jQuery.extend(imgObj, { + style: "border:0;width:16px; height:16px; vertical-align:middle;" + }) : jQuery.extend(imgObj, { + style: "border:0;width:16px; height:16px;" + }); + break; + + case "OP_STATUS_CHECK": + imgObj.src = "../images/icon-checkmark.png", iLOGlobal.features.alt_mode_en && "H3C" == iLOGlobal.features.alt_vnd ? jQuery.extend(imgObj, { + style: "border:0;width:8px; height:8px; vertical-align:middle;" + }) : jQuery.extend(imgObj, { + style: "border:0;width:8px; height:8px;" + }); + } + return imgObj; + }, + getStatusIconLabel: function(statusCode) { + var labelObj = {}, langKey = ""; + if (!jQuery.isValidString(statusCode)) return labelObj.label = iLO.translateString("status_labels.UNKNOWN", "Unknown"), + labelObj.langKey = "status_labels.UNKNOWN", labelObj; + switch (statusCode.toUpperCase()) { + case "NOT PRESENT": + case "PRESENT": + case "PRESENT/NOT ENABLED": + case "NOT SUPPORTED": + case "HOST IS UNNAMED": + langKey = statusCode.toUpperCase().replace(/[\s\/]/g, "_"); + break; + + case "OP_STATUS_ABSENT": + langKey = "OP_STATUS_NOT_INSTALLED"; + break; + + default: + langKey = statusCode.toUpperCase(); + } + return labelObj.label = iLO.translateString("status_labels." + langKey, langKey), + labelObj.langKey = "status_labels." + langKey, labelObj; + }, + getFlashProgressKey: function(flashType) { + var key; + switch (flashType) { + case "ILO_DEVICE": + case "ILO_DEVICE_FIRMWARE": + key = "appl.fwUpdateProgress"; + break; + + case "FILES_DEVICE": + key = "appl.filesDeviceProgress"; + break; + + case "ILO_DEVICE_LANGPK": + key = "appl.langPackProgress"; + break; + + default: + key = "appl.installProgress"; + } + return key; + }, + getFlashProgressStr: function(flashType) { + var key = "adm_firmware.flashImg"; + switch (flashType) { + case "FILES_DEVICE": + case "ILO_DEVICE_LANGPK": + key = "adm_lang.pcntComplete"; + break; + + case "ILO_DEVICE": + case "ILO_DEVICE_FIRMWARE": + default: + key = "adm_firmware.flashImg"; + } + return iLO.translateString(key, "% Flashing Image..."); + }, + getFlashTitle: function(flashType) { + var key = "adm_firmware.flashing"; + iLO.translateString(key, "% Flashing Firmware Image, please wait ..."); + switch (flashType) { + case "FILES_DEVICE": + key = "adm_lang.installing"; + break; + + case "ILO_DEVICE_LANGPK": + key = "adm_lang.installing"; + break; + + case "ILO_DEVICE": + case "ILO_DEVICE_FIRMWARE": + default: + key = "adm_firmware.flashing"; + } + return iLO.translateString(key, "% Flashing Firmware Image, please wait ..."); + }, + formatString: function(source, in_format) { + if (!jQuery.existsNonNull(in_format)) return source; + switch (in_format.toLowerCase()) { + case "percentage_10": + var i = parseInt(source, 10); + if (i) { + source = "" + i / 10 + "%"; + break; + } + + case "percentage": + source += "%"; + break; + + case "volts": + source += " Volts"; + break; + + case "celsius": + -1 == source ? source = "N/A" : source += "C"; + break; + + case "fahrenheit": + -1 == source ? source = "N/A" : source += "F"; + break; + + case "watts": + source += " Watts"; + break; + + case "mhz": + source += " MHz"; + break; + + case "kb": + source += " KB"; + break; + + case "pwr_reg_mode": + switch (source) { + case "osc": + source = "OS Control"; + break; + + case "dyn": + source = "Dynamic"; + break; + + case "max": + source = "Max (static high)"; + break; + + case "min": + source = "Min (static low)"; + break; + + case "unknown": + default: + source = "Unknown"; + } + break; + + default: + source += " " + in_format; + } + return source; + }, + buildLink: function(id) { + var link; + switch (id) { + case "support": + link = '' + iLO.translateString("alt.support_web_addr", "http://www.hpe.com/support/ilo4") + ""; + break; + + case "prod": + default: + link = '' + iLO.translateString("alt.product_web_addr", "http://www.hpe.com/info/ilo") + ""; + } + return link; + }, + httpSuccess: function(status) { + var xhr = {}; + return xhr.status = status, jQuery.httpSuccess(xhr); + }, + checkError: function(o, fname, error, errId) { + if (jQuery.existsNonNull(error) && "success" != error) { + var errorString = ": call=" + fname + "; error=" + error; + return jQuery.isPlainObject(o) && (403 !== error || 1 != o.message || o.details ? 0 !== error || "nocontent" !== o.message || o.details ? (jQuery.isValidString(o.message) && (errorString += "; message=" + o.message), + o.details && (errorString += "; details=" + o.details)) : errorString = ': ' + iLO.translateString("core.connectionError", "Encountered a communication problem. Try again.") + "" : errorString = ': ' + iLO.translateString("403_Forbidden", "User does not have required privileges on iLO to perform this operation") + ""), + jQuery.isValidString(errId) && $(document).ready(function() { + $("#" + errId).displayError({ + langKey: "errMakeCall", + text: "Error making call", + message: errorString + }); + }), '' + iLO.translateString("errMakeCall", "Error making call") + "" + errorString; + } + return !1; + }, + isLocal: function() { + var loc = !1; + try { + loc = "file:" === window.location.protocol; + } catch (e) {} + return loc; + }, + getBaseUrl: function(proxyPath, protocol) { + var proxy = "undefined" == typeof proxyPath || "" === proxyPath ? "/" : proxyPath, port = ""; + try { + port = "" === window.location.port ? "" : ":" + window.location.port; + } catch (e) { + port = ""; + } + var proto = (protocol ? protocol : window.location.protocol) + "//", host = window.location.hostname; + return host.indexOf(":") > -1 ? (-1 === host.indexOf("[") && -1 === host.indexOf("]") && (host = "[" + host + "]"), + host = iLO.Html2Text(host)) : host = iLO.fixedEncodeURIComponent(host), proto + host + port + proxy; + }, + session_info: function() { + try { + return iLOGlobal.cache.session_info; + } catch (e) { + return null; + } + }, + isBlade: function() { + try { + return iLOGlobal.cache.masthead.blade; + } catch (e) {} + return !1; + }, + isERS: function() { + try { + return iLOGlobal.cache.masthead.ers; + } catch (e) {} + return !1; + }, + isSyFrame: function() { + try { + return "t_class" == iLOGlobal.cache.masthead.blade_type; + } catch (e) {} + return !1; + }, + hasLicensingFeature: function() { + try { + return "1" == iLOGlobal.cache.masthead.licensing; + } catch (e) {} + return !1; + }, + isSLwithPPIC: function() { + try { + return iLOGlobal.cache.masthead.sl_with_ppic; + } catch (e) {} + return !1; + }, + isApplication: iLOGlobal.isApplication, + init: function(options) { + var config = { + helpUrl: "help.html", + global: !0 + }, settings = jQuery.extend(config, options); + jQuery.extend(iLOGlobal, settings); + var domainObj = iLOGlobal.cache; + return domainObj.isBlade = !1, domainObj.session_key ? !0 : !1; + }, + getSessionKey: function() { + var cookie_key = jQuery.cookies.get("sessionKey"), domain_key = iLOGlobal.cache.session_key; + return domain_key ? (domain_key != cookie_key && $.cookies.set("sessionKey", domain_key, { + secure: !0 + }), domain_key) : cookie_key ? (iLOGlobal.cache.session_key = cookie_key, cookie_key) : null; + }, + clearSessionKey: function() { + iLO.setCookie("sessionKey", null), iLOGlobal.cache.session_key = null; + }, + startHtml5Irc: function() { + iLO.setCookie("irc", [ "last", "html5" ]); + try { + iLOGlobal.topPage.appFrame.window.startHtml5Irc(); + } catch (e) { + "undefined" == typeof iLOGlobal.topPage.appFrame && alert("Standalone HTML5 Console not yet available"), + $.log("startHtml5Irc", e); + } + }, + startIrc: function(httpsPort) { + iLO.setCookie("irc", [ "last", "irc" ]); + var alt_mode = iLOGlobal.features.alt_mode ? iLOGlobal.features.alt_mode : 0, host = window.location.href, port_value = "" === window.location.port ? httpsPort : window.location.port, addr = iLO.fixedEncodeURIComponent(window.location.hostname); + addr.indexOf(":") >= 0 && !addr.match(/\133/) && (addr = "[" + addr + "]"), host = host.split("/html")[0], + host += "/html/IRC.application", host += "?addr=" + addr + "&sessionKey=" + iLO.getSessionKey() + "&lang=" + iLO.getLanguage() + "&port=" + port_value + "&alt_mode=" + alt_mode + "&cofc_goback=false", + iLO.logEvent("IRC URL:" + host, null, 1, 1); + var ircFrame = null; + try { + ircFrame = iLOGlobal.topPage.window.frames.ircFrame.window; + } catch (e) { + ircFrame = window; + } + ircFrame.location.href = host; + }, + startJavaRc: function() { + if (void 0 != iLO.getIEVersion() && iLO.getIEVersion() < 11) alert(iLO.translateString("rc_info.ieVerNotSupported", "The Java Web Start Integrated Remote Console is not supported on this version of Internet Explorer. Consider using the .NET Integrated Remote Console (.NET IRC).")); else { + iLO.setCookie("irc", [ "last", "jrc" ]); + var jnlpObj = { + baseUrl: iLO.getBaseUrl(), + sessionKey: iLO.getSessionKey(), + langId: iLO.getLanguage() + }, blob = new Blob([ $("#jnlpTemplate").jqote(jnlpObj) ], { + type: "application/x-java-jnlp-file" + }); + saveAs(blob, "iLO-jirc.jnlp", !0); + } + }, + startJavaIrc: function(httpsPort) { + iLO.setCookie("irc", [ "last", "jrc" ]); + var host = iLO.fixedEncodeURIComponent(window.location.hostname); + jQuery.isValidString(host) || (host = iLOGlobal.remote_address), host.indexOf(":") >= 0 && (-1 == host.indexOf("[") || -1 == host.indexOf("]")) && (host = "[" + host + "]"), + host = host + ":" + httpsPort; + var appletFrame = null; + try { + appletFrame = iLOGlobal.topPage.appletFrame.window; + } catch (e) { + appletFrame = window; + } + appletFrame.location = "https://" + host + "/html/java_irc.html?lang=" + iLO.getLanguage(); + }, + setContextHelpUrl: function(url) { + iLOGlobal.helpUrl = url; + }, + openContextHelp: function(helpFile) { + var optionsList = "top=40,left=50,width=800,height=600,location=no,menubar=no,status=no,resizable=yes,scrollbars=yes", topic = (jQuery.isValidString(helpFile) ? helpFile : iLOGlobal.helpUrl).replace(".html", ""), helpUrl = "../lang/" + iLO.getLanguage() + "/help/help.html?topic=" + topic, helpTitle = "helpWin:" + iLO.fixedEncodeURIComponent(window.location.hostname); + helpTitle = helpTitle.replace(/(?!^_)[^0-9a-zA-Z]/gi, ""), iLOGlobal.helpWin = window.open(helpUrl, helpTitle, optionsList), + iLOGlobal.helpWin.focus(); + }, + displayMsgDetails: function(args, errorDivId) { + var myId = errorDivId ? errorDivId : "errorDisplay"; + if ($errorDisplay = $("#" + myId), $errorDisplay.html('

'), + $.isPlainObject(args)) { + if (args.status) { + var system_health = args.status; + isNaN(parseInt(system_health, 10)) || (system_health = 200 > system_health ? "INFORMATIONAL" : 400 > system_health ? "OK" : 500 > system_health ? "ERROR" : "CRITICAL"), + $(".hp-status", $errorDisplay).replaceWith(iLO.pianoStatusHTML(system_health, !1, !0)); + } + if (args.message_key && $(".hp-message", $errorDisplay).attr("data-localize", args.message_key), + args.message && $(".hp-message", $errorDisplay).html(args.message), args.details_key && $(".hp-details p span", $errorDisplay).attr("data-localize", args.details_key), + args.details && $(".hp-details p span", $errorDisplay).html(args.details), args.resolution_key && $(".hp-resolution", $errorDisplay).attr("data-localize", args.resolution_key), + args.resolution && ($(".hp-resolution", $errorDisplay).text(args.resolution), $(".hp-resolution-container").show()), + Array.isArray(args.actions)) { + $(".hp-actions", $errorDisplay).show(); + for (var i in args.actions) { + var $newLi = $("
  • "); + args.actions[i].action_key && $newLi.attr("data-localize", args.actions[i].action_key), + args.actions[i].action && $newLi.html(args.actions[i].action), $(".hp-actions", $errorDisplay).append($newLi); + } + } + } + iLO.translatePage(), $errorDisplay.fadeIn(); + }, + getErrorInfo: function(uri, jqXHR, textStatus, errorThrown) { + var response; + try { + response = JSON.parse(jqXHR.responseText), response && (!response.hasOwnProperty("errorMessage") && response.hasOwnProperty("Message") && (response.errorMessage = response.message), + !response.hasOwnProperty("resolution") && response.hasOwnProperty("recommendedActions") ? response.resolution = response.recommendedActions ? response.recommendedActions.join("\n") : null : response.hasOwnProperty("Resolution") && (response.resolution = response.Resolution)); + } catch (err) { + response = { + errorMessage: iLO.translateString("core.connectionError", iLO.fixedEncodeURIComponent(window.location.hostname)), + message: iLO.translateString("core.connectionError", iLO.fixedEncodeURIComponent(window.location.hostname)) + }; + } + return response.uri = uri, response.jqXHR = jqXHR, response.textStats = textStatus, + response.errorThrown = errorThrown, response; + }, + sendJSONRequest: function(req) { + return iLO.sendJsonRequest(req.callName, req.httpMethod, req.reqUrl, req.jsonData, req.callback, req.type, req.maxWait); + }, + sendJsonRequest: function(callName, httpMethod, my_url, jsonData, callback, type, maxWait) { + if (document.all && iLO.isLocal()) { + var ip = iLOGlobal.remote_address, cookieString = iLO.getCookie("remote_address"); + $.isValidString(cookieString) && (ip = cookieString); + for (var msg = jQuery.isValidIPAddress(ip) ? ip : "enter your iLO IP here"; !jQuery.isValidIPAddress(ip); ) ip = prompt("iLO IP address:", msg); + iLOGlobal.remote_address = ip, iLO.setCookie("remote_address", ip); + } + var my_timeout = "undefined" == typeof maxWait || "" == maxWait ? jQuery.ajaxSettings.timeout : maxWait; + "json/" == my_url.match("^json/") && (my_url = "/" + my_url), "rest/" == my_url.match("^rest/") && (my_url = "/" + my_url), + iLO.isLocal() && (my_url = "https://" + iLOGlobal.remote_address + my_url); + var custHeaders = {}; + return "POST" != httpMethod || "/json/login_session" == my_url.match("/json/login_session$") && "login" == jsonData.method || "/blob/" == my_url.match("^/blob/") || "/rest/" == my_url.match("^/rest/") ? ("/blob/" == my_url.match("^/blob/") || "/rest/" == my_url.match("^/rest/")) && (custHeaders = { + "X-Auth-Token": iLO.getSessionKey(), + "X-Client-Type": "Browser" + }) : jsonData.session_key = iLO.getSessionKey() || "", $.ajax({ + url: my_url, + headers: custHeaders, + type: httpMethod, + dataType: "json", + data: jsonData ? JSON.stringify(jsonData) : "", + timeout: my_timeout, + tryCount: 0, + retryLimit: 3, + success: function(data, textStatus) { + "/json/masthead" == my_url.match("/json/masthead$") && (iLOGlobal.cache.masthead = data), + "/json/login_session" == my_url.match("/json/login_session$") && "GET" == httpMethod && (iLO.setAltMode(data), + $.publish("login_session"), iLOGlobal.features.alt_mode_en && (iLOGlobal.titleLangKey = "appName.shortName", + iLO.setSupportedLanguages(data.langs), jQuery.existsNonNull(data.default_lang) && (iLOGlobal.default_language = data.default_lang), + iLOGlobal.features.alt_mode_err && (iLO.getSessionKey() ? iLO.doLogout() : iLOGlobal.topPage.showAltModeErrorCases())), + iLOGlobal.setTitle || (iLO.setSupportedLanguages(data.langs), iLO.setBrowserTitle(data)), + iLOGlobal.cache.version && "undefined" != typeof iLOGlobal.cache.version || (data.version && (iLOGlobal.cache.version = data.version), + data.ilo_fw_pass && jQuery.isValidString(data.ilo_fw_pass) && (iLOGlobal.cache.version = iLOGlobal.cache.version + " " + data.ilo_fw_pass)), + iLOGlobal.cache.cn && "undefined" != typeof iLOGlobal.cache.cn || !data.cn || !jQuery.isValidString(data.cn) || (iLOGlobal.cache.cn = data.cn), + iLO.translatePage()), iLO.isFunction(callback) && callback(data ? data : "", callName, textStatus); + }, + error: function(xhr, textStatus, errorThrown) { + var result, xhr_status = -1; + try { + xhr_status = xhr.status; + } catch (e) { + xhr_status = -1; + } + var errorInfo = iLO.getErrorInfo(this.url, xhr, textStatus, errorThrown); + if ("undefined" != typeof textStatus && textStatus && "offline" == textStatus && 0 == xhr_status && (xhr_status = -1, + result = {}, result.message = "offline", result.details = null), "login" !== callName && (xhr_status >= 12e3 && 13e3 > xhr_status && "login_session" !== callName && "logout" !== callName || errorThrown && "timeout" === errorThrown) && (this.tryCount++, + this.tryCount <= this.retryLimit)) return void $.ajax(this); + if (xhr_status >= 12e3 && 13e3 > xhr_status && "login_session" !== callName && "logout" !== callName) return jQuery.log("Connection error. status = " + xhr_status + "; call = " + callName + "\n"), + iLO.doLogout({ + langKey: "login.connectionLost", + text: "Connection error. status = " + xhr_status + "; call = " + callName + "\n" + }, 0), !1; + try { + errorThrown && "timeout" === errorThrown ? (result = {}, result.message = "timeout", + result.details = xhr.responseText) : xhr.responseText.length > 0 ? result = JSON.parse(xhr.responseText) : (result = {}, + result.message = "nocontent", result.details = null); + } catch (e) { + result = {}, result.message = "parseerror"; + try { + result.details = xhr.responseText; + } catch (e2) { + result.details = e2.message; + } + } + var sessionLost = !1; + if (("Forbidden" == errorThrown || "Unauthorized" == errorThrown) && Array.isArray(errorInfo.Messages)) for (var i = 0, max = errorInfo.Messages.length; max > i; i++) if (/novalidsession/i.test(errorInfo.Messages[i].MessageID)) { + sessionLost = !0; + break; + } + if (errorThrown && "timeout" === errorThrown) ; else { + if (sessionLost || result.message && "JS_ERR_LOST_SESSION" === result.message) { + if (iLO.isApplication && "logout" !== callName) { + try { + iLOGlobal.topPage.doLogout({ + langKey: "login.sessionExp", + text: "Session expired." + }, 0); + } catch (e) {} + return !1; + } + iLO.logout_message = "Invalid Session. Please log in.", iLO.login_delay = 0, iLO.clearSessionKey(); + var $dialog = $("#login_dialog"); + return $dialog.length < 1 && $dialog.is(":visible") ? !1 : (iLO.hideWaitScreen(), + $dialog.remove(), !1); + } + if (-1 == xhr_status) ; else if (0 == xhr_status && iLO.isLocal()) { + $("#local_dialog").remove(), $('
    ').appendTo("body"); + var $local_dialog = $("#local_dialog"); + return $local_dialog.hide(), $.get("html/login_local.html", function(data) { + $local_dialog.html(data).dialog({ + autoOpen: !1, + title: "Please Accept Certificate", + width: 500, + height: 500, + modal: !0, + closeText: "", + open: function() { + $(".ui-dialog-titlebar-close").attr("title", iLO.translateString("Close")); + }, + close: function(event, ui) { + location.reload(); + } + }), $local_dialog.dialog("open"); + }), !1; + } + } + return jQuery.extend(errorInfo, result), iLO.isFunction(callback) && callback(errorInfo, callName, xhr_status), + !0; + } + }); + }, + getCache: function(req) { + if (iLOGlobal.cache[req.name]) { + var generic_ttl = 2e4, cacheData = iLO.getCacheData(req.name, generic_ttl), cacheAvail = null !== cacheData; + if (cacheAvail && 1 != req.fresh && 1 != req.dynamic) return req.callback && req.callback.call(this, cacheData), + cacheData; + } + var jsonReq = { + callName: req.name, + reqUrl: "/json/" + req.name, + httpMethod: "GET" + }; + return jsonReq.callback = function(o, fname, error) { + var msg = iLO.checkError(o, fname, error); + if (msg) { + if (!req.callback) return !1; + req.callback(o, fname, error); + } else if (jQuery.isPlainObject(o)) { + if (iLO.setCacheData(req.name, o), ("session_info" == req.name || "login_session" == req.name) && ("login_session" != req.name || iLOGlobal.setTitle || iLO.setBrowserTitle(o), + setTimeout(function() { + $.publish("/" + req.name, [ o ]); + }, 1)), !req.callback) return !1; + req.callback(o, fname, error); + } + return null; + }, iLO.sendJSONRequest(jsonReq), null; + }, + getCacheData: function(name, ttl) { + if (iLOGlobal.cache[name]) { + var time = new Date().getTime(); + return time - iLOGlobal.cache[name].timestamp > ttl ? null : iLOGlobal.cache[name]; + } + return null; + }, + setCacheData: function(name, obj) { + iLOGlobal.cache[name] = obj, iLOGlobal.cache[name] && (iLOGlobal.cache[name].timestamp = new Date().getTime()); + }, + setBrowserTitle: function(o) { + var title = iLO.translateString("appName.shortName"); + o.cn && (title += jQuery.isValidString(o.server_name) ? ": " + o.server_name + " - " + o.cn : ": " + o.cn, + o.blade && (o.bay_num && (title = title + " - " + o.bay_num), o.enc_name && (title = title + " - " + o.enc_name), + o.rack_name && (title = title + " - " + o.rack_name))); + try { + iLOGlobal.topPage.document.title = title; + } catch (e) {} + iLOGlobal.topPage.jQuery(iLOGlobal.topPage.document).attr("title", title), iLOGlobal.setTitle = !0; + }, + setCookie: function(cookie, cookieValue) { + if (null == cookieValue) return $.cookies.del(cookie), !0; + var cookieString = $.cookies.get(cookie); + if (cookieString ? cookieString += "," : cookieString = "", Array.isArray(cookieValue) && cookieValue.length >= 2 && !(cookieValue.length % 2)) jQuery.each(cookieValue, function(index, value) { + if (index % 2) value && (cookieString = [ cookieString, value, "," ].join("")); else { + var fieldValue = iLO.getCookie(cookie, value); + if (fieldValue) { + var re = new RegExp(value + "(.*?)\\,", "g"); + cookieString = cookieString.replace(re, ""); + } + index + 1 < cookieValue.length && cookieValue[index + 1] && (cookieString = [ cookieString, value, "=" ].join("")); + } + }), "," == cookieString.charAt(cookieString.length - 1) && (cookieString = cookieString.substring(0, cookieString.length - 1)); else { + if (!jQuery.isValidString(cookieValue)) return !1; + cookieString = cookieValue; + } + if ($.cookies.del(cookie), "sessionkey" != cookie.toLowerCase()) { + var expdate = new Date(); + expdate.setMonth(new Date().getYear() + 100), $.cookies.set(cookie, cookieString, { + expiresAt: expdate + }); + } else $.cookies.set(cookie, cookieString, { + secure: !0 + }); + return null; + }, + getCookie: function(cookie, field) { + var cookieString = $.cookies.get(cookie); + if (!cookieString) return cookieString; + if ("undefined" == typeof field || !field) return cookieString; + var array1 = []; + return array1 = cookieString.split(/[,&]/), cookieString = null, jQuery.each(array1, function(index, value) { + var array2 = value.split("="); + 2 == array2.length && array2[0] == field && (cookieString = array2[1]); + }), cookieString; + }, + getSearchValue: function(searchString, key) { + searchString = iLO.Html2Text(searchString); + var value = ""; + return searchString.indexOf(key + "=") > -1 && (value = searchString.substring(searchString.indexOf(key + "=") + key.length + 1), + value.indexOf("&") > -1 && (value = value.substring(0, value.indexOf("&"))), value.indexOf("'") > -1 && (value = value.substring(0, value.indexOf("'"))), + value.indexOf('"') > -1 && (value = value.substring(0, value.indexOf('"'))), value.indexOf(";") > -1 && (value = value.substring(0, value.indexOf(";"))), + value = unescape(value), value = value.replace(/[^A-Za-z0-9/_-]/g, "")), value; + }, + openLink: function(pageURL, tabIndex) { + tIndex = jQuery.existsNonNull(tabIndex) ? tabIndex : 0; + var navigationFrame = null; + try { + navigationFrame = iLOGlobal.topPage.appFrame.frameDirectory.window; + } catch (e) {} + navigationFrame && navigationFrame.openLink(pageURL, tIndex); + }, + refreshTree: function() { + var navigationFrame = null; + try { + navigationFrame = iLOGlobal.topPage.appFrame.frameDirectory.window; + } catch (e) {} + navigationFrame && navigationFrame.refreshTree(); + }, + favIcon: function(system_health) { + try { + var path; + switch (system_health) { + case "OP_STATUS_CRITICAL": + path = "images/status_critical_48.png"; + break; + + case "OP_STATUS_DEGRADED": + path = "images/status_minor_48.png"; + break; + + case "OP_STATUS_OTHER": + case "OP_STATUS_UNKNOWN": + path = "images/status_unknown_48.png"; + break; + + case "INFORMATIONAL": + path = "images/status_info_48.png"; + break; + + default: + path = iLOGlobal.features.alt_mode_en && !iLOGlobal.features.alt_mode_err ? "alt/images/favico.png" : "favicon.ico"; + } + path = navigator.userAgent.indexOf("Edge") >= 0 && "localhost" !== window.location.hostname ? iLO.getBaseUrl().replace("https", "http") + path : "/" + path, + path += "?v=" + new Date().getTime(), iLOGlobal.topPage.jQuery(iLOGlobal.topPage.document).find("link[rel='shortcut icon']").attr("href", path); + } catch (e) { + console.log(e.message); + } + return path; + }, + setAltMode: function(data) { + data && jQuery.isPlainObject(data.alt) && jQuery.existsNonNull(data.alt.mode) ? (iLOGlobal.features.alt_mode = data.alt.mode, + iLOGlobal.features.alt_mode_en = data.alt.mode != iLOGlobal.constants.alt_mode.HP, + iLOGlobal.features.alt_mode_err = data.alt.mode >= iLOGlobal.constants.alt_mode.Errors) : (iLOGlobal.features.alt_mode = 0, + iLOGlobal.features.alt_mode_en = !1, iLOGlobal.features.alt_mode_err = !1), data && jQuery.isPlainObject(data.alt) && jQuery.existsNonNull(data.alt.level) ? iLOGlobal.features.alt_level = data.alt.level : iLOGlobal.features.alt_level = iLOGlobal.constants.alt_level.Heavy, + data && jQuery.isPlainObject(data.alt) && jQuery.existsNonNull(data.alt.vnd) && (iLOGlobal.features.alt_vnd = data.alt.vnd), + iLOGlobal.alt_tokens = data.moniker; + }, + clearAltMode: function() { + iLOGlobal.features.alt_mode = null, iLOGlobal.features.alt_mode_en = null, iLOGlobal.features.alt_mode_err = null, + iLOGlobal.features.alt_level = null; + }, + fixedEncodeURIComponent: function(str) { + return encodeURIComponent(str).replace(/[!'()*]/g, function(c) { + return "%" + c.charCodeAt(0).toString(16); + }); + }, + showToast: function(options) { + try { + iLOGlobal.topPage.appFrame.showToastMessage(options); + } catch (e) { + $.error("showToast error: " + e.message); + } + }, + alert: function(options, callback) { + try { + iLOGlobal.topPage.appFrame.showAlertMessage(options, callback); + } catch (e) { + $.error("showAlertMessage error: " + e.message); + } + }, + confirm: function(options, callback) { + try { + iLOGlobal.topPage.appFrame.showConfirmMessage(options, callback); + } catch (e) { + $.error("showConfirmMessage error: " + e.message); + } + }, + setEventPoll: function(interval) { + var doc = null != iLOGlobal.applicationDoc ? iLOGlobal.applicationDoc : document; + try { + doc.ownerDocument && null == doc.ownerDocument && (doc.ownerDocument = doc); + } catch (e) {} + var $doc = $(doc), $elem = $doc.find("#ui_events"); + if ($elem.length < 1 && ($doc.append('
    '), $elem = $doc.find("#ui_events")), + jQuery.existsNonNull(interval)) { + var cur_date = new Date().getTime(); + return "undefined" == typeof iLOGlobal.cache.eventPoll && (iLOGlobal.cache.eventPoll = { + timestamp: 0 + }), cur_date - iLOGlobal.cache.eventPoll.timestamp < 1e4 ? !0 : (iLOGlobal.eventAttempts++, + iLOGlobal.cache.eventPoll.timestamp = cur_date, iLO.sendJsonRequest("ui_events", "GET", "json/ui_events", null, function(o, fname, error) { + if (o && "timeout" === o.message) iLO.setEventPoll(interval); else if (error && "success" != error || !jQuery.isPlainObject(o) || "undefined" == typeof o.events) iLO.setEventPoll(interval); else { + iLOGlobal.eventAttempts = 0; + var id = o.events.length < 1 ? 0 : o.events[o.events.length - 1].id + 1; + $elem.doTimeout("ui_events_thread", interval, function() { + return iLOGlobal.eventAttempts++, iLOGlobal.cache.eventPoll.timestamp = new Date().getTime(), + iLO.sendJsonRequest("ui_events", "GET", "json/ui_events/" + id, null, function(inner_o, inner_fname, inner_error) { + if ((!inner_error || "success" == inner_error) && jQuery.isPlainObject(inner_o) && "undefined" != typeof inner_o.events && (iLOGlobal.eventAttempts = 0, + iLOGlobal.isFlashPolling && iLO.sendJsonRequest("flash_status", "GET", "json/flash_status", null, function(o, fname, error) { + if ((!error || "success" == error) && jQuery.isPlainObject(o) && "undefined" != typeof o.state) switch (setTimeout(function() { + $.publish("/flash_status", [ o ]); + }, 1), o.state) { + case "COMPLETED": + case "ERROR": + iLOGlobal.isFlashPolling = !1; + } + }), inner_o.events.length > 0)) { + $.publish("/ui_events", [ inner_o.events ]); + for (var i = 0; i < inner_o.events.length; i++) $.publish("/ui_events/" + inner_o.events[i].type, [ inner_o.events[i] ]), + "EVT_FLASH_START" === inner_o.events[i].type ? iLOGlobal.isFlashPolling = !0 : "EVT_FLASH_END" === inner_o.events[i].type && (iLOGlobal.isFlashPolling = !1, + iLO.sendJsonRequest("flash_status", "GET", "json/flash_status", null, function(o, fname, error) { + error && "success" != error || !jQuery.isPlainObject(o) || "undefined" == typeof o.state || setTimeout(function() { + $.publish("/flash_status", [ o ]); + }, 1); + })); + id = inner_o.events[--i].id + 1; + } + }), !0; + }); + } + return null; + }, null, 3e4), !0); + } + $elem.doTimeout("ui_events_thread"), iLOGlobal.eventAttempts = 0; + } + }; + if ("undefined" == typeof iLOGlobal.initialLink) try { + iLOGlobal.topPage.location.replace(encodeURI(iLO.getBaseUrl())); + } catch (e) { + location.reload(!0); + } + iLOGlobal.supportsPassiveOption = !1; + try { + var opts = Object.defineProperty({}, "passive", { + get: function() { + iLOGlobal.supportsPassiveOption = !0; + } + }); + window.addEventListener("test", null, opts); + } catch (e) {} + jQuery(window).on("load", function() { + var key = jQuery.cookies.get("sessionKey"); + key && (iLOGlobal.cache.session_key = key), $(window).on("click keypress", function() { + $.publish("/session_tickle"); + }); + try { + window.addEventListener("wheel", function(e) { + $.publish("/session_tickle"); + }, iLOGlobal.supportsPassiveOption ? { + passive: !0 + } : !1); + } catch (e) { + $.log("addEventListener failed in window load: " + e.message); + } + }); +} \ No newline at end of file diff --git a/public/hpilo/js/icons.js b/public/hpilo/js/icons.js new file mode 100644 index 0000000..2c35673 --- /dev/null +++ b/public/hpilo/js/icons.js @@ -0,0 +1,36 @@ +var myIcons = { + blank: 'Blank', + camera: '', + checkmark: '', + circleQuestion: '', + close: '', + contract: '', + critical: '', + desktop: '', + expand: '', + form_checkmark: '', + form_close: '', + help: '', + indicator: '', + inform: '', + lock: '', + maximize: '', + ok: '', + pin: '', + power: '', + radial: '', + restore: '', + spacerStatus: '', + template: '', + unknown: '', + warning: '', + eject: '', + keyboard: '', + cd: '', + logoSmall: '', + menu: '' +}, oemIconpath = window.top === window.self ? "js/extendedIcons.js" : "../js/extendedIcons.js"; + +$.getScript(oemIconpath).done(function() { + $.extend(myIcons, extendedIcons); +}); \ No newline at end of file diff --git a/public/hpilo/js/inputValidator.js b/public/hpilo/js/inputValidator.js new file mode 100644 index 0000000..070fe03 --- /dev/null +++ b/public/hpilo/js/inputValidator.js @@ -0,0 +1,624 @@ +function isMissing(obj) { + return null == obj || "undefined" == typeof obj || !jQuery.isValidString(obj); +} + +function InputValidator(validateTag, displayElementId, autoInit) { + this.validateTag = validateTag ? validateTag : InputValidator.ValidateTag, this.displayControl = document.getElementById(displayElementId), + this.inputs = new Array(), autoInit && this.init(); +} + +function _setNewInputGroup(validateTag, displayElementId) { + this.validateTag = validateTag, exists(displayElementId) && (this.displayControl = document.getElementById(displayElementId)), + this.init(); +} + +function _getInputs() { + return this.inputs; +} + +function _getInput(id) { + for (var i = 0; i < this.inputs.length; i++) if (this.inputs[i].element.id == id) return this.inputs[i]; + return !1; +} + +function _getFirstInvalidInput() { + for (var i = 0; i < this.inputs.length; i++) if (!this.inputs[i].hasValidInput()) return this.inputs[i].element; + return null; +} + +function _autoFocus() { + var elem = this.getFirstInvalidInput(); + if (elem) try { + elem.focus(), elem.select(); + } catch (err) {} +} + +function _removeInput(id, useHTML) { + for (var i = 0; i < this.inputs.length; i++) this.inputs[i].element.id == id && (this.displayControl ? (this.inputs.splice(i, 1), + this.updateMessages(useHTML)) : (this.inputs[i].hideMessages(), this.inputs.splice(i, 1))); +} + +function _init() { + var elems = document.getElementsByTagName("*"); + this.inputs = new Array(); + for (var i = 0; i < elems.length; i++) if ("true" == elems[i].getAttribute(this.validateTag)) { + var newInput = new ValidatedInput(elems[i]); + newInput.init(), this.inputs[this.inputs.length] = newInput; + } +} + +function _attachKeyListeners(callback) { + for (var i = 0; i < this.inputs.length; i++) this.inputs[i].element.attachEvent ? this.inputs[i].element.attachEvent("onkeyup", callback) : this.inputs[i].element.onkeyup = callback; +} + +function _allInputsValidate() { + for (var i = 0; i < this.inputs.length; i++) if (!this.inputs[i].hasValidInput()) return !1; + return !0; +} + +function _allInputsAreClean() { + for (var i = 0; i < this.inputs.length; i++) if (!this.inputs[i].isClean()) return !1; + return !0; +} + +function _singleInputValidates(id) { + for (var i = 0; i < this.inputs.length; i++) if (this.inputs[i].element.id == id) return this.inputs[i].hasValidInput(); + return !1; +} + +function _updateMessages(useHTML) { + var i; + if (this.displayControl) { + if (iLOGlobal.features.alt_mode_en) { + var errMsg = this.getRulesBroken(useHTML); + $(this.displayControl).displayError(errMsg); + } else $(this.displayControl).displayError({ + text: this.getRulesBroken(useHTML) + }); + this.displayControl.style.display = "block"; + } else for (i = 0; i < this.inputs.length; i++) this.inputs[i].hasValidInput() ? this.inputs[i].hideMessages() : this.inputs[i].showMessages(useHTML); +} + +function _updateFirstMessage(useHTML) { + this.clearMessages(), this.displayControl && (this.displayControl.innerHTML = this.getFirstRuleBroken(useHTML), + this.displayControl.style.display = "block"); +} + +function _clearMessages() { + if (this.displayControl) this.displayControl.innerHTML = "", this.displayControl.style.display = "none"; else for (var i = 0; i < this.inputs.length; i++) this.inputs[i].hideMessages(); +} + +function _getFirstRuleBroken(useHTML) { + for (var i = 0; i < this.inputs.length; i++) if (0 == this.inputs[i].hasValidInput()) return this.inputs[i].getRulesBroken(useHTML); + return !1; +} + +function _getFirstRuleBrokenType() { + for (var i = 0; i < this.inputs.length; i++) if (0 == this.inputs[i].hasValidInput()) return this.inputs[i].getFirstRuleBrokenType(); + return -1; +} + +function _getAllRulesBroken(useHTML) { + for (var errors = "", i = 0; i < this.inputs.length; i++) 0 == this.inputs[i].hasValidInput() && (errors += this.inputs[i].getRulesBroken(useHTML)); + return errors; +} + +function ValidatedInput(elem) { + this.element = "undefined" == elem.tagName ? null : elem, this.cleanValue = this.element.value, + this.formIdentifier = "", this.linkedErrorLabel = null, this.invalidList = null, + this.regExp = null, this.fieldName = "", this.optional = !1, this.optionElement = null, + this.useCustomMessage = !1, this.rules = new Array(), this.relatives = new Array(), + this.relativeNames = new Array(), this.range = new Object(), this.range.min = null, + this.range.max = null, this.errorFormatFunction = null, this.validationFunction = null; +} + +function _initInput() { + var names = null, msg = ""; + try { + var captionElemId = this.element.getAttribute(InputValidator.CaptionTag); + if (captionElemId) { + var fieldCaption = document.getElementById(captionElemId).innerHTML; + jQuery.isValidString(fieldCaption) ? -1 != fieldCaption.indexOf(":") ? this.fieldName = fieldCaption.split(":")[0] : this.fieldName = fieldCaption : this.captionElement = null; + } + if (this.element.getAttribute(InputValidator.FormIdTag) && (this.formIdentifier = " " + this.element.getAttribute(InputValidator.FormIdTag)), + this.element.getAttribute(InputValidator.OptionTag) && (this.optionElement = document.getElementById(this.element.getAttribute(InputValidator.OptionTag))), + this.element.getAttribute(InputValidator.RelativesTag)) { + names = this.element.getAttribute(InputValidator.RelativesTag), names = names.split(";"); + for (var i = 0; i < names.length; i++) this.relatives[this.relatives.length] = document.getElementById(names[i]); + } + if (this.element.getAttribute(InputValidator.RelatedCaptionTag)) { + names = this.element.getAttribute(InputValidator.RelatedCaptionTag), names = names.split(";"); + for (var n = 0; n < names.length; n++) this.relativeNames[this.relativeNames.length] = getLabelText(names[n]); + } + if (this.element.getAttribute(InputValidator.InvalidTag) && (this.invalidList = this.element.getAttribute(InputValidator.InvalidTag)), + this.element.getAttribute(InputValidator.RegExpTag) && (this.regExp = new RegExp(this.element.getAttribute(InputValidator.RegExpTag))), + this.element.getAttribute(InputValidator.RangeTag)) { + var range = this.element.getAttribute(InputValidator.RangeTag); + range = range.split(";"), range.length >= 2 && (range[0] = parseInt(range[0], 10), + range[1] = parseInt(range[1], 10), this.range.min = range[0] < range[1] ? range[0] : range[1], + this.range.max = range[0] > range[1] ? range[0] : range[1]); + } + if (null != this.element.getAttribute(InputValidator.CustomTag) && (this.validationFunction = eval(this.element.getAttribute(InputValidator.CustomTag))), + null != this.element.getAttribute(InputValidator.RulesTag)) { + var rules = this.element.getAttribute(InputValidator.RulesTag); + rules = rules.split(";"); + for (var j = 0; j < rules.length; j++) null != this.element.getAttribute(InputValidator.MessageTag) ? 0 == this.useCustomMessage && (msg = this.getInputString(this.element.getAttribute(InputValidator.MessageTag)), + this.useCustomMessage = !0) : msg = this.getInputString(this.getStringKey(rules[j])), + rules[j] == ValidationRule.Optional ? this.optional = !0 : this.addRule(rules[j], msg); + } else this.addRule(ValidationRule.Required, this.getInputString(this.getStringKey(ValidationRule.Required))); + if (null != this.element.getAttribute(InputValidator.LabelTag)) { + var labelElement = document.getElementById(this.element.getAttribute(InputValidator.LabelTag)); + labelElement && (this.linkedErrorLabel = labelElement, this.errorFormatFunction = _errorFomatter); + } + } catch (e) { + alert("error in init: " + e.message); + } +} + +function _getRule(type) { + for (var i = 0; i < this.rules.length; i++) if (this.rules[i].type == type) return this.rules[i]; + return null; +} + +function _addRule(type, msg) { + return isNaN(type) ? void 0 : this.rules.push(new ValidationRule(type, msg)); +} + +function _removeRule(type) { + if (!isNaN(type)) for (var i = 0; i < this.rules.length; i++) this.rules[i].type == type && (this.rules.splice(i, 1), + this.linkedErrorLabel && jQuery.isValidString(this.linkedErrorLabel.innerHTML) && this.showMessages()); +} + +function _isClean() { + return this.element.value == this.cleanValue; +} + +function _hasValidInput() { + for (var i = 0; i < this.rules.length; i++) if (this.rules[i].isRuleBroken(this, this.relatives, this.range, this.optional)) return !1; + return !0; +} + +function getFirstRuleBrokenType() { + for (var i = 0; i < this.rules.length; i++) if (this.rules[i].isRuleBroken(this, this.relatives, this.range, this.optional)) return this.rules[i].type; + return -1; +} + +function _getRulesBroken(useHTML) { + var i, errMsg = "", lineBreak = useHTML ? "
    " : "\n"; + if (1 == this.useCustomMessage) { + for (i = 0; i < this.rules.length; i++) if (this.rules[i].isRuleBroken(this, this.relatives, this.range, this.optional)) { + errMsg = this.rules[i].msg + this.formIdentifier + lineBreak; + break; + } + } else for (i = 0; i < this.rules.length; i++) this.rules[i].isRuleBroken(this, this.relatives, this.range, this.optional) && (errMsg += this.rules[i].msg + this.formIdentifier + lineBreak); + return errMsg; +} + +function _showMessages(useHTML) { + this.linkedErrorLabel && (this.linkedErrorLabel.innerHTML = this.getRulesBroken(useHTML), + this.errorFormatFunction && this.errorFormatFunction(this.element, !0)); +} + +function _hideMessages() { + this.linkedErrorLabel && (this.linkedErrorLabel.innerHTML = "", this.errorFormatFunction && this.errorFormatFunction(this.element, !1)); +} + +function _getInputString(type) { + var regexp = null; + if (jQuery.isValidString(type)) { + var localString = "unknown type: " + type, langKey = "inputValidator." + type; + switch (type) { + case "fieldInvalid": + localString = iLO.translateString(langKey, "{%1} is invalid."); + break; + + case "fieldMatch": + localString = iLO.translateString(langKey, "{%1} Confirm must match {%1}."); + break; + + case "fieldRequired": + localString = iLO.translateString(langKey, "{%1} is a required field."); + break; + + case "fieldString": + localString = iLO.translateString(langKey, "{%1} must contain a text value."); + break; + + case "fieldStringLength": + localString = iLO.translateString(langKey, "{%1} must contain exactly {%min} characters."); + break; + + case "fieldStringRange": + localString = iLO.translateString(langKey, "{%1} must contain {%min} to {%max} characters."); + break; + + case "fieldNumber": + localString = iLO.translateString(langKey, "{%1} must contain a numeric value."); + break; + + case "fieldNumberRange": + localString = iLO.translateString(langKey, "{%1} must contain a numeric value between {%min} and {%max}."); + break; + + case "fieldInteger": + localString = iLO.translateString(langKey, "{%1} must contain an integer."); + break; + + case "fieldIntRange": + localString = iLO.translateString(langKey, "{%1} must contain an integer between {%min} and {%max}."); + break; + + case "fieldEmail": + localString = iLO.translateString(langKey, "{%1} must contain a valid email address."); + break; + + case "fieldDate": + localString = iLO.translateString(langKey, "{%1} must contain a valid date."); + break; + + case "fieldIp": + localString = iLO.translateString(langKey, "{%1} must contain a valid IP address."); + break; + + case "fieldIpv6": + localString = iLO.translateString(langKey, "{%1} must contain a valid IPv6 address."); + break; + + case "fieldIpv6Prefix": + localString = iLO.translateString(langKey, "{%1} must contain a valid Prefix Length value."); + break; + + case "fieldNoSpaces": + localString = iLO.translateString(langKey, "{%1} must not contain spaces."); + break; + + case "fieldRegex": + localString = iLO.translateString(langKey, "{%1} must contain {%custom-string}"); + break; + + case "fieldChars": + localString = iLO.translateString(langKey, "{%1} must not contain any of these characters: {%char-list}"); + break; + + case "fieldUnique": + localString = iLO.translateString(langKey, "{%1} must be unique."); + break; + + case "fieldDependent": + localString = iLO.translateString(langKey, "{%1} requires {%2} to be supplied first."); + break; + + case "fieldIpOrHost": + localString = iLO.translateString(langKey, "{%1} must contain a valid IP address, hostname or FQDN."); + break; + + case "fieldIpv4SubnetMask": + localString = iLO.translateString(langKey, "{%1} must contain a valid subnet mask."); + break; + + default: + localString = iLO.translateString(type); + } + if (jQuery.isValidString(localString)) { + if (this.fieldName.length > 0 && (regexp = new RegExp("{%1}", "g"), localString = localString.replace(regexp, this.fieldName)), + this.relativeNames.length > 0) { + var names = ""; + for (i = 0; i < this.relativeNames.length; i++) names += (i > 0 ? ", " : "") + this.relativeNames[i]; + regexp = new RegExp("{%2}", "g"), localString = localString.replace(regexp, names); + } + if (0 != this.range.min && null == this.range.min || 0 != this.range.max && null == this.range.max || (regexp = new RegExp("{%min}", "g"), + localString = localString.replace(regexp, this.range.min), regexp = new RegExp("{%max}", "g"), + localString = localString.replace(regexp, this.range.max)), null != this.invalidList && "" != this.invalidList) { + var charList = ""; + for (i = 0; i < this.invalidList.length; i++) charList += this.invalidList.charAt(i) + " "; + regexp = new RegExp("{%char-list}"), localString = localString.replace(regexp, charList); + } + if (this.element.getAttribute(InputValidator.MsgInsertTag)) { + var msg = this.element.getAttribute(InputValidator.MsgInsertTag); + regexp = new RegExp("{%custom-string}"), localString = localString.replace(regexp, iLO.translateString("inputValidator." + msg, msg)); + } + } + return "" == localString ? "[not found]" : localString; + } +} + +function _getStringKey(type) { + var szValue = "", useExKey = this.fieldName.length > 0; + switch (parseInt(type, 10)) { + case ValidationRule.IpAddress: + szValue = useExKey ? ValidatedInput.IpRequiredKeyEx : ValidatedInput.IpRequiredKey; + break; + + case ValidationRule.Ipv6Address: + szValue = useExKey ? ValidatedInput.Ipv6RequiredKeyEx : ValidatedInput.Ipv6RequiredKey; + break; + + case ValidationRule.Ipv6AddressPrefOp: + szValue = useExKey ? ValidatedInput.Ipv6PRequiredKeyEx : ValidatedInput.Ipv6PRequiredKey; + break; + + case ValidationRule.EmailAddress: + szValue = useExKey ? ValidatedInput.EmailRequiredKeyEx : ValidatedInput.EmailRequiredKey; + break; + + case ValidationRule.Number: + szValue = null != this.range.min && null != this.range.max ? useExKey ? ValidatedInput.NumberRangeKeyEx : ValidatedInput.NumberRangeKey : useExKey ? ValidatedInput.NumberRequiredKeyEx : ValidatedInput.NumberRequiredKey; + break; + + case ValidationRule.Integer: + szValue = null != this.range.min && null != this.range.max ? useExKey ? ValidatedInput.IntegerRangeKeyEx : ValidatedInput.IntegerRangeKey : useExKey ? ValidatedInput.IntegerRequiredKeyEx : ValidatedInput.IntegerRequiredKey; + break; + + case ValidationRule.String: + szValue = null != this.range.min && null != this.range.max ? this.range.min == this.range.max && useExKey ? ValidatedInput.StringLengthKeyEx : useExKey ? ValidatedInput.StringRangeKeyEx : ValidatedInput.StringRangeKey : useExKey ? ValidatedInput.StringRequiredKeyEx : ValidatedInput.StringRequiredKey; + break; + + case ValidationRule.Date: + szValue = useExKey ? ValidatedInput.DateRequiredKeyEx : ValidatedInput.DateRequiredKey; + break; + + case ValidationRule.Mirror: + szValue = useExKey ? ValidatedInput.InputMatchKeyEx : ValidatedInput.InputMatchKey; + break; + + case ValidationRule.NoSpaces: + szValue = useExKey ? ValidatedInput.NoSpacesKeyEx : ValidatedInput.NoSpacesKey; + break; + + case ValidationRule.RegExp: + szValue = useExKey ? ValidatedInput.RegexKeyEx : ValidatedInput.RegexKey; + break; + + case ValidationRule.InvalidChars: + szValue = useExKey ? ValidatedInput.InvalidCharsKeyEx : ValidatedInput.InvalidCharsKey; + break; + + case ValidationRule.Unique: + szValue = useExKey ? ValidatedInput.UniqueKeyEx : ValidatedInput.UniqueKey; + break; + + case ValidationRule.Dependent: + szValue = useExKey ? ValidatedInput.DependentKeyEx : ValidatedInput.DependentKey; + break; + + case ValidationRule.IpOrHost: + szValue = useExKey ? ValidatedInput.IpOrHostKeyEx : ValidatedInput.IpOrHostRequiredKey; + break; + + case ValidationRule.Ipv4SubnetMask: + szValue = useExKey ? ValidatedInput.Ipv4SubnetMaskKeyEx : ValidatedInput.Ipv4SubnetMaskRequiredKey; + break; + + case ValidationRule.Required: + default: + szValue = useExKey ? ValidatedInput.FieldRequiredKeyEx : ValidatedInput.FieldRequiredKey; + } + return szValue; +} + +function ValidationRule(type, msg) { + this.type = isNumber(type) ? parseInt(type, 10) : null, this.msg = jQuery.isValidString(msg) ? msg : ""; +} + +function _isRuleBroken(validatedInput, obj, range, optional) { + var broken, i, elem = validatedInput.element, value = elem.value; + if (validatedInput.optionElement && 0 == validatedInput.optionElement.checked) return !1; + if (isMissing(value) && optional) return !1; + switch (this.type) { + case ValidationRule.Required: + broken = isMissing(value), null != range.min && 0 == range.min && (broken = !1); + break; + + case ValidationRule.IpAddress: + broken = !isValidIPAddress(value), broken || optional || "0.0.0.0" != value.trim() || (broken = !0); + break; + + case ValidationRule.Ipv6Address: + broken = !isValidIPv6Address(value); + break; + + case ValidationRule.Ipv6AddressPrefOp: + broken = !isValidIPv6AddressPrefix(value); + break; + + case ValidationRule.EmailAddress: + broken = !isEmailAddress(value); + break; + + case ValidationRule.Date: + broken = !isDate(value); + break; + + case ValidationRule.Number: + broken = !isNumber(value), broken || null == range.min || null == range.max || (broken = !(parseFloat(value) >= parseFloat(range.min) && parseFloat(value) <= parseFloat(range.max))); + break; + + case ValidationRule.Integer: + broken = !isInteger(value), broken || null == range.min || null == range.max || (broken = !(parseInt(value, 10) >= parseInt(range.min, 10) && parseInt(value, 10) <= parseInt(range.max, 10))); + break; + + case ValidationRule.String: + broken = !jQuery.isValidString(value) && 0 !== range.min, broken || null == range.min || null == range.max || (broken = !(value.length >= parseInt(range.min, 10) && value.length <= parseInt(range.max, 10))); + break; + + case ValidationRule.Mirror: + if (Array.isArray(obj)) for (i = 0; i < obj.length; i++) if ((jQuery.isValidString(obj[i].value) || jQuery.isValidString(value) && "true" == obj[i].getAttribute("mirror-controlled")) && !valuesMatch(value, obj[i].value)) return !0; + broken = !1; + break; + + case ValidationRule.NoSpaces: + broken = hasSpaces(value); + break; + + case ValidationRule.RegExp: + broken = validatedInput.regExp.test(value); + break; + + case ValidationRule.InvalidChars: + broken = containsChars(value, validatedInput.invalidList); + break; + + case ValidationRule.Unique: + if (Array.isArray(obj)) for (i = 0; i < obj.length; i++) if (jQuery.isValidString(obj[i].value) && valuesMatch(value, obj[i].value)) return !0; + broken = !1; + break; + + case ValidationRule.Dependent: + if (Array.isArray(obj)) for (i = 0; i < obj.length; i++) if (!jQuery.isValidString(obj[i].value) && jQuery.isValidString(value)) return !0; + broken = !1; + break; + + case ValidationRule.IpOrHost: + broken = !isValidIpOrHost(value); + break; + + case ValidationRule.Ipv4SubnetMask: + broken = !isValidIpv4SubnetMask(value); + break; + + case ValidationRule.IpOrHostMultiTarget: + broken = !isValidIpOrHostMultiTarget(value); + break; + + case ValidationRule.Custom: + broken = !validatedInput.validationFunction(value); + break; + + default: + broken = !1; + } + return broken; +} + +function getLabelText(id) { + var fieldCaption = document.getElementById(id).innerHTML; + return jQuery.isValidString(fieldCaption) ? -1 != fieldCaption.indexOf(":") ? fieldCaption.split(":")[0] : fieldCaption : id; +} + +function valuesMatch(obj1, obj2) { + return isMissing(obj1) || isMissing(obj2) ? !1 : obj1 == obj2; +} + +function containsChars(value, charList) { + for (var i = 0; i < charList.length; i++) { + var regExp = new RegExp(/[a-z0-9]/i), esc = regExp.test(charList.charAt(i)) ? "" : "\\"; + if (regExp = new RegExp(esc + charList.charAt(i)), regExp.test(value)) return !0; + } + return !1; +} + +function isEmailAddress(obj) { + if (jQuery.isValidString(obj) && obj.length <= 64) { + var regExpEmail = new RegExp(/^([\w\-\.\+\_])+@([a-zA-Z0-9]([\-a-zA-Z0-9])?)+((\.?)+([a-zA-Z0-9]([\-][a-zA-Z0-9])?))*$/); + if (regExpEmail.test(obj)) return !0; + } + return !1; +} + +function isDate(obj) { + var aDate = new Date(obj); + return "NaN" != aDate.toDateString() && "Invalid Date" != aDate.toDateString(); +} + +function isNumber(obj) { + return null != obj && !isNaN(obj); +} + +function isInteger(obj) { + return isNumber(obj) ? parseInt(obj, 10) == parseFloat(obj) : !1; +} + +function hasSpaces(obj) { + if (jQuery.isValidString(obj)) for (var i = 0; i < obj.length; i++) if (" " == obj.charAt(i)) return !0; + return !1; +} + +function fileSizeExceeded(filePath, maxBytes) { + try { + var fso = new ActiveXObject("Scripting.FileSystemObject"), img = new Image(); + img.src = filePath; + var file = fso.GetFile(img.src); + if (file.Size > maxBytes) return !0; + } catch (err) { + return alert(err.message), "error"; + } + return !1; +} + +function isValidIpOrHost(obj) { + var i, tokens, invalid_chars = new RegExp(/(^-|-$|[\u0001-\u002c]|\u002e|\u002f|[\u003a-\u0040]|[\u005b-\u005e]|\u0060|[\u007b-\u007f])/); + if (isValidIPAddress(obj) || isValidIPv6Address(obj)) return !0; + if (obj.length > 255) return !1; + if (tokens = obj.split("."), tokens.length > 1) { + for (i = 0; i < tokens.length; i++) if (!jQuery.isValidString(tokens[i]) || tokens[i].length > 63 || invalid_chars.test(tokens[i])) return !1; + return !0; + } + return !1; +} + +function isValidIpOrHostMultiTarget(obj) { + var i, n, targets, tokens, invalid_chars = new RegExp(/(^-|-$|[\u0001-\u001f]|[\u0021-\u002c]|\u002e|\u002f|[\u003c-\u0040]|[\u005b-\u005e]|\u0060|[\u007b-\u007f])/); + if (obj.length > 255) return !1; + for (targets = obj.split(";"), n = 0; n < targets.length; n++) if (!isValidIPAddress(targets[n].trim()) && !isValidIPv6Address(targets[n].trim())) for (tokens = targets[n].split("."), + i = 0; i < tokens.length; i++) if (!jQuery.isValidString(tokens[i].trim()) || tokens[i].length > 63 || invalid_chars.test(tokens[i])) return !1; + return !0; +} + +function isValidIpv4SubnetMask(obj) { + var re = /^(255.255.255.(25[542]|24[80]|224|192|128|0)|255.255.(25[42]|24[80]|224|192|128|0).0|255.(25[42]|24[80]|224|192|128|0).0.0|(25[42]|24[80]|224|192|128|0).0.0.0)$/; + return re.test(obj); +} + +function _errorFomatter(elem, isError) { + elem && (isError ? $(elem).closest("div.form-field").addClass("form-field--error") : $(elem).closest("div.form-field").removeClass("form-field--error")); +} + +InputValidator.ValidateTag = "validate-me", InputValidator.LabelTag = "linked-error", +InputValidator.MessageTag = "msg-key", InputValidator.MsgInsertTag = "msg-insert-key", +InputValidator.RulesTag = "rule-list", InputValidator.CaptionTag = "caption-label", +InputValidator.RelativesTag = "related-inputs", InputValidator.RangeTag = "range", +InputValidator.InvalidTag = "invalid-list", InputValidator.RegExpTag = "reg-exp", +InputValidator.FormIdTag = "unique-id", InputValidator.RelatedCaptionTag = "related-labels", +InputValidator.OptionTag = "option-id", InputValidator.CustomTag = "custom-func", +ValidatedInput.InputInvalidKey = "inputInvalid", ValidatedInput.InputMatchKey = "inputMatch", +ValidatedInput.FieldRequiredKey = "inputRequired", ValidatedInput.NumberRequiredKey = "inputNumber", +ValidatedInput.NumberRangeKey = "inputNumberRange", ValidatedInput.IntegerRequiredKey = "inputInteger", +ValidatedInput.IntegerRangeKey = "inputIntegerRange", ValidatedInput.StringRequiredKey = "inputString", +ValidatedInput.StringRangeKey = "inputStringRange", ValidatedInput.DateRequiredKey = "inputDate", +ValidatedInput.EmailRequiredKey = "inputEmail", ValidatedInput.IpRequiredKey = "inputIp", +ValidatedInput.Ipv6RequiredKey = "inputIpv6", ValidatedInput.Ipv6PRequiredKey = "inputIpv6Prefix", +ValidatedInput.NoSpacesKey = "inputNoSpaces", ValidatedInput.InvalidCharsKey = "inputChars", +ValidatedInput.RegexKey = "inputRegex", ValidatedInput.UniqueKey = "inputUnique", +ValidatedInput.DependentKey = "inputDependent", ValidatedInput.IpOrHostRequiredKey = "inputIpOrHost", +ValidatedInput.Ipv4SubnetMaskRequiredKey = "inputIpv4SubnetMask", ValidatedInput.InputInvalidKeyEx = "fieldInvalid", +ValidatedInput.InputMatchKeyEx = "fieldMatch", ValidatedInput.FieldRequiredKeyEx = "fieldRequired", +ValidatedInput.NumberRequiredKeyEx = "fieldNumber", ValidatedInput.NumberRangeKeyEx = "fieldNumberRange", +ValidatedInput.IntegerRequiredKeyEx = "fieldInteger", ValidatedInput.IntegerRangeKeyEx = "fieldIntRange", +ValidatedInput.StringRequiredKeyEx = "fieldString", ValidatedInput.StringLengthKeyEx = "fieldStringLength", +ValidatedInput.StringRangeKeyEx = "fieldStringRange", ValidatedInput.DateRequiredKeyEx = "fieldDate", +ValidatedInput.EmailRequiredKeyEx = "fieldEmail", ValidatedInput.IpRequiredKeyEx = "fieldIp", +ValidatedInput.Ipv6RequiredKeyEx = "fieldIpv6", ValidatedInput.Ipv6PRequiredKeyEx = "fieldIpv6Prefix", +ValidatedInput.NoSpacesKeyEx = "fieldNoSpaces", ValidatedInput.InvalidCharsKeyEx = "fieldChars", +ValidatedInput.RegexKeyEx = "fieldRegex", ValidatedInput.IpOrHostKeyEx = "fieldIpOrHost", +ValidatedInput.Ipv4SubnetMaskKeyEx = "fieldIpv4SubnetMask", ValidationRule.Optional = 0, +ValidationRule.Required = 1, ValidationRule.IpAddress = 2, ValidationRule.EmailAddress = 3, +ValidationRule.Date = 4, ValidationRule.Number = 5, ValidationRule.String = 6, ValidationRule.Mirror = 7, +ValidationRule.NoSpaces = 8, ValidationRule.Integer = 9, ValidationRule.RegExp = 10, +ValidationRule.InvalidChars = 11, ValidationRule.Exclusive = 12, ValidationRule.Dependent = 13, +ValidationRule.Ipv6Address = 14, ValidationRule.Ipv6AddressPrefOp = 15, ValidationRule.Unique = 16, +ValidationRule.IpOrHost = 17, ValidationRule.Ipv4SubnetMask = 18, ValidationRule.IpOrHostMultiTarget = 19, +ValidationRule.Custom = 99, InputValidator.prototype.init = _init, InputValidator.prototype.attachKeyListeners = _attachKeyListeners, +InputValidator.prototype.setNewInputGroup = _setNewInputGroup, InputValidator.prototype.getInputs = _getInputs, +InputValidator.prototype.getInput = _getInput, InputValidator.prototype.getFirstInvalidInput = _getFirstInvalidInput, +InputValidator.prototype.getFirstRuleBrokenType = _getFirstRuleBrokenType, InputValidator.prototype.autoFocus = _autoFocus, +InputValidator.prototype.removeInput = _removeInput, InputValidator.prototype.allInputsValidate = _allInputsValidate, +InputValidator.prototype.allInputsAreClean = _allInputsAreClean, InputValidator.prototype.singleInputValidates = _singleInputValidates, +InputValidator.prototype.getFirstRuleBroken = _getFirstRuleBroken, InputValidator.prototype.getRulesBroken = _getAllRulesBroken, +InputValidator.prototype.updateMessages = _updateMessages, InputValidator.prototype.updateFirstMessage = _updateFirstMessage, +InputValidator.prototype.clearMessages = _clearMessages, ValidatedInput.prototype.init = _initInput, +ValidatedInput.prototype.addRule = _addRule, ValidatedInput.prototype.getRule = _getRule, +ValidatedInput.prototype.removeRule = _removeRule, ValidatedInput.prototype.isClean = _isClean, +ValidatedInput.prototype.hasValidInput = _hasValidInput, ValidatedInput.prototype.getFirstRuleBrokenType = getFirstRuleBrokenType, +ValidatedInput.prototype.getRulesBroken = _getRulesBroken, ValidatedInput.prototype.showMessages = _showMessages, +ValidatedInput.prototype.hideMessages = _hideMessages, ValidatedInput.prototype.getInputString = _getInputString, +ValidatedInput.prototype.getStringKey = _getStringKey, ValidationRule.prototype.isRuleBroken = _isRuleBroken; \ No newline at end of file diff --git a/public/hpilo/js/irc.js b/public/hpilo/js/irc.js new file mode 100644 index 0000000..8227335 --- /dev/null +++ b/public/hpilo/js/irc.js @@ -0,0 +1,705 @@ +function resizeFrameWindow() { + var $frameDirectory = $("#frameDirectory").get(0); + $frameDirectory && $frameDirectory.contentWindow.frameResize(); +} + +function validateVmUrl(arg) { + var valid = !0; + return valid && (valid = 0 == arg.indexOf("http://") || 0 == arg.indexOf("https://")), + valid; +} + +var isStandaloneHtml5Irc = location.href.indexOf("irc.html") > -1, startHtml5Irc = function(options) { + var me = this; + if (me.renderer && me.renderer.connected) return !1; + var defaults = { + session: iLO.getSessionKey(), + openCommand: 0, + canvasId: "rc_video", + host: window.location.host, + mode: "WINDOW", + version: 4 + }, settings = $.extend(defaults, options); + settings.host; + me.renderer = new Renderer(settings), renderer.onready = function() { + switch ($("#remote_console_thumbnail_wait").hide(), settings.mode) { + case "MAXIMIZE": + htmlIrcMaximizeRestore(!0), toggleStatusBar(show_html5_statbar); + break; + + case "FULLSCREEN": + htmlIrcFullscreen(); + break; + + case "DOCKED": + htmlIrcDock(); + break; + + case "WINDOW": + default: + htmlIrcWindowMode(); + } + }, renderer.onclose = function() { + htmlIrcClose(); + }, renderer.onsizechange = function(width, height) { + var ratio = height / width, $thumb = $("#remote_console_thumbnail"); + if (ratio > 0 && ($(".status-resolution").text(width + " x " + height).removeAttr("data-localize"), + $(".status-text").find('[data-localize="IRC.status.NoVideo"]').length > 0 && clearStatusText(), + $thumb.length)) { + var twidth = $thumb.width(), theight = twidth * ratio; + $("#remote_console_thumbnail, #remote_console_thumbnail_wait").css("height", theight + "px"); + } + }, renderer.onstatuschange = function(msg, ttl_ms) { + switch (msg) { + case "Video Suspended": + msg = "" + iLO.translateString("IRC.status.NoVideo", "No video") + ""; + break; + + case "Post Complete": + msg = "" + iLO.translateString("IRC.status.PostComplete", "Post complete") + ""; + } + 0 === ttl_ms ? $(".status-text").html(msg) : $(".status-text").html(msg).doTimeout("status-change", ttl_ms || 15e3, clearStatusText); + }, renderer.onvmactivity = function(stop) { + renderer.$vmled || (renderer.$vmled = $(".vm-activity"), renderer.vmledcount = 0), + stop ? (renderer.vmledcount = 0, renderer.$vmled.removeClass("vm-active")) : renderer.vmledcount++ % 10 === 0 && renderer.$vmled.toggleClass("vm-active").doTimeout("vmactivity", 250, function() { + renderer.onvmactivity(!0); + }); + }, renderer.onhealthchange = function(state) { + switch (state) { + case "OP_STATUS_OK": + $(".health-state").html(myIcons.ok).attr({ + title: iLO.translateString("appl.healthOK", "Health: OK"), + langattr: "title", + langkey: "appl.healthOK" + }); + break; + + case "OP_STATUS_WARNING": + $(".health-state").html(myIcons.warning).attr({ + title: iLO.translateString("appl.healthDegraded", "Health: Degraded"), + langattr: "title", + langkey: "appl.healthDegraded" + }); + break; + + case "OP_STATUS_CRITICAL": + $(".health-state").html(myIcons.critical).attr({ + title: iLO.translateString("appl.healthCritical", "Health: Critical"), + langattr: "title", + langkey: "appl.healthCritical" + }); + break; + + case "OP_STATUS_UNKNOWN": + default: + $(".health-state").html(myIcons.unknown).attr({ + title: iLO.translateString("appl.healthUnknown", "Health: Unknown"), + langattr: "title", + langkey: "appl.healthUnknown" + }); + } + }, renderer.onvmchange = function(state) {}, renderer.onlicensechange = function(lic) {}, + renderer.onpowerchange = function(state) { + switch (state) { + case "ON": + $(".power-state").removeClass("powered-off").addClass("powered-on").attr({ + title: iLO.translateString("appl.pwrOn", "Power: ON"), + langattr: "title", + langkey: "appl.pwrOn" + }); + break; + + case "OFF": + $(".power-state").removeClass("powered-on").addClass("powered-off").attr({ + title: iLO.translateString("appl.pwrOff", "Power: OFF"), + langattr: "title", + langkey: "appl.pwrOff" + }); + break; + + default: + $(".power-state").removeClass("powered-on").removeClass("powered-off").attr({ + title: iLO.translateString("appl.pwr", "Power"), + langattr: "title", + langkey: "appl.pwr" + }); + } + }, setupHotKeys(), setupVM(), setupOptions(); +}, show_html5_statbar = "false" !== iLO.getCookie("UserPref", "html5_statbar"), windowOptions = {}, initWindowOptions = function() { + windowOptions = { + width: "800px", + height: "auto", + position: { + my: "center", + at: "center", + of: window + }, + maximized: !1 + }; +}; + +initWindowOptions(); + +var updateWindowOptions = function() { + var $dlg = $(".ui-dialog.hrc-dialog-window"); + $dlg.length > 0 && ($(".control").hasClass("maximized") || (windowOptions.width = $dlg.width(), + windowOptions.height = $dlg.height(), windowOptions.position = $dlg.position(), + windowOptions.maximized = !1)); +}, validateWindowOptions = function() { + var $win = $(window), footHeight = $("#footpanel").height(); + return "auto" === windowOptions.height ? !0 : !(windowOptions.position.left > $win.width() - windowOptions.width || windowOptions.position.top > $win.height() - footHeight - windowOptions.height); +}, isWindowMaximized = function() { + var $win = $(window), $dlg = $(".ui-dialog.hrc-dialog-window"), footHeight = $("#footpanel").height(), maximized = !1; + return $dlg.length > 0 && (maximized = $dlg.width() == $win.width() && $dlg.height() == $win.height() - footHeight && 0 == $dlg.position().top && 0 == $dlg.position().left), + maximized; +}, clearStatusText = function() { + $(".status-text").empty(); +}, toggleStatusBar = function(show) { + show ? (show_html5_statbar = !0, iLO.setCookie("UserPref", [ "html5_statbar", "true" ]), + $("#videoContainer .control").hasClass("dockedMode") || $(".videoContainer").removeClass("statusbar--off")) : (show_html5_statbar = !1, + iLO.setCookie("UserPref", [ "html5_statbar", "false" ]), $(".videoContainer").addClass("statusbar--off")); +}, screenCapture = function() { + var win = window.open(); + if (win) try { + win.document.write(''), win.document.close(); + } catch (e) { + $.error("Screen capture failed: " + e.message); + } +}, setupHotKeys = function() { + $(".hotKeysMenu").off().on("click", function(event) { + if (1 === event.which) { + try { + $(".hasmenu", this).empty().menu("destroy"); + } catch (e) {} + var $kbdMenu = $(".hasmenu", this), data = { + virtualkeys: [ [ { + cmd: "ControlLeft", + label: "CTRL", + strkey: "" + }, { + cmd: "Escape", + label: "ESC", + strkey: "" + }, { + cmd: "CapsLock", + label: "CAPS", + strkey: "" + }, { + cmd: "NumLock", + label: "NUM", + strkey: "" + } ], [ { + cmd: "OSLeft", + label: "L OS", + strkey: "" + }, { + cmd: "AltLeft", + label: "L ALT", + strkey: "" + }, { + cmd: "AltRight", + label: "R ALT", + strkey: "" + }, { + cmd: "OSRight", + label: "R OS", + strkey: "" + } ] ] + }; + $("#videoContainer .control").hasClass("dockedMode") || (data.keybds = [ { + type: "en", + label: "EN 101", + strkey: "" + }, { + type: "ja", + label: "JP 106/109", + strkey: "" + } ]), $kbdMenu.html($("#kbd-menu-template").jqote(data)).translate(), $kbdMenu.menu({ + create: function(event) { + $kbdMenu.doTimeout("kbdMenuTimer", 1e3, function() { + $kbdMenu.hide(); + }); + }, + blur: function() { + $kbdMenu.hide(), $(window, ".hrc-dialog-window #kbd_menu .key-container div").off("keydown keyup", renderer.keyboard.on_key); + }, + focus: function() { + $kbdMenu.doTimeout("kbdMenuTimer"), $kbdMenu.show(), $(window, ".hrc-dialog-window #kbd_menu .key-container div").on("keydown keyup", renderer.keyboard.on_key); + }, + select: function(event, ui) { + switch (ui.item.attr("data-cmd")) { + case "none": + break; + + case "ctrlaltdel": + renderer.worker.call_func("ctrlaltdel"); + break; + + case "kbd_en": + renderer.keyboard.setKbdLayoutId("en"); + break; + + case "kbd_ja": + renderer.keyboard.setKbdLayoutId("ja"); + break; + + default: + $.log("Unexpected keyboard menu option: %s", ui.item.attr("data-cmd")); + } + return !0; + } + }).show(); + } + return $(document).one("click", function() { + return $kbdMenu.hide(), !0; + }), !1; + }); +}, setupVmMenu = function(obj) { + try { + $(".hasmenu", ".vmMenu").empty().menu("destroy"); + } catch (e) {} + var $vmMenu = $(".hasmenu", ".vmMenu"); + return $vmMenu.html($("#vm_menu_template").jqote(obj.VirtualMedia)).translate(), + $vmMenu.menu({ + create: function(event) { + $vmMenu.doTimeout("vmMenuTimer", 1e3, function() { + $vmMenu.hide(); + }); + }, + blur: function() { + $vmMenu.hide(); + }, + focus: function() { + $vmMenu.doTimeout("vmMenuTimer"), $vmMenu.show(); + }, + select: function(event, ui) { + switch (ui.item.attr("data-cmd")) { + case "eject": + ejectVm(ui.item.attr("data-url")); + break; + + case "insert": + insertVm(ui.item.attr("data-url")); + } + return event.stopPropagation(), !1; + } + }).show(), $(document).one("click", function() { + return $vmMenu.hide(), !0; + }), !1; +}, setupVM = function() { + renderer && renderer.version < 5 || iLOGlobal.cache.VirtualMediaEnabled ? $(".vmMenu").off().on("click", function(event) { + if (1 === event.which) { + event.target = ".hasmenu"; + var $vmMenu = $(".hasmenu", ".vmMenu"); + try { + $vmMenu.empty().menu("destroy"); + } catch (e) { + event.stopPropagation(), $vmMenu.empty(); + } + getVmStatus(); + } + return !1; + }) : $(".vmMenu").off().attr("title", iLO.translateString("IRC.message.VmDisabled", "VM is disabled")).attr("langattr", "title").attr("langkey", "IRC.message.VmDisabled").removeClass("btn menu--controlled").on("click", function(event) { + return 1 === event.which && (event.stopPropagation(), showIrcToast({ + text: iLO.translateString("vm.funcDisabled", "VM is disabled"), + type: "critical", + position: "bottom-right" + })), !1; + }).find(".btn").removeClass("btn"); +}, setupOptionsMenu = function(obj) { + try { + $(".hasmenu", ".optionsMenu").empty().menu("destroy"); + } catch (e) {} + var $OptionsMenu = $(".hasmenu", ".optionsMenu"); + return $OptionsMenu.html($("#hrc-ilo-menu-template").jqote(obj)).translate(), $OptionsMenu.menu({ + create: function(event) { + $OptionsMenu.doTimeout("optionsMenuTimer", 1e3, function() { + $OptionsMenu.hide(); + }); + }, + blur: function() { + $OptionsMenu.hide(); + }, + focus: function() { + $OptionsMenu.doTimeout("optionsMenuTimer"), $OptionsMenu.show(); + }, + select: function(event, ui) { + switch (ui.item.attr("data-cmd")) { + case "statusbar": + toggleStatusBar(!show_html5_statbar); + break; + + case "no_power_priv": + showIrcToast({ + text: iLO.translateString("pwr_srv.resetIloPriv"), + type: "critical", + position: "bottom-right" + }); + break; + + case "momentary": + hostPwr.momentaryPress(); + break; + + case "hold": + hostPwr.pressAndHold(); + break; + + case "cold": + hostPwr.ColdBoot(); + break; + + case "reset": + hostPwr.systemReset(); + } + return event.stopPropagation(), !1; + } + }).show(), $(document).one("click", function() { + return $OptionsMenu.hide(), !0; + }), !1; +}, setupOptions = function() { + $(".optionsMenu").off().on("click", function(event) { + if (1 === event.which) { + event.target = ".hasmenu"; + var $OptionsMenu = $(".hasmenu", ".optionsMenu"); + try { + $OptionsMenu.empty().menu("destroy"); + } catch (e) { + event.stopPropagation(), $OptionsMenu.empty(); + } + getPowerStatus(); + } + return !1; + }); +}, getPowerStatus = function() { + iLO.sendJsonRequest("host_power", "GET", "json/host_power", null, function(obj, fname, error) { + var msg = iLO.checkError(obj, fname, error); + msg || iLO.sendJsonRequest("session_info", "GET", "json/session_info", null, function(obj2, fname, error) { + obj.reset_priv = 1 === obj2.reset_priv, setupOptionsMenu(obj); + }); + }); +}, htmlIrcClose = function() { + $(".control").removeClass("maximized"), initWindowOptions(), "undefined" != typeof renderer && renderer.close && renderer.close(), + $("#videoContainer").fullScreen(!1); + var $ircWindow = $("#ircWindow").dialog("instance"); + "undefined" != typeof $ircWindow && $ircWindow.destroy(); + for (var i = 0; i < maxNumVMConn; i++) if ("undefined" != typeof vm_conn[i] && vm_conn[i].getWebsocket() && iLO.isFunction(vm_conn[i].getWebsocket().close)) try { + vm_conn[i].getWebsocket().close(); + } catch (e) {} + $(".ui-dialog.irc-dialog .ui-dialog-titlebar-close").trigger("click"), $("#videoContainer .control").removeClass("dockedMode fullscreenMode"), + $("#thumbnail-wrapper").removeClass("dockedMode"), resizeFrameWindow(), $("#videoOuter, #dockedButtons").hide(), + $("#remote_console_thumbnail_wait").hide(), $("#remote_console_thumbnail").attr("title", "Click to launch Remote Console").attr("langattr", "title").attr("langkey", "IRC.label.ClickToLaunch"); +}, htmlIrcFullscreen = function() { + updateWindowOptions(); + var $videoControl = $(".videoContainer .control"); + $("#videoContainer").fullScreen(!0), $(".videoContainer #hover-map").css({ + pointerEvents: "inherit" + }), $videoControl.show().removeClass("dockedMode windowedMode").addClass("fullscreenMode ui-draggable ui-draggable-handle"), + $(".irc-canvas").removeClass("windowedMode"), $(".videoContainer").toggleClass("statusbar--off", !show_html5_statbar), + $(".videoContainer #hover-map, .videoContainer .control").hover(function(e) { + return $videoControl.stop().animate({ + top: 0 + }, 500), !0; + }, function(e) { + return closeFullscreenMenu(), !0; + }), $(".control .btnPin").hasClass("selected") ? ($(".videoContainer #hover-map, .videoContainer .control").off("mouseleave"), + $videoControl.css({ + top: 0 + })) : $videoControl.css({ + top: -45 + }), $videoControl.draggable({ + axis: "x" + }); + var $video = $videoControl.parent(), x1 = (y2 = $videoControl.position().top, $video.offset().left), x2 = $video.width() - $videoControl.outerWidth() + x1; + $videoControl.draggable("option", "containment", [ x1, 100, x2, 100 ]), setupHotKeys(), + setupVM(); +}, htmlIrcWindowMode = function() { + $(".videoContainer #hover-map").css({ + pointerEvents: "none" + }), $(".control").removeClass("dockedMode fullscreenMode ui-draggable ui-draggable-handle").addClass("windowedMode").css({ + left: 0 + }), $(".irc-canvas").addClass("windowedMode"), windowOptions.maximized || $("#videoOuter, #dockedButtons").hide(), + $("#thumbnail-wrapper").removeClass("dockedMode"), closeFullscreenMenu(), resizeFrameWindow(); + var options = { + closeOnEscape: !1, + iframeFix: !0, + draggable: !0, + collision: "none", + classes: { + "ui-dialog": "hrc-dialog-window" + } + }; + $.extend(options, windowOptions); + var $dialog = $("#ircWindow").dialog(options), $iloarticle = $("#iloarticle"), $ircWindow = $("#ircWindow"), $title = $ircWindow.prev(".ui-dialog-titlebar").css({ + background: "transparent", + height: "33px", + left: "0px", + top: "0px" + }); + $("button.ui-button, span.ui-dialog-title", $title).hide(), $("#videoContainer").appendTo($ircWindow), + $("#videoContainer div.control").clone().appendTo($title).css({ + "z-index": 90 + }), $(".videoContainer").toggleClass("statusbar--off", !show_html5_statbar), $(".control", $title).stop().css({ + top: 0, + borderRadius: "10px 10px 0 0", + padding: 0, + width: "100%" + }), $(".btnVideoClose", $title).on("click", function() { + $("#videoContainer", "#ircWindow").appendTo("#videoOuter center"), htmlIrcClose(); + }), $(".btnVideoDocked", $title).on("click", function() { + updateWindowOptions(), $("#videoContainer", $ircWindow).appendTo("#videoOuter center"), + $ircWindow.dialog("destroy"), htmlIrcDock(); + }), $(".btnVideoFullScreen", $title).on("click", function() { + updateWindowOptions(), htmlIrcFullscreen(); + }), $(".btnVideoMaximize, .btnVideoRestore").on("click", function() { + $(this).hasClass("btnVideoMaximize") && updateWindowOptions(), htmlIrcMaximizeRestore(); + }), validateWindowOptions() || initWindowOptions(), windowOptions.maximized ? htmlIrcMaximizeRestore(!0) : adjustIrcDialog($dialog), + $dialog.on("dialogdragstart dialogresizestart", function(event, ui) { + $iloarticle.css("overflow", "hidden"); + }).on("dialogdragstop dialogresizestop", function(event, ui) { + $iloarticle.css("overflow", "auto"); + }), setupHotKeys(), setupVM(), setupOptions(); +}, adjustIrcDialog = function($dlg) { + windowOptions.position.my ? $dlg.dialog("option", windowOptions) : ($dlg.dialog("option", { + width: windowOptions.width, + height: windowOptions.height + }), $dlg.parent().css(windowOptions.position)); +}, adjustToResolution = function() { + var $win = $(window), $dlg = $("#ircWindow"), $cnvs = $("#rc_video"); + initWindowOptions(), windowOptions.width = $cnvs.attr("width") || 800, windowOptions.width >= $win.width() && (windowOptions.width = parseInt(.75 * $win.width())), + $dlg.dialog("option", windowOptions); +}, htmlIrcMaximizeRestore = function(forceMax) { + var $win = $(window), $dlg = $("#ircWindow"), footHeight = $("#footpanel").height(), maximize = function() { + $dlg.dialog("option", { + height: $win.height() - footHeight, + width: $win.width() + }), windowOptions.maximized = !0, $(".control, .irc-canvas").addClass("maximized"), + $dlg.parent().css({ + top: 0, + left: 0 + }); + }, updateMaximize = function() { + var $ctrl = $(".control"); + !windowOptions.maximized || $ctrl.hasClass("fullscreenMode") || $ctrl.hasClass("dockedMode") ? $win.off("resize", updateMaximize) : maximize(); + }; + windowOptions.maximized && !forceMax ? (windowOptions.maximized = !1, $win.off("resize", updateMaximize), + $(".control, .irc-canvas").removeClass("maximized"), adjustIrcDialog($dlg)) : (maximize(), + $win.on("resize", updateMaximize)); +}, htmlIrcDock = function() { + $(".control").removeClass("windowedMode fullscreenMode ui-draggable ui-draggable-handle").addClass("dockedMode"), + $(".irc-canvas").removeClass("windowedMode"), $("#thumbnail-wrapper").addClass("dockedMode"), + resizeFrameWindow(), $("#videoContainer").fullScreen(!1), closeFullscreenMenu(), + $(".videoContainer #hover-map, .videoContainer .control").off("mouseleave"), $("#videoOuter, #dockedButtons").show(), + $(".videoContainer").addClass("statusbar--off"), setupHotKeys(), setupVM(); +}; + +$(document).on("fullscreenchange", function(event, data) { + $("#videoContainer").fullScreen() || exitFullScreen(); +}); + +var closeFullscreenMenu = function() { + $("#videoContainer .control").hasClass("fullscreenMode") ? $(".videoContainer .control").stop().animate({ + top: -45 + }, 500) : $(".videoContainer .control").stop().css({ + top: isStandaloneHtml5Irc ? 0 : -45 + }); +}, showIrcToast = function(options) { + $("#videoContainer .control").hasClass("fullscreenMode") && (options.parent = "#videoContainer"), + iLO.showToast(options); +}, exitFullScreen = function() { + var $ircWindow = $("#ircWindow").dialog("instance"); + "undefined" != typeof renderer && renderer.connected && ("undefined" != typeof $ircWindow || isStandaloneHtml5Irc ? htmlIrcWindowMode() : htmlIrcDock()), + $("#videoContainer .toast-item-wrapper").remove(), $(".ui-dialog.irc-dialog").remove(); +}, getVmStatus = function() { + iLO.sendJsonRequest("vm_status", "GET", "json/vm_status", null, function(obj, fname, error) { + var msg = iLO.checkError(obj, fname, error); + return msg ? void showIrcToast({ + text: msg, + type: "critical" + }) : void setupVmMenu(convertVmJsonToRis(obj)); + }); +}, convertVmJsonToRis = function(obj) { + if (!Array.isArray(obj.options)) return obj; + var floppy = obj.options[0], cdrom = obj.options[1], vmObjs = [ { + Id: "1", + Action: "FLOPPY", + ConnectedVia: "NotConnected", + Description: "Virtual Removable Media", + Image: "", + Inserted: !1, + MediaTypes: [ "Floppy", "USBStick" ], + Name: "VirtualMedia", + WriteProtected: !1 + }, { + Id: "2", + Action: "CDROM", + ConnectedVia: "NotConnected", + Description: "Virtual Removable Media", + Image: "", + Inserted: !1, + MediaTypes: [ "CD", "DVD" ], + Name: "VirtualMedia", + WriteProtected: !0 + } ]; + return 1 == floppy.vm_connected && (floppy.vm_url_connected ? (vmObjs[0].Inserted = 1 == floppy.image_inserted, + vmObjs[0].WriteProtected = 1 == floppy.write_protect_flag, vmObjs[0].ConnectedVia = "URI", + vmObjs[0].Image = floppy.image_url, vmObjs[0].ImageName = floppy.image_url_file) : (vmObjs[0].Inserted = !0, + vmObjs[0].WriteProtected = 1 == floppy.write_protect_flag, vmObjs[0].Action = "APPLET_FLOPPY", + vmObjs[0].ConnectedVia = "Applet", vmObjs[0].Image = "irc://")), 1 == cdrom.vm_connected && (cdrom.vm_url_connected ? (vmObjs[1].Inserted = 1 == cdrom.image_inserted, + vmObjs[1].WriteProtected = 1 == cdrom.write_protect_flag, vmObjs[1].ConnectedVia = "URI", + vmObjs[1].Image = cdrom.image_url, vmObjs[1].ImageName = cdrom.image_url_file) : (vmObjs[1].Inserted = !0, + vmObjs[1].WriteProtected = 1 == cdrom.write_protect_flag, vmObjs[1].Action = "APPLET_CDROM", + vmObjs[1].ConnectedVia = "Applet", vmObjs[1].Image = "irc://")), { + VirtualMedia: vmObjs + }; +}, ejectVm = function(url) { + ejectUrlVm(url); +}, insertVm = function(url) { + var dialog, dialogOptions = { + autoOpen: !0, + closeOnEscape: !1, + height: 250, + width: 600, + modal: !0, + collision: "none", + appendTo: $("#videoContainer .control").hasClass("fullscreenMode") ? "#videoContainer" : null, + position: { + my: "center", + at: "center" + }, + draggable: !0, + resizable: !1, + dialogClass: "irc-dialog", + buttons: [ { + text: iLO.translateString("apply"), + click: function() { + var vmForm = new InputValidator(null, null, !0); + return vmForm.clearMessages(), vmForm.allInputsValidate() ? (insertUrlVm($("#disc_upload", dialog).val().trim(), url), + void $(this).dialog("destroy")) : (vmForm.updateMessages(!0), vmForm.autoFocus(), + !1); + } + }, { + text: iLO.translateString("cancel"), + click: function() { + $(this).dialog("destroy"); + } + } ], + open: function() { + iLOGlobal.ie && $(".irc-dialog").next(".ui-widget-overlay").animate({ + height: "100vh" + }, 400), $("#disc_upload").val(""), $("span.form-field__error").text(""), $(".form-field").removeClass("form-field--error"), + $(".ui-dialog-titlebar-close").html(myIcons.close), $(".ui-dialog-titlebar-close").off().on("click", function() { + $(dialog).dialog("destroy"); + }); + }, + close: function(evt) { + $(this).dialog("destroy"), dialog = null; + } + }, $iloarticle = $("#iloarticle"); + dialog = $("#vm-url-form").dialog(dialogOptions).on("dialogdragstart dialogresizestart", function(event, ui) { + return $iloarticle.css("overflow", "hidden"), !0; + }).on("dialogdragstop dialogresizestop", function(event, ui) { + return $iloarticle.css("overflow", "auto"), !0; + }); +}, ejectUrlVm = function(type) { + var ejectObj = { + method: "set_virtual_media_options", + device: type, + command: "EJECT" + }; + iLO.sendJsonRequest("vm_status", "POST", "json/vm_status", ejectObj, ejectVmCallback); +}, insertUrlVm = function(url, type) { + var insertObj = { + method: "set_virtual_media_options", + device: type, + command: "INSERT", + url: url + }; + iLO.sendJsonRequest("vm_status", "POST", "json/vm_status", insertObj, function(o, fname, error) { + var msg = iLO.checkError(o, fname, error); + msg ? insertVmCallback(o, fname, error) : (insertObj.command = "SET", insertObj.boot_option = "CONNECT", + iLO.sendJsonRequest("vm_status", "POST", "json/vm_status", insertObj, insertVmCallback)); + }); +}, insertVmCallback = function(o, fname, error) { + var msg = iLO.checkError(o, fname, error); + showIrcToast(msg ? o.message && "JS_ERR_NO_PRIV" == o.message || o.MessageId && "InsufficientPrivilege" == o.MessageId ? { + text: iLO.translateString("vm.usrNotPrivVirtual"), + type: "critical", + position: "bottom-right" + } : o.MessageId && "VirtualMediaIsDisabled" == o.MessageId ? { + text: iLO.translateString("vm.funcDisabled"), + type: "critical", + position: "bottom-right" + } : o.MessageId && "LicenseKeyRequired" == o.MessageId ? { + text: iLO.translateString("IRC.error.MediaNotLicensed"), + type: "critical", + position: "bottom-right" + } : { + text: iLO.translateString("vm.errProcessVMInsert"), + type: "critical", + position: "bottom-right", + sticky: !1 + } : { + text: iLO.translateString("vm.imgInserted"), + type: "ok", + position: "bottom-right" + }); +}, ejectVmCallback = function(o, fname, error) { + var msg = iLO.checkError(o, fname, error); + showIrcToast(msg ? o.MessageId && "InsufficientPrivilege" == o.MessageId ? { + text: iLO.translateString("vm.usrNotPrivVirtual"), + type: "critical", + position: "bottom-right" + } : { + text: iLO.translateString("vm.errProcessVMEject"), + type: "critical", + position: "bottom-right" + } : { + text: iLO.translateString("vm.processVMEject"), + type: "ok", + position: "bottom-right" + }); +}; + +$(document).ready(function() { + var $control = $(".control"), video = $("#rc_video"); + $("div.btnPin").append(myIcons.pin), $("div.btnOptions").append(myIcons.menu), $("div.btnHotKeys").append(myIcons.keyboard), + $("div.btnVM").append(myIcons.cd), $("div.btnVideoDocked").append(myIcons.template), + $("div.btnVideoWindowMode").append(myIcons.desktop), $("div.btnVideoMaximize").append(myIcons.maximize), + $("div.btnVideoRestore").append(myIcons.restore), $("div.btnVideoFullScreen").append(myIcons.expand), + $("div.btnVideoContract").append(myIcons.contract), $("div.btnVideoClose").append(myIcons.close), + $("span.screen-capture").append(myIcons.camera), $("#encryption-icon").append(myIcons.lock), + $(".power-state").append(myIcons.power), $(".health-state, .vm-activity").append(myIcons.radial), + $(".status-icons").find(".control-icon").addClass("color-index-ignore"), $(".control div.middleControl").text(window.location.hostname), + $(".control.fullscreenMode").draggable({ + axis: "x" + }), $(".control.fullscreenMode").on("mousedown", function() { + var $video = $control.siblings("canvas"), y1 = y2 = $control.position().top, x1 = $video.offset().left, x2 = $video.width() - $control.outerWidth() + x1; + return $control.draggable("option", "containment", [ x1, y1, x2, y2 ]), !0; + }), video[0].removeAttribute("controls"), closeFullscreenMenu(), $(".btnVideoClose").on("click", function() { + htmlIrcClose(); + }), $(".btnVideoFullScreen").on("click", function() { + htmlIrcFullscreen(); + }), $(".btnVideoWindowMode").on("click", function() { + htmlIrcWindowMode(); + }), $(".btnVideoMaximize, .btnVideoRestore").on("click", function() { + htmlIrcMaximizeRestore(); + }), $(".btnPin").on("click", function() { + $(this).hasClass("selected") ? ($(".videoContainer #hover-map, .videoContainer .control").on("mouseleave", function() { + closeFullscreenMenu(); + }), $(".videoContainer #hover-map").css({ + pointerEvents: "inherit" + }), $(this).removeClass("selected")) : ($(".videoContainer #hover-map, .videoContainer .control").off("mouseleave"), + $(".videoContainer #hover-map").css({ + pointerEvents: "none" + }), $(this).addClass("selected")); + }), $(".screen-capture").on("click", function() { + screenCapture(); + }), $(document).on("dblclick", "div.middleControl", function(evt) { + toggleStatusBar(!show_html5_statbar); + }), $(document).on("dblclick", "div.status-resolution", function(evt) { + $(".control").hasClass("windowedMode") && !windowOptions.maximized && adjustToResolution(); + }), $(".btnVideoContract").on("click", function() { + $("#videoContainer").fullScreen(!1); + }); +}); \ No newline at end of file diff --git a/public/hpilo/js/ircKeyboardMouse.js b/public/hpilo/js/ircKeyboardMouse.js new file mode 100644 index 0000000..422b83b --- /dev/null +++ b/public/hpilo/js/ircKeyboardMouse.js @@ -0,0 +1,288 @@ +function KeyboardMouse(options) { + function clearKeymap() { + for (var i = 0; i < me.kmap.length; i++) me.kmap[i] = !1; + } + var me = this, canvas = options.canvas, worker = options.worker; + this.version = options.ilo_version || 5, this.kbdLayoutId = "en", this.mousex = 0, + this.mousey = 0, this.mouse_ax = 0, this.mouse_ay = 0, this.mouse_btn = 0, this.kmap = Array(256); + var en_kbd_map = [ 0, 0, 0, 72, 0, 0, 0, 0, 42, 43, 0, 0, 216, 40, 0, 0, 0, 0, 0, 72, 57, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 44, 75, 78, 77, 74, 80, 82, 79, 81, 0, 0, 0, 70, 73, 76, 0, 39, 30, 31, 32, 33, 34, 35, 36, 37, 38, 37, 51, 0, 0, 0, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 227, 231, 101, 0, 0, 98, 89, 90, 91, 92, 93, 94, 95, 96, 97, 85, 87, 0, 86, 99, 84, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 229, 224, 228, 226, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 46, 54, 45, 55, 56, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 49, 48, 52, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255 ], ja_kbd_map = [ 0, 0, 0, 72, 0, 0, 0, 0, 42, 43, 0, 0, 216, 40, 0, 0, 0, 0, 0, 72, 57, 0, 0, 0, 0, 53, 0, 41, 138, 139, 0, 0, 44, 75, 78, 77, 74, 80, 82, 79, 81, 0, 0, 0, 70, 73, 76, 0, 39, 30, 31, 32, 33, 34, 35, 36, 37, 38, 37, 51, 0, 0, 0, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 227, 231, 101, 0, 0, 98, 89, 90, 91, 92, 93, 94, 95, 96, 97, 85, 87, 0, 86, 99, 84, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 229, 224, 228, 226, 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 51, 54, 45, 55, 56, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 137, 50, 46, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 136, 53, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255 ], locations = { + 0: "", + 1: "Left", + 2: "Right", + 3: "Numpad" + }, keyboardCodes = { + KeyA: 4, + KeyB: 5, + KeyC: 6, + KeyD: 7, + KeyE: 8, + KeyF: 9, + KeyG: 10, + KeyH: 11, + KeyI: 12, + KeyJ: 13, + KeyK: 14, + KeyL: 15, + KeyM: 16, + KeyN: 17, + KeyO: 18, + KeyP: 19, + KeyQ: 20, + KeyR: 21, + KeyS: 22, + KeyT: 23, + KeyU: 24, + KeyV: 25, + KeyW: 26, + KeyX: 27, + KeyY: 28, + KeyZ: 29, + Digit1: 30, + Digit2: 31, + Digit3: 32, + Digit4: 33, + Digit5: 34, + Digit6: 35, + Digit7: 36, + Digit8: 37, + Digit9: 38, + Digit0: 39, + Enter: 40, + Escape: 41, + Backspace: 42, + Tab: 43, + Space: 44, + Minus: 45, + Equal: 46, + BracketLeft: 47, + BracketRight: 48, + Backslash: 49, + IntlHash: 50, + Semicolon: 51, + Quote: 52, + Backquote: 53, + Comma: 54, + Period: 55, + Slash: 56, + CapsLock: 57, + F1: 58, + F2: 59, + F3: 60, + F4: 61, + F5: 62, + F6: 63, + F7: 64, + F8: 65, + F9: 66, + F10: 67, + F11: 68, + F12: 69, + PrintScreen: 70, + ScrollLock: 71, + Pause: 72, + Insert: 73, + Home: 74, + PageUp: 75, + Delete: 76, + End: 77, + PageDown: 78, + ArrowRight: 79, + ArrowLeft: 80, + ArrowDown: 81, + ArrowUp: 82, + NumLock: 83, + NumpadDivide: 84, + NumpadMultiply: 85, + NumpadSubtract: 86, + NumpadAdd: 87, + NumpadEnter: 88, + Numpad1: 89, + Numpad2: 90, + Numpad3: 91, + Numpad4: 92, + Numpad5: 93, + Numpad6: 94, + Numpad7: 95, + Numpad8: 96, + Numpad9: 97, + Numpad0: 98, + NumpadDecimal: 99, + IntlBackslash: 100, + ContextMenu: 101, + Power: 102, + NumpadEqual: 103, + F13: 104, + F14: 105, + F15: 106, + F16: 107, + F17: 108, + F18: 109, + F19: 110, + F20: 111, + F21: 112, + F22: 113, + F23: 114, + F24: 115, + Open: 116, + Help: 117, + Props: 118, + Select: 119, + Stop: 120, + Again: 121, + Undo: 122, + Cut: 123, + Copy: 124, + Paste: 125, + Find: 126, + AudioVolumeMute: 127, + AudioVolumeUp: 128, + AudioVolumeDown: 129, + NumpadComma: 133, + IntlRo: 135, + KanaMode: 136, + IntlYen: 137, + Convert: 138, + NonConvert: 139, + Lang1: 144, + Lang2: 145, + Lang3: 146, + Lang4: 147, + Lang5: 148, + Lang6: 149, + Lang7: 150, + Lang8: 151, + Lang9: 152, + NumpadParenLeft: 182, + NumpadParenRight: 183, + NumpadBackspace: 187, + NumpadMemoryStore: 208, + NumpadMemoryRecall: 209, + NumpadMemoryClear: 210, + NumpadMemoryAdd: 211, + NumpadMemorySubtract: 212, + NumpadClear: 216, + NumpadClearEntry: 217, + ControlLeft: 224, + ShiftLeft: 225, + AltLeft: 226, + OSLeft: 227, + MetaLeft: 227, + ControlRight: 228, + ShiftRight: 229, + AltRight: 230, + OSRight: 231, + MetaRight: 231 + }; + this.setKbdLayoutId = function(id) { + switch (id) { + case "ja": + me.kbdLayoutId = "ja", me.jskey_to_hid = ja_kbd_map; + break; + + case "zh": + case "fr": + $.log("'" + id + "' is not a supported keyboard type."); + + case "en": + default: + me.kbdLayoutId = "en", me.jskey_to_hid = en_kbd_map; + } + return iLO.setCookie("UserPref", [ "kbd_type", me.kbdLayoutId ]), clearKeymap(), + me.kbdLayoutId; + }, this.setKbdLayoutId(iLO.getCookie("UserPref", "kbd_type")), this.send_vkey = function(code, down) { + var old, i, hid = keyboardCodes[code], j = 0, kcmd = [ 0, 0, 0, 0, 0, 0, 0, 0 ]; + if (hid && (old = me.kmap[hid], me.kmap[hid] = down, old !== down)) { + for (i = 0; 256 > i; i++) me.kmap[i] && (224 === (224 & i) ? kcmd[0] |= 1 << i - 224 : (kcmd[2 + j] = i, + 6 === ++j && (j = 5))); + worker.kbd_send(kcmd); + } + }, this.on_key = function(evt) { + var old, i, down = "keydown" === evt.type ? !0 : !1, code = evt.code || evt.originalEvent.code, key = evt.key || evt.originalEvent.key, loc = evt.location || evt.originalEvent.location, hid = code && keyboardCodes[code] ? keyboardCodes[code] : me.jskey_to_hid[evt.keyCode], j = 0, kcmd = [ 0, 0, 0, 0, 0, 0, 0, 0 ]; + if (!code) switch (key) { + case "Control": + case "Shift": + case "Alt": + loc > 0 && 3 > loc && (hid = keyboardCodes[key + locations[loc]]); + break; + + case "Win": + case "Meta": + loc > 0 && 3 > loc && (hid = keyboardCodes["OS" + locations[loc]]); + } + if (old = me.kmap[hid], me.kmap[hid] = down, old !== down) { + for (i = 0; 256 > i; i++) me.kmap[i] && (224 === (224 & i) ? kcmd[0] |= 1 << i - 224 : (kcmd[2 + j] = i, + 6 === ++j && (j = 5))); + worker.kbd_send(kcmd); + } + return evt.cancelable = !0, evt.stopPropagation(), evt.preventDefault(), evt.returnValue = !1, + !1; + }, this.on_mouse_button = function(evt) { + var mcmd = [ 255, 0, 0 ], b = 0; + if (2 === me.version) switch (evt.button) { + case 0: + b = 4; + break; + + case 1: + b = 2; + break; + + case 2: + b = 1; + } else switch (evt.button) { + case 0: + b = 1; + break; + + case 1: + b = 4; + break; + + case 2: + b = 2; + } + return "mousedown" === evt.type ? (mcmd[1] = 209, mcmd[2] = b, me.mouse_btn |= b) : "mouseup" === evt.type ? (mcmd[1] = 210, + mcmd[2] = b, me.mouse_btn &= ~b) : $.log("Unknown mouse event: " + evt), me.mouse_send(0, 0, me.mouse_ax, me.mouse_ay, me.mouse_btn, 0) ? !1 : (worker.mouse_send(mcmd), + !1); + }, this.mouse_send = function(rx, ry, ax, ay, button, wheel) { + if (2 === this.version) return !1; + var buf = [ 2, 0, 255 & ax, ax >> 8, 255 & ay, ay >> 8, 255 & rx, 255 & ry, button, wheel ]; + return worker.mouse_send(buf), !0; + }, this.on_mouse_move = function(evt) { + var ax, ay, dx, dy, mcmd = [ 255, 208, 0, 0, 0, 0, 0, 0 ], $canvas = $(canvas), offset = $canvas.offset(), width = $canvas.width(), height = $canvas.height(), x = evt.pageX - offset.left, y = evt.pageY - offset.top; + return ax = ~~(3e3 * x / width), ay = ~~(3e3 * y / height), 0 > ax && (ax = 0), + 0 > ay && (ay = 0), dx = x - me.mousex, me.mousex = x, dy = -(y - me.mousey), me.mousey = y, + me.mouse_ax = ax, me.mouse_ay = ay, -127 > dx && (dx = -127), dx > 127 && (dx = 127), + -127 > dy && (dy = -127), dy > 127 && (dy = 127), me.mouse_send(dx, dy, ax, ay, me.mouse_btn, 0) ? void 0 : (mcmd[2] = 255 & dx, + mcmd[3] = 255 & dy, mcmd[4] = ax >> 8, mcmd[5] = 255 & ax, mcmd[6] = ay >> 8, mcmd[7] = 255 & ay, + worker.mouse_send(mcmd), !1); + }, this.on_mouse_wheel = function(evt) { + return me.mouse_send(0, 0, me.mouse_ax, me.mouse_ay, me.mouse_btn, 255 & evt.deltaY), + !1; + }, this.mouseenter = function(evt) { + var $canvas = $(canvas); + $canvas.attr("contentEditable", "true").trigger("focus"), $canvas.attr("contentEditable", "false"), + $(document).on("keydown", me.on_key), $(document).on("keyup", me.on_key); + }, this.mouseleave = function(evt) { + $(document).off("keydown", me.on_key), $(document).off("keyup", me.on_key); + }, this.no_op = function() { + return !1; + }, this.bind_all = function() { + $(document).ready(function() { + me.unbind_all(); + var $canvas = $(canvas); + $canvas.on("mouseover", me.mouseenter), $canvas.on("mouseout", me.mouseleave), $canvas.on("mousemove", me.on_mouse_move), + $canvas.on("mousedown", me.on_mouse_button), $canvas.on("mouseup", me.on_mouse_button), + $canvas.on("mousewheel", me.on_mouse_wheel), $canvas.on("keydown", me.on_key), $canvas.on("keyup", me.on_key), + $canvas.on("contextmenu", me.no_op), $(document, ".hrc-dialog-window").on("blur focusout", me.all_keys_up), + $(document, ".hrc-dialog-window").on("help", me.no_op); + }); + }, this.unbind_all = function() { + var $canvas = $(canvas); + $canvas.off("mouseover", me.mouseenter), $canvas.off("mouseout", me.mouseleave), + $canvas.off("mousemove", me.on_mouse_move), $canvas.off("mousedown", me.on_mouse_button), + $canvas.off("mouseup", me.on_mouse_button), $canvas.off("mousewheel", me.on_mouse_wheel), + $canvas.off("keydown", me.on_key), $canvas.off("keyup", me.on_key), $(document, ".hrc-dialog-window").off("blur focusout", me.all_keys_up), + $(document, ".hrc-dialog-window").off("help", me.no_op); + }; +} \ No newline at end of file diff --git a/public/hpilo/js/jquery-ui.js b/public/hpilo/js/jquery-ui.js new file mode 100644 index 0000000..4109404 --- /dev/null +++ b/public/hpilo/js/jquery-ui.js @@ -0,0 +1,18709 @@ +/*! jQuery UI - v1.12.1 - 2016-09-14 +* http://jqueryui.com +* Includes: widget.js, position.js, data.js, disable-selection.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js, focusable.js, form-reset-mixin.js, jquery-1-7.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/draggable.js, widgets/droppable.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/resizable.js, widgets/selectable.js, widgets/selectmenu.js, widgets/slider.js, widgets/sortable.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js +* Copyright jQuery Foundation and other contributors; Licensed MIT */ + +/* Updated by iLO Engineering to fix APIs that were deprecated in jQuery 3.x */ + +(function( factory ) { + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define([ "jquery" ], factory ); + } else { + + // Browser globals + factory( jQuery ); + } +}(function( $ ) { + +$.ui = $.ui || {}; + +var version = $.ui.version = "1.12.1"; + + +/*! + * jQuery UI Widget 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Widget +//>>group: Core +//>>description: Provides a factory for creating stateful widgets with a common API. +//>>docs: http://api.jqueryui.com/jQuery.widget/ +//>>demos: http://jqueryui.com/widget/ + + + +var widgetUuid = 0; +var widgetSlice = Array.prototype.slice; + +$.cleanData = ( function( orig ) { + return function( elems ) { + var events, elem, i; + for ( i = 0; ( elem = elems[ i ] ) != null; i++ ) { + try { + + // Only trigger remove when necessary to save time + events = $._data( elem, "events" ); + if ( events && events.remove ) { + $( elem ).triggerHandler( "remove" ); + } + + // Http://bugs.jquery.com/ticket/8235 + } catch ( e ) {} + } + orig( elems ); + }; +} )( $.cleanData ); + +$.widget = function( name, base, prototype ) { + var existingConstructor, constructor, basePrototype; + + // ProxiedPrototype allows the provided prototype to remain unmodified + // so that it can be used as a mixin for multiple widgets (#8876) + var proxiedPrototype = {}; + + var namespace = name.split( "." )[ 0 ]; + name = name.split( "." )[ 1 ]; + var fullName = namespace + "-" + name; + + if ( !prototype ) { + prototype = base; + base = $.Widget; + } + + if ( Array.isArray( prototype ) ) { + prototype = $.extend.apply( null, [ {} ].concat( prototype ) ); + } + + // Create selector for plugin + $.expr.pseudos[ fullName.toLowerCase() ] = function( elem ) { + return !!$.data( elem, fullName ); + }; + + $[ namespace ] = $[ namespace ] || {}; + existingConstructor = $[ namespace ][ name ]; + constructor = $[ namespace ][ name ] = function( options, element ) { + + // Allow instantiation without "new" keyword + if ( !this._createWidget ) { + return new constructor( options, element ); + } + + // Allow instantiation without initializing for simple inheritance + // must use "new" keyword (the code above always passes args) + if ( arguments.length ) { + this._createWidget( options, element ); + } + }; + + // Extend with the existing constructor to carry over any static properties + $.extend( constructor, existingConstructor, { + version: prototype.version, + + // Copy the object used to create the prototype in case we need to + // redefine the widget later + _proto: $.extend( {}, prototype ), + + // Track widgets that inherit from this widget in case this widget is + // redefined after a widget inherits from it + _childConstructors: [] + } ); + + basePrototype = new base(); + + // We need to make the options hash a property directly on the new instance + // otherwise we'll modify the options hash on the prototype that we're + // inheriting from + basePrototype.options = $.widget.extend( {}, basePrototype.options ); + $.each( prototype, function( prop, value ) { + if ( typeof value !== 'function' ) { + proxiedPrototype[ prop ] = value; + return; + } + proxiedPrototype[ prop ] = ( function() { + function _super() { + return base.prototype[ prop ].apply( this, arguments ); + } + + function _superApply( args ) { + return base.prototype[ prop ].apply( this, args ); + } + + return function() { + var __super = this._super; + var __superApply = this._superApply; + var returnValue; + + this._super = _super; + this._superApply = _superApply; + + returnValue = value.apply( this, arguments ); + + this._super = __super; + this._superApply = __superApply; + + return returnValue; + }; + } )(); + } ); + constructor.prototype = $.widget.extend( basePrototype, { + + // TODO: remove support for widgetEventPrefix + // always use the name + a colon as the prefix, e.g., draggable:start + // don't prefix for widgets that aren't DOM-based + widgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name + }, proxiedPrototype, { + constructor: constructor, + namespace: namespace, + widgetName: name, + widgetFullName: fullName + } ); + + // If this widget is being redefined then we need to find all widgets that + // are inheriting from it and redefine all of them so that they inherit from + // the new version of this widget. We're essentially trying to replace one + // level in the prototype chain. + if ( existingConstructor ) { + $.each( existingConstructor._childConstructors, function( i, child ) { + var childPrototype = child.prototype; + + // Redefine the child widget using the same prototype that was + // originally used, but inherit from the new version of the base + $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, + child._proto ); + } ); + + // Remove the list of existing child constructors from the old constructor + // so the old child constructors can be garbage collected + delete existingConstructor._childConstructors; + } else { + base._childConstructors.push( constructor ); + } + + $.widget.bridge( name, constructor ); + + return constructor; +}; + +$.widget.extend = function( target ) { + var input = widgetSlice.call( arguments, 1 ); + var inputIndex = 0; + var inputLength = input.length; + var key; + var value; + + for ( ; inputIndex < inputLength; inputIndex++ ) { + for ( key in input[ inputIndex ] ) { + value = input[ inputIndex ][ key ]; + if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) { + + // Clone objects + if ( $.isPlainObject( value ) ) { + target[ key ] = $.isPlainObject( target[ key ] ) ? + $.widget.extend( {}, target[ key ], value ) : + + // Don't extend strings, arrays, etc. with objects + $.widget.extend( {}, value ); + + // Copy everything else by reference + } else { + target[ key ] = value; + } + } + } + } + return target; +}; + +$.widget.bridge = function( name, object ) { + var fullName = object.prototype.widgetFullName || name; + $.fn[ name ] = function( options ) { + var isMethodCall = typeof options === "string"; + var args = widgetSlice.call( arguments, 1 ); + var returnValue = this; + + if ( isMethodCall ) { + + // If this is an empty collection, we need to have the instance method + // return undefined instead of the jQuery instance + if ( !this.length && options === "instance" ) { + returnValue = undefined; + } else { + this.each( function() { + var methodValue; + var instance = $.data( this, fullName ); + + if ( options === "instance" ) { + returnValue = instance; + return false; + } + + if ( !instance ) { + return $.error( "cannot call methods on " + name + + " prior to initialization; " + + "attempted to call method '" + options + "'" ); + } + + if ( typeof instance[ options ] !== 'function' || options.charAt( 0 ) === "_" ) { + return $.error( "no such method '" + options + "' for " + name + + " widget instance" ); + } + + methodValue = instance[ options ].apply( instance, args ); + + if ( methodValue !== instance && methodValue !== undefined ) { + returnValue = methodValue && methodValue.jquery ? + returnValue.pushStack( methodValue.get() ) : + methodValue; + return false; + } + } ); + } + } else { + + // Allow multiple hashes to be passed on init + if ( args.length ) { + options = $.widget.extend.apply( null, [ options ].concat( args ) ); + } + + this.each( function() { + var instance = $.data( this, fullName ); + if ( instance ) { + instance.option( options || {} ); + if ( instance._init ) { + instance._init(); + } + } else { + $.data( this, fullName, new object( options, this ) ); + } + } ); + } + + return returnValue; + }; +}; + +$.Widget = function( /* options, element */ ) {}; +$.Widget._childConstructors = []; + +$.Widget.prototype = { + widgetName: "widget", + widgetEventPrefix: "", + defaultElement: "
    ", + + options: { + classes: {}, + disabled: false, + + // Callbacks + create: null + }, + + _createWidget: function( options, element ) { + element = $( element || this.defaultElement || this )[ 0 ]; + this.element = $( element ); + this.uuid = widgetUuid++; + this.eventNamespace = "." + this.widgetName + this.uuid; + + this.bindings = $(); + this.hoverable = $(); + this.focusable = $(); + this.classesElementLookup = {}; + + if ( element !== this ) { + $.data( element, this.widgetFullName, this ); + this._on( true, this.element, { + remove: function( event ) { + if ( event.target === element ) { + this.destroy(); + } + } + } ); + this.document = $( element.style ? + + // Element within the document + element.ownerDocument : + + // Element is window or document + element.document || element ); + this.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow ); + } + + this.options = $.widget.extend( {}, + this.options, + this._getCreateOptions(), + options ); + + this._create(); + + if ( this.options.disabled ) { + this._setOptionDisabled( this.options.disabled ); + } + + this._trigger( "create", null, this._getCreateEventData() ); + this._init(); + }, + + _getCreateOptions: function() { + return {}; + }, + + _getCreateEventData: $.noop, + + _create: $.noop, + + _init: $.noop, + + destroy: function() { + var that = this; + + this._destroy(); + $.each( this.classesElementLookup, function( key, value ) { + that._removeClass( value, key ); + } ); + + // We can probably remove the unbind calls in 2.0 + // all event bindings should go through this._on() + this.element + .off( this.eventNamespace ) + .removeData( this.widgetFullName ); + this.widget() + .off( this.eventNamespace ) + .removeAttr( "aria-disabled" ); + + // Clean up events and states + this.bindings.off( this.eventNamespace ); + }, + + _destroy: $.noop, + + widget: function() { + return this.element; + }, + + option: function( key, value ) { + var options = key; + var parts; + var curOption; + var i; + + if ( arguments.length === 0 ) { + + // Don't return a reference to the internal hash + return $.widget.extend( {}, this.options ); + } + + if ( typeof key === "string" ) { + + // Handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } } + options = {}; + parts = key.split( "." ); + key = parts.shift(); + if ( parts.length ) { + curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] ); + for ( i = 0; i < parts.length - 1; i++ ) { + curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {}; + curOption = curOption[ parts[ i ] ]; + } + key = parts.pop(); + if ( arguments.length === 1 ) { + return curOption[ key ] === undefined ? null : curOption[ key ]; + } + curOption[ key ] = value; + } else { + if ( arguments.length === 1 ) { + return this.options[ key ] === undefined ? null : this.options[ key ]; + } + options[ key ] = value; + } + } + + this._setOptions( options ); + + return this; + }, + + _setOptions: function( options ) { + var key; + + for ( key in options ) { + this._setOption( key, options[ key ] ); + } + + return this; + }, + + _setOption: function( key, value ) { + if ( key === "classes" ) { + this._setOptionClasses( value ); + } + + this.options[ key ] = value; + + if ( key === "disabled" ) { + this._setOptionDisabled( value ); + } + + return this; + }, + + _setOptionClasses: function( value ) { + var classKey, elements, currentElements; + + for ( classKey in value ) { + currentElements = this.classesElementLookup[ classKey ]; + if ( value[ classKey ] === this.options.classes[ classKey ] || + !currentElements || + !currentElements.length ) { + continue; + } + + // We are doing this to create a new jQuery object because the _removeClass() call + // on the next line is going to destroy the reference to the current elements being + // tracked. We need to save a copy of this collection so that we can add the new classes + // below. + elements = $( currentElements.get() ); + this._removeClass( currentElements, classKey ); + + // We don't use _addClass() here, because that uses this.options.classes + // for generating the string of classes. We want to use the value passed in from + // _setOption(), this is the new value of the classes option which was passed to + // _setOption(). We pass this value directly to _classes(). + elements.addClass( this._classes( { + element: elements, + keys: classKey, + classes: value, + add: true + } ) ); + } + }, + + _setOptionDisabled: function( value ) { + this._toggleClass( this.widget(), this.widgetFullName + "-disabled", null, !!value ); + + // If the widget is becoming disabled, then nothing is interactive + if ( value ) { + this._removeClass( this.hoverable, null, "ui-state-hover" ); + this._removeClass( this.focusable, null, "ui-state-focus" ); + } + }, + + enable: function() { + return this._setOptions( { disabled: false } ); + }, + + disable: function() { + return this._setOptions( { disabled: true } ); + }, + + _classes: function( options ) { + var full = []; + var that = this; + + options = $.extend( { + element: this.element, + classes: this.options.classes || {} + }, options ); + + function processClassString( classes, checkOption ) { + var current, i; + for ( i = 0; i < classes.length; i++ ) { + current = that.classesElementLookup[ classes[ i ] ] || $(); + if ( options.add ) { + current = $( $.uniqueSort( current.get().concat( options.element.get() ) ) ); + } else { + current = $( current.not( options.element ).get() ); + } + that.classesElementLookup[ classes[ i ] ] = current; + full.push( classes[ i ] ); + if ( checkOption && options.classes[ classes[ i ] ] ) { + full.push( options.classes[ classes[ i ] ] ); + } + } + } + + this._on( options.element, { + "remove": "_untrackClassesElement" + } ); + + if ( options.keys ) { + processClassString( options.keys.match( /\S+/g ) || [], true ); + } + if ( options.extra ) { + processClassString( options.extra.match( /\S+/g ) || [] ); + } + + return full.join( " " ); + }, + + _untrackClassesElement: function( event ) { + var that = this; + $.each( that.classesElementLookup, function( key, value ) { + if ( $.inArray( event.target, value ) !== -1 ) { + that.classesElementLookup[ key ] = $( value.not( event.target ).get() ); + } + } ); + }, + + _removeClass: function( element, keys, extra ) { + return this._toggleClass( element, keys, extra, false ); + }, + + _addClass: function( element, keys, extra ) { + return this._toggleClass( element, keys, extra, true ); + }, + + _toggleClass: function( element, keys, extra, add ) { + add = ( typeof add === "boolean" ) ? add : extra; + var shift = ( typeof element === "string" || element === null ), + options = { + extra: shift ? keys : extra, + keys: shift ? element : keys, + element: shift ? this.element : element, + add: add + }; + options.element.toggleClass( this._classes( options ), add ); + return this; + }, + + _on: function( suppressDisabledCheck, element, handlers ) { + var delegateElement; + var instance = this; + + // No suppressDisabledCheck flag, shuffle arguments + if ( typeof suppressDisabledCheck !== "boolean" ) { + handlers = element; + element = suppressDisabledCheck; + suppressDisabledCheck = false; + } + + // No element argument, shuffle and use this.element + if ( !handlers ) { + handlers = element; + element = this.element; + delegateElement = this.widget(); + } else { + element = delegateElement = $( element ); + this.bindings = this.bindings.add( element ); + } + + $.each( handlers, function( event, handler ) { + function handlerProxy() { + + // Allow widgets to customize the disabled handling + // - disabled as an array instead of boolean + // - disabled class as method for disabling individual parts + if ( !suppressDisabledCheck && + ( instance.options.disabled === true || + $( this ).hasClass( "ui-state-disabled" ) ) ) { + return; + } + return ( typeof handler === "string" ? instance[ handler ] : handler ) + .apply( instance, arguments ); + } + + // Copy the guid so direct unbinding works + if ( typeof handler !== "string" ) { + handlerProxy.guid = handler.guid = + handler.guid || handlerProxy.guid || $.guid++; + } + + var match = event.match( /^([\w:-]*)\s*(.*)$/ ); + var eventName = match[ 1 ] + instance.eventNamespace; + var selector = match[ 2 ]; + + if ( selector ) { + delegateElement.on( eventName, selector, handlerProxy ); + } else { + element.on( eventName, handlerProxy ); + } + } ); + }, + + _off: function( element, eventName ) { + eventName = ( eventName || "" ).split( " " ).join( this.eventNamespace + " " ) + + this.eventNamespace; + element.off( eventName ).off( eventName ); + + // Clear the stack to avoid memory leaks (#10056) + this.bindings = $( this.bindings.not( element ).get() ); + this.focusable = $( this.focusable.not( element ).get() ); + this.hoverable = $( this.hoverable.not( element ).get() ); + }, + + _delay: function( handler, delay ) { + function handlerProxy() { + return ( typeof handler === "string" ? instance[ handler ] : handler ) + .apply( instance, arguments ); + } + var instance = this; + return setTimeout( handlerProxy, delay || 0 ); + }, + + _hoverable: function( element ) { + this.hoverable = this.hoverable.add( element ); + this._on( element, { + mouseenter: function( event ) { + this._addClass( $( event.currentTarget ), null, "ui-state-hover" ); + }, + mouseleave: function( event ) { + this._removeClass( $( event.currentTarget ), null, "ui-state-hover" ); + } + } ); + }, + + _focusable: function( element ) { + this.focusable = this.focusable.add( element ); + this._on( element, { + focusin: function( event ) { + this._addClass( $( event.currentTarget ), null, "ui-state-focus" ); + }, + focusout: function( event ) { + this._removeClass( $( event.currentTarget ), null, "ui-state-focus" ); + } + } ); + }, + + _trigger: function( type, event, data ) { + var prop, orig; + var callback = this.options[ type ]; + + data = data || {}; + event = $.Event( event ); + event.type = ( type === this.widgetEventPrefix ? + type : + this.widgetEventPrefix + type ).toLowerCase(); + + // The original event may come from any element + // so we need to reset the target on the new event + event.target = this.element[ 0 ]; + + // Copy original event properties over to the new event + orig = event.originalEvent; + if ( orig ) { + for ( prop in orig ) { + if ( !( prop in event ) ) { + event[ prop ] = orig[ prop ]; + } + } + } + + this.element.trigger( event, data ); + return !( typeof callback === 'function' && + callback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false || + event.isDefaultPrevented() ); + } +}; + +$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) { + $.Widget.prototype[ "_" + method ] = function( element, options, callback ) { + if ( typeof options === "string" ) { + options = { effect: options }; + } + + var hasOptions; + var effectName = !options ? + method : + options === true || typeof options === "number" ? + defaultEffect : + options.effect || defaultEffect; + + options = options || {}; + if ( typeof options === "number" ) { + options = { duration: options }; + } + + hasOptions = !$.isEmptyObject( options ); + options.complete = callback; + + if ( options.delay ) { + element.delay( options.delay ); + } + + if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) { + element[ method ]( options ); + } else if ( effectName !== method && element[ effectName ] ) { + element[ effectName ]( options.duration, options.easing, callback ); + } else { + element.queue( function( next ) { + $( this )[ method ](); + if ( callback ) { + callback.call( element[ 0 ] ); + } + next(); + } ); + } + }; +} ); + +var widget = $.widget; + + +/*! + * jQuery UI Position 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/position/ + */ + +//>>label: Position +//>>group: Core +//>>description: Positions elements relative to other elements. +//>>docs: http://api.jqueryui.com/position/ +//>>demos: http://jqueryui.com/position/ + + +( function() { +var cachedScrollbarWidth, + max = Math.max, + abs = Math.abs, + rhorizontal = /left|center|right/, + rvertical = /top|center|bottom/, + roffset = /[\+\-]\d+(\.[\d]+)?%?/, + rposition = /^\w+/, + rpercent = /%$/, + _position = $.fn.position; + +function getOffsets( offsets, width, height ) { + return [ + parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ), + parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 ) + ]; +} + +function parseCss( element, property ) { + return parseInt( $.css( element, property ), 10 ) || 0; +} + +function getDimensions( elem ) { + var raw = elem[ 0 ]; + if ( raw.nodeType === 9 ) { + return { + width: elem.width(), + height: elem.height(), + offset: { top: 0, left: 0 } + }; + } + if ( raw != null && raw === raw.window ) { + return { + width: elem.width(), + height: elem.height(), + offset: { top: elem.scrollTop(), left: elem.scrollLeft() } + }; + } + if ( raw.preventDefault ) { + return { + width: 0, + height: 0, + offset: { top: raw.pageY, left: raw.pageX } + }; + } + return { + width: elem.outerWidth(), + height: elem.outerHeight(), + offset: elem.offset() + }; +} + +$.position = { + scrollbarWidth: function() { + if ( cachedScrollbarWidth !== undefined ) { + return cachedScrollbarWidth; + } + var w1, w2, + div = $( "
    " + + "
    " ), + innerDiv = div.children()[ 0 ]; + + $( "body" ).append( div ); + w1 = innerDiv.offsetWidth; + div.css( "overflow", "scroll" ); + + w2 = innerDiv.offsetWidth; + + if ( w1 === w2 ) { + w2 = div[ 0 ].clientWidth; + } + + div.remove(); + + return ( cachedScrollbarWidth = w1 - w2 ); + }, + getScrollInfo: function( within ) { + var overflowX = within.isWindow || within.isDocument ? "" : + within.element.css( "overflow-x" ), + overflowY = within.isWindow || within.isDocument ? "" : + within.element.css( "overflow-y" ), + hasOverflowX = overflowX === "scroll" || + ( overflowX === "auto" && within.width < within.element[ 0 ].scrollWidth ), + hasOverflowY = overflowY === "scroll" || + ( overflowY === "auto" && within.height < within.element[ 0 ].scrollHeight ); + return { + width: hasOverflowY ? $.position.scrollbarWidth() : 0, + height: hasOverflowX ? $.position.scrollbarWidth() : 0 + }; + }, + getWithinInfo: function( element ) { + var withinElement = $( element || window ), + //isWindow = $.isWindow( withinElement[ 0 ] ), + isWindow = (withinElement[0] != null && withinElement[0] === withinElement[0].window); + isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9, + hasOffset = !isWindow && !isDocument; + return { + element: withinElement, + isWindow: isWindow, + isDocument: isDocument, + offset: hasOffset ? $( element ).offset() : { left: 0, top: 0 }, + scrollLeft: withinElement.scrollLeft(), + scrollTop: withinElement.scrollTop(), + width: withinElement.outerWidth(), + height: withinElement.outerHeight() + }; + } +}; + +$.fn.position = function( options ) { + if ( !options || !options.of ) { + return _position.apply( this, arguments ); + } + + // Make a copy, we don't want to modify arguments + options = $.extend( {}, options ); + + var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions, + target = $( options.of ), + within = $.position.getWithinInfo( options.within ), + scrollInfo = $.position.getScrollInfo( within ), + collision = ( options.collision || "flip" ).split( " " ), + offsets = {}; + + dimensions = getDimensions( target ); + if ( target[ 0 ].preventDefault ) { + + // Force left top to allow flipping + options.at = "left top"; + } + targetWidth = dimensions.width; + targetHeight = dimensions.height; + targetOffset = dimensions.offset; + + // Clone to reuse original targetOffset later + basePosition = $.extend( {}, targetOffset ); + + // Force my and at to have valid horizontal and vertical positions + // if a value is missing or invalid, it will be converted to center + $.each( [ "my", "at" ], function() { + var pos = ( options[ this ] || "" ).split( " " ), + horizontalOffset, + verticalOffset; + + if ( pos.length === 1 ) { + pos = rhorizontal.test( pos[ 0 ] ) ? + pos.concat( [ "center" ] ) : + rvertical.test( pos[ 0 ] ) ? + [ "center" ].concat( pos ) : + [ "center", "center" ]; + } + pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center"; + pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center"; + + // Calculate offsets + horizontalOffset = roffset.exec( pos[ 0 ] ); + verticalOffset = roffset.exec( pos[ 1 ] ); + offsets[ this ] = [ + horizontalOffset ? horizontalOffset[ 0 ] : 0, + verticalOffset ? verticalOffset[ 0 ] : 0 + ]; + + // Reduce to just the positions without the offsets + options[ this ] = [ + rposition.exec( pos[ 0 ] )[ 0 ], + rposition.exec( pos[ 1 ] )[ 0 ] + ]; + } ); + + // Normalize collision option + if ( collision.length === 1 ) { + collision[ 1 ] = collision[ 0 ]; + } + + if ( options.at[ 0 ] === "right" ) { + basePosition.left += targetWidth; + } else if ( options.at[ 0 ] === "center" ) { + basePosition.left += targetWidth / 2; + } + + if ( options.at[ 1 ] === "bottom" ) { + basePosition.top += targetHeight; + } else if ( options.at[ 1 ] === "center" ) { + basePosition.top += targetHeight / 2; + } + + atOffset = getOffsets( offsets.at, targetWidth, targetHeight ); + basePosition.left += atOffset[ 0 ]; + basePosition.top += atOffset[ 1 ]; + + return this.each( function() { + var collisionPosition, using, + elem = $( this ), + elemWidth = elem.outerWidth(), + elemHeight = elem.outerHeight(), + marginLeft = parseCss( this, "marginLeft" ), + marginTop = parseCss( this, "marginTop" ), + collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + + scrollInfo.width, + collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + + scrollInfo.height, + position = $.extend( {}, basePosition ), + myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() ); + + if ( options.my[ 0 ] === "right" ) { + position.left -= elemWidth; + } else if ( options.my[ 0 ] === "center" ) { + position.left -= elemWidth / 2; + } + + if ( options.my[ 1 ] === "bottom" ) { + position.top -= elemHeight; + } else if ( options.my[ 1 ] === "center" ) { + position.top -= elemHeight / 2; + } + + position.left += myOffset[ 0 ]; + position.top += myOffset[ 1 ]; + + collisionPosition = { + marginLeft: marginLeft, + marginTop: marginTop + }; + + $.each( [ "left", "top" ], function( i, dir ) { + if ( $.ui.position[ collision[ i ] ] ) { + $.ui.position[ collision[ i ] ][ dir ]( position, { + targetWidth: targetWidth, + targetHeight: targetHeight, + elemWidth: elemWidth, + elemHeight: elemHeight, + collisionPosition: collisionPosition, + collisionWidth: collisionWidth, + collisionHeight: collisionHeight, + offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ], + my: options.my, + at: options.at, + within: within, + elem: elem + } ); + } + } ); + + if ( options.using ) { + + // Adds feedback as second argument to using callback, if present + using = function( props ) { + var left = targetOffset.left - position.left, + right = left + targetWidth - elemWidth, + top = targetOffset.top - position.top, + bottom = top + targetHeight - elemHeight, + feedback = { + target: { + element: target, + left: targetOffset.left, + top: targetOffset.top, + width: targetWidth, + height: targetHeight + }, + element: { + element: elem, + left: position.left, + top: position.top, + width: elemWidth, + height: elemHeight + }, + horizontal: right < 0 ? "left" : left > 0 ? "right" : "center", + vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle" + }; + if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) { + feedback.horizontal = "center"; + } + if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) { + feedback.vertical = "middle"; + } + if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) { + feedback.important = "horizontal"; + } else { + feedback.important = "vertical"; + } + options.using.call( this, props, feedback ); + }; + } + + elem.offset( $.extend( position, { using: using } ) ); + } ); +}; + +$.ui.position = { + fit: { + left: function( position, data ) { + var within = data.within, + withinOffset = within.isWindow ? within.scrollLeft : within.offset.left, + outerWidth = within.width, + collisionPosLeft = position.left - data.collisionPosition.marginLeft, + overLeft = withinOffset - collisionPosLeft, + overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset, + newOverRight; + + // Element is wider than within + if ( data.collisionWidth > outerWidth ) { + + // Element is initially over the left side of within + if ( overLeft > 0 && overRight <= 0 ) { + newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - + withinOffset; + position.left += overLeft - newOverRight; + + // Element is initially over right side of within + } else if ( overRight > 0 && overLeft <= 0 ) { + position.left = withinOffset; + + // Element is initially over both left and right sides of within + } else { + if ( overLeft > overRight ) { + position.left = withinOffset + outerWidth - data.collisionWidth; + } else { + position.left = withinOffset; + } + } + + // Too far left -> align with left edge + } else if ( overLeft > 0 ) { + position.left += overLeft; + + // Too far right -> align with right edge + } else if ( overRight > 0 ) { + position.left -= overRight; + + // Adjust based on position and margin + } else { + position.left = max( position.left - collisionPosLeft, position.left ); + } + }, + top: function( position, data ) { + var within = data.within, + withinOffset = within.isWindow ? within.scrollTop : within.offset.top, + outerHeight = data.within.height, + collisionPosTop = position.top - data.collisionPosition.marginTop, + overTop = withinOffset - collisionPosTop, + overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset, + newOverBottom; + + // Element is taller than within + if ( data.collisionHeight > outerHeight ) { + + // Element is initially over the top of within + if ( overTop > 0 && overBottom <= 0 ) { + newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - + withinOffset; + position.top += overTop - newOverBottom; + + // Element is initially over bottom of within + } else if ( overBottom > 0 && overTop <= 0 ) { + position.top = withinOffset; + + // Element is initially over both top and bottom of within + } else { + if ( overTop > overBottom ) { + position.top = withinOffset + outerHeight - data.collisionHeight; + } else { + position.top = withinOffset; + } + } + + // Too far up -> align with top + } else if ( overTop > 0 ) { + position.top += overTop; + + // Too far down -> align with bottom edge + } else if ( overBottom > 0 ) { + position.top -= overBottom; + + // Adjust based on position and margin + } else { + position.top = max( position.top - collisionPosTop, position.top ); + } + } + }, + flip: { + left: function( position, data ) { + var within = data.within, + withinOffset = within.offset.left + within.scrollLeft, + outerWidth = within.width, + offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left, + collisionPosLeft = position.left - data.collisionPosition.marginLeft, + overLeft = collisionPosLeft - offsetLeft, + overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft, + myOffset = data.my[ 0 ] === "left" ? + -data.elemWidth : + data.my[ 0 ] === "right" ? + data.elemWidth : + 0, + atOffset = data.at[ 0 ] === "left" ? + data.targetWidth : + data.at[ 0 ] === "right" ? + -data.targetWidth : + 0, + offset = -2 * data.offset[ 0 ], + newOverRight, + newOverLeft; + + if ( overLeft < 0 ) { + newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - + outerWidth - withinOffset; + if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) { + position.left += myOffset + atOffset + offset; + } + } else if ( overRight > 0 ) { + newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + + atOffset + offset - offsetLeft; + if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) { + position.left += myOffset + atOffset + offset; + } + } + }, + top: function( position, data ) { + var within = data.within, + withinOffset = within.offset.top + within.scrollTop, + outerHeight = within.height, + offsetTop = within.isWindow ? within.scrollTop : within.offset.top, + collisionPosTop = position.top - data.collisionPosition.marginTop, + overTop = collisionPosTop - offsetTop, + overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop, + top = data.my[ 1 ] === "top", + myOffset = top ? + -data.elemHeight : + data.my[ 1 ] === "bottom" ? + data.elemHeight : + 0, + atOffset = data.at[ 1 ] === "top" ? + data.targetHeight : + data.at[ 1 ] === "bottom" ? + -data.targetHeight : + 0, + offset = -2 * data.offset[ 1 ], + newOverTop, + newOverBottom; + if ( overTop < 0 ) { + newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - + outerHeight - withinOffset; + if ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) { + position.top += myOffset + atOffset + offset; + } + } else if ( overBottom > 0 ) { + newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + + offset - offsetTop; + if ( newOverTop > 0 || abs( newOverTop ) < overBottom ) { + position.top += myOffset + atOffset + offset; + } + } + } + }, + flipfit: { + left: function() { + $.ui.position.flip.left.apply( this, arguments ); + $.ui.position.fit.left.apply( this, arguments ); + }, + top: function() { + $.ui.position.flip.top.apply( this, arguments ); + $.ui.position.fit.top.apply( this, arguments ); + } + } +}; + +} )(); + +var position = $.ui.position; + + +/*! + * jQuery UI :data 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: :data Selector +//>>group: Core +//>>description: Selects elements which have data stored under the specified key. +//>>docs: http://api.jqueryui.com/data-selector/ + + +var data = $.extend( $.expr.pseudos, { + data: $.expr.createPseudo ? + $.expr.createPseudo( function( dataName ) { + return function( elem ) { + return !!$.data( elem, dataName ); + }; + } ) : + + // Support: jQuery <1.8 + function( elem, i, match ) { + return !!$.data( elem, match[ 3 ] ); + } +} ); + +/*! + * jQuery UI Disable Selection 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: disableSelection +//>>group: Core +//>>description: Disable selection of text content within the set of matched elements. +//>>docs: http://api.jqueryui.com/disableSelection/ + +// This file is deprecated + + +var disableSelection = $.fn.extend( { + disableSelection: ( function() { + var eventType = "onselectstart" in document.createElement( "div" ) ? + "selectstart" : + "mousedown"; + + return function() { + return this.on( eventType + ".ui-disableSelection", function( event ) { + event.preventDefault(); + } ); + }; + } )(), + + enableSelection: function() { + return this.off( ".ui-disableSelection" ); + } +} ); + + +/*! + * jQuery UI Effects 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Effects Core +//>>group: Effects +// jscs:disable maximumLineLength +//>>description: Extends the internal jQuery effects. Includes morphing and easing. Required by all other effects. +// jscs:enable maximumLineLength +//>>docs: http://api.jqueryui.com/category/effects-core/ +//>>demos: http://jqueryui.com/effect/ + + + +var dataSpace = "ui-effects-", + dataSpaceStyle = "ui-effects-style", + dataSpaceAnimated = "ui-effects-animated", + + // Create a local jQuery because jQuery Color relies on it and the + // global may not exist with AMD and a custom build (#10199) + jQuery = $; + +$.effects = { + effect: {} +}; + +/*! + * jQuery Color Animations v2.1.2 + * https://github.com/jquery/jquery-color + * + * Copyright 2014 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * Date: Wed Jan 16 08:47:09 2013 -0600 + */ +( function( jQuery, undefined ) { + + var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor " + + "borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor", + + // Plusequals test for += 100 -= 100 + rplusequals = /^([\-+])=\s*(\d+\.?\d*)/, + + // A set of RE's that can match strings and generate color tuples. + stringParsers = [ { + re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/, + parse: function( execResult ) { + return [ + execResult[ 1 ], + execResult[ 2 ], + execResult[ 3 ], + execResult[ 4 ] + ]; + } + }, { + re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/, + parse: function( execResult ) { + return [ + execResult[ 1 ] * 2.55, + execResult[ 2 ] * 2.55, + execResult[ 3 ] * 2.55, + execResult[ 4 ] + ]; + } + }, { + + // This regex ignores A-F because it's compared against an already lowercased string + re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/, + parse: function( execResult ) { + return [ + parseInt( execResult[ 1 ], 16 ), + parseInt( execResult[ 2 ], 16 ), + parseInt( execResult[ 3 ], 16 ) + ]; + } + }, { + + // This regex ignores A-F because it's compared against an already lowercased string + re: /#([a-f0-9])([a-f0-9])([a-f0-9])/, + parse: function( execResult ) { + return [ + parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ), + parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ), + parseInt( execResult[ 3 ] + execResult[ 3 ], 16 ) + ]; + } + }, { + re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/, + space: "hsla", + parse: function( execResult ) { + return [ + execResult[ 1 ], + execResult[ 2 ] / 100, + execResult[ 3 ] / 100, + execResult[ 4 ] + ]; + } + } ], + + // JQuery.Color( ) + color = jQuery.Color = function( color, green, blue, alpha ) { + return new jQuery.Color.fn.parse( color, green, blue, alpha ); + }, + spaces = { + rgba: { + props: { + red: { + idx: 0, + type: "byte" + }, + green: { + idx: 1, + type: "byte" + }, + blue: { + idx: 2, + type: "byte" + } + } + }, + + hsla: { + props: { + hue: { + idx: 0, + type: "degrees" + }, + saturation: { + idx: 1, + type: "percent" + }, + lightness: { + idx: 2, + type: "percent" + } + } + } + }, + propTypes = { + "byte": { + floor: true, + max: 255 + }, + "percent": { + max: 1 + }, + "degrees": { + mod: 360, + floor: true + } + }, + support = color.support = {}, + + // Element for support tests + supportElem = jQuery( "

    " )[ 0 ], + + // Colors = jQuery.Color.names + colors, + + // Local aliases of functions called often + each = jQuery.each; + +// Determine rgba support immediately +supportElem.style.cssText = "background-color:rgba(1,1,1,.5)"; +support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1; + +// Define cache name and alpha properties +// for rgba and hsla spaces +each( spaces, function( spaceName, space ) { + space.cache = "_" + spaceName; + space.props.alpha = { + idx: 3, + type: "percent", + def: 1 + }; +} ); + +function clamp( value, prop, allowEmpty ) { + var type = propTypes[ prop.type ] || {}; + + if ( value == null ) { + return ( allowEmpty || !prop.def ) ? null : prop.def; + } + + // ~~ is an short way of doing floor for positive numbers + value = type.floor ? ~~value : parseFloat( value ); + + // IE will pass in empty strings as value for alpha, + // which will hit this case + if ( isNaN( value ) ) { + return prop.def; + } + + if ( type.mod ) { + + // We add mod before modding to make sure that negatives values + // get converted properly: -10 -> 350 + return ( value + type.mod ) % type.mod; + } + + // For now all property types without mod have min and max + return 0 > value ? 0 : type.max < value ? type.max : value; +} + +function stringParse( string ) { + var inst = color(), + rgba = inst._rgba = []; + + string = string.toLowerCase(); + + each( stringParsers, function( i, parser ) { + var parsed, + match = parser.re.exec( string ), + values = match && parser.parse( match ), + spaceName = parser.space || "rgba"; + + if ( values ) { + parsed = inst[ spaceName ]( values ); + + // If this was an rgba parse the assignment might happen twice + // oh well.... + inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ]; + rgba = inst._rgba = parsed._rgba; + + // Exit each( stringParsers ) here because we matched + return false; + } + } ); + + // Found a stringParser that handled it + if ( rgba.length ) { + + // If this came from a parsed string, force "transparent" when alpha is 0 + // chrome, (and maybe others) return "transparent" as rgba(0,0,0,0) + if ( rgba.join() === "0,0,0,0" ) { + jQuery.extend( rgba, colors.transparent ); + } + return inst; + } + + // Named colors + return colors[ string ]; +} + +color.fn = jQuery.extend( color.prototype, { + parse: function( red, green, blue, alpha ) { + if ( red === undefined ) { + this._rgba = [ null, null, null, null ]; + return this; + } + if ( red.jquery || red.nodeType ) { + red = jQuery( red ).css( green ); + green = undefined; + } + + var inst = this, + type = jQuery.type( red ), + rgba = this._rgba = []; + + // More than 1 argument specified - assume ( red, green, blue, alpha ) + if ( green !== undefined ) { + red = [ red, green, blue, alpha ]; + type = "array"; + } + + if ( type === "string" ) { + return this.parse( stringParse( red ) || colors._default ); + } + + if ( type === "array" ) { + each( spaces.rgba.props, function( key, prop ) { + rgba[ prop.idx ] = clamp( red[ prop.idx ], prop ); + } ); + return this; + } + + if ( type === "object" ) { + if ( red instanceof color ) { + each( spaces, function( spaceName, space ) { + if ( red[ space.cache ] ) { + inst[ space.cache ] = red[ space.cache ].slice(); + } + } ); + } else { + each( spaces, function( spaceName, space ) { + var cache = space.cache; + each( space.props, function( key, prop ) { + + // If the cache doesn't exist, and we know how to convert + if ( !inst[ cache ] && space.to ) { + + // If the value was null, we don't need to copy it + // if the key was alpha, we don't need to copy it either + if ( key === "alpha" || red[ key ] == null ) { + return; + } + inst[ cache ] = space.to( inst._rgba ); + } + + // This is the only case where we allow nulls for ALL properties. + // call clamp with alwaysAllowEmpty + inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true ); + } ); + + // Everything defined but alpha? + if ( inst[ cache ] && + jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) { + + // Use the default of 1 + inst[ cache ][ 3 ] = 1; + if ( space.from ) { + inst._rgba = space.from( inst[ cache ] ); + } + } + } ); + } + return this; + } + }, + is: function( compare ) { + var is = color( compare ), + same = true, + inst = this; + + each( spaces, function( _, space ) { + var localCache, + isCache = is[ space.cache ]; + if ( isCache ) { + localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || []; + each( space.props, function( _, prop ) { + if ( isCache[ prop.idx ] != null ) { + same = ( isCache[ prop.idx ] === localCache[ prop.idx ] ); + return same; + } + } ); + } + return same; + } ); + return same; + }, + _space: function() { + var used = [], + inst = this; + each( spaces, function( spaceName, space ) { + if ( inst[ space.cache ] ) { + used.push( spaceName ); + } + } ); + return used.pop(); + }, + transition: function( other, distance ) { + var end = color( other ), + spaceName = end._space(), + space = spaces[ spaceName ], + startColor = this.alpha() === 0 ? color( "transparent" ) : this, + start = startColor[ space.cache ] || space.to( startColor._rgba ), + result = start.slice(); + + end = end[ space.cache ]; + each( space.props, function( key, prop ) { + var index = prop.idx, + startValue = start[ index ], + endValue = end[ index ], + type = propTypes[ prop.type ] || {}; + + // If null, don't override start value + if ( endValue === null ) { + return; + } + + // If null - use end + if ( startValue === null ) { + result[ index ] = endValue; + } else { + if ( type.mod ) { + if ( endValue - startValue > type.mod / 2 ) { + startValue += type.mod; + } else if ( startValue - endValue > type.mod / 2 ) { + startValue -= type.mod; + } + } + result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop ); + } + } ); + return this[ spaceName ]( result ); + }, + blend: function( opaque ) { + + // If we are already opaque - return ourself + if ( this._rgba[ 3 ] === 1 ) { + return this; + } + + var rgb = this._rgba.slice(), + a = rgb.pop(), + blend = color( opaque )._rgba; + + return color( jQuery.map( rgb, function( v, i ) { + return ( 1 - a ) * blend[ i ] + a * v; + } ) ); + }, + toRgbaString: function() { + var prefix = "rgba(", + rgba = jQuery.map( this._rgba, function( v, i ) { + return v == null ? ( i > 2 ? 1 : 0 ) : v; + } ); + + if ( rgba[ 3 ] === 1 ) { + rgba.pop(); + prefix = "rgb("; + } + + return prefix + rgba.join() + ")"; + }, + toHslaString: function() { + var prefix = "hsla(", + hsla = jQuery.map( this.hsla(), function( v, i ) { + if ( v == null ) { + v = i > 2 ? 1 : 0; + } + + // Catch 1 and 2 + if ( i && i < 3 ) { + v = Math.round( v * 100 ) + "%"; + } + return v; + } ); + + if ( hsla[ 3 ] === 1 ) { + hsla.pop(); + prefix = "hsl("; + } + return prefix + hsla.join() + ")"; + }, + toHexString: function( includeAlpha ) { + var rgba = this._rgba.slice(), + alpha = rgba.pop(); + + if ( includeAlpha ) { + rgba.push( ~~( alpha * 255 ) ); + } + + return "#" + jQuery.map( rgba, function( v ) { + + // Default to 0 when nulls exist + v = ( v || 0 ).toString( 16 ); + return v.length === 1 ? "0" + v : v; + } ).join( "" ); + }, + toString: function() { + return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString(); + } +} ); +color.fn.parse.prototype = color.fn; + +// Hsla conversions adapted from: +// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021 + +function hue2rgb( p, q, h ) { + h = ( h + 1 ) % 1; + if ( h * 6 < 1 ) { + return p + ( q - p ) * h * 6; + } + if ( h * 2 < 1 ) { + return q; + } + if ( h * 3 < 2 ) { + return p + ( q - p ) * ( ( 2 / 3 ) - h ) * 6; + } + return p; +} + +spaces.hsla.to = function( rgba ) { + if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) { + return [ null, null, null, rgba[ 3 ] ]; + } + var r = rgba[ 0 ] / 255, + g = rgba[ 1 ] / 255, + b = rgba[ 2 ] / 255, + a = rgba[ 3 ], + max = Math.max( r, g, b ), + min = Math.min( r, g, b ), + diff = max - min, + add = max + min, + l = add * 0.5, + h, s; + + if ( min === max ) { + h = 0; + } else if ( r === max ) { + h = ( 60 * ( g - b ) / diff ) + 360; + } else if ( g === max ) { + h = ( 60 * ( b - r ) / diff ) + 120; + } else { + h = ( 60 * ( r - g ) / diff ) + 240; + } + + // Chroma (diff) == 0 means greyscale which, by definition, saturation = 0% + // otherwise, saturation is based on the ratio of chroma (diff) to lightness (add) + if ( diff === 0 ) { + s = 0; + } else if ( l <= 0.5 ) { + s = diff / add; + } else { + s = diff / ( 2 - add ); + } + return [ Math.round( h ) % 360, s, l, a == null ? 1 : a ]; +}; + +spaces.hsla.from = function( hsla ) { + if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) { + return [ null, null, null, hsla[ 3 ] ]; + } + var h = hsla[ 0 ] / 360, + s = hsla[ 1 ], + l = hsla[ 2 ], + a = hsla[ 3 ], + q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s, + p = 2 * l - q; + + return [ + Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ), + Math.round( hue2rgb( p, q, h ) * 255 ), + Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ), + a + ]; +}; + +each( spaces, function( spaceName, space ) { + var props = space.props, + cache = space.cache, + to = space.to, + from = space.from; + + // Makes rgba() and hsla() + color.fn[ spaceName ] = function( value ) { + + // Generate a cache for this space if it doesn't exist + if ( to && !this[ cache ] ) { + this[ cache ] = to( this._rgba ); + } + if ( value === undefined ) { + return this[ cache ].slice(); + } + + var ret, + type = jQuery.type( value ), + arr = ( type === "array" || type === "object" ) ? value : arguments, + local = this[ cache ].slice(); + + each( props, function( key, prop ) { + var val = arr[ type === "object" ? key : prop.idx ]; + if ( val == null ) { + val = local[ prop.idx ]; + } + local[ prop.idx ] = clamp( val, prop ); + } ); + + if ( from ) { + ret = color( from( local ) ); + ret[ cache ] = local; + return ret; + } else { + return color( local ); + } + }; + + // Makes red() green() blue() alpha() hue() saturation() lightness() + each( props, function( key, prop ) { + + // Alpha is included in more than one space + if ( color.fn[ key ] ) { + return; + } + color.fn[ key ] = function( value ) { + var vtype = jQuery.type( value ), + fn = ( key === "alpha" ? ( this._hsla ? "hsla" : "rgba" ) : spaceName ), + local = this[ fn ](), + cur = local[ prop.idx ], + match; + + if ( vtype === "undefined" ) { + return cur; + } + + if ( vtype === "function" ) { + value = value.call( this, cur ); + vtype = jQuery.type( value ); + } + if ( value == null && prop.empty ) { + return this; + } + if ( vtype === "string" ) { + match = rplusequals.exec( value ); + if ( match ) { + value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 ); + } + } + local[ prop.idx ] = value; + return this[ fn ]( local ); + }; + } ); +} ); + +// Add cssHook and .fx.step function for each named hook. +// accept a space separated string of properties +color.hook = function( hook ) { + var hooks = hook.split( " " ); + each( hooks, function( i, hook ) { + jQuery.cssHooks[ hook ] = { + set: function( elem, value ) { + var parsed, curElem, + backgroundColor = ""; + + if ( value !== "transparent" && ( jQuery.type( value ) !== "string" || + ( parsed = stringParse( value ) ) ) ) { + value = color( parsed || value ); + if ( !support.rgba && value._rgba[ 3 ] !== 1 ) { + curElem = hook === "backgroundColor" ? elem.parentNode : elem; + while ( + ( backgroundColor === "" || backgroundColor === "transparent" ) && + curElem && curElem.style + ) { + try { + backgroundColor = jQuery.css( curElem, "backgroundColor" ); + curElem = curElem.parentNode; + } catch ( e ) { + } + } + + value = value.blend( backgroundColor && backgroundColor !== "transparent" ? + backgroundColor : + "_default" ); + } + + value = value.toRgbaString(); + } + try { + elem.style[ hook ] = value; + } catch ( e ) { + + // Wrapped to prevent IE from throwing errors on "invalid" values like + // 'auto' or 'inherit' + } + } + }; + jQuery.fx.step[ hook ] = function( fx ) { + if ( !fx.colorInit ) { + fx.start = color( fx.elem, hook ); + fx.end = color( fx.end ); + fx.colorInit = true; + } + jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) ); + }; + } ); + +}; + +color.hook( stepHooks ); + +jQuery.cssHooks.borderColor = { + expand: function( value ) { + var expanded = {}; + + each( [ "Top", "Right", "Bottom", "Left" ], function( i, part ) { + expanded[ "border" + part + "Color" ] = value; + } ); + return expanded; + } +}; + +// Basic color names only. +// Usage of any of the other color names requires adding yourself or including +// jquery.color.svg-names.js. +colors = jQuery.Color.names = { + + // 4.1. Basic color keywords + aqua: "#00ffff", + black: "#000000", + blue: "#0000ff", + fuchsia: "#ff00ff", + gray: "#808080", + green: "#008000", + lime: "#00ff00", + maroon: "#800000", + navy: "#000080", + olive: "#808000", + purple: "#800080", + red: "#ff0000", + silver: "#c0c0c0", + teal: "#008080", + white: "#ffffff", + yellow: "#ffff00", + + // 4.2.3. "transparent" color keyword + transparent: [ null, null, null, 0 ], + + _default: "#ffffff" +}; + +} )( jQuery ); + +/******************************************************************************/ +/****************************** CLASS ANIMATIONS ******************************/ +/******************************************************************************/ +( function() { + +var classAnimationActions = [ "add", "remove", "toggle" ], + shorthandStyles = { + border: 1, + borderBottom: 1, + borderColor: 1, + borderLeft: 1, + borderRight: 1, + borderTop: 1, + borderWidth: 1, + margin: 1, + padding: 1 + }; + +$.each( + [ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ], + function( _, prop ) { + $.fx.step[ prop ] = function( fx ) { + if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) { + jQuery.style( fx.elem, prop, fx.end ); + fx.setAttr = true; + } + }; + } +); + +function getElementStyles( elem ) { + var key, len, + style = elem.ownerDocument.defaultView ? + elem.ownerDocument.defaultView.getComputedStyle( elem, null ) : + elem.currentStyle, + styles = {}; + + if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) { + len = style.length; + while ( len-- ) { + key = style[ len ]; + if ( typeof style[ key ] === "string" ) { + styles[ $.camelCase( key ) ] = style[ key ]; + } + } + + // Support: Opera, IE <9 + } else { + for ( key in style ) { + if ( typeof style[ key ] === "string" ) { + styles[ key ] = style[ key ]; + } + } + } + + return styles; +} + +function styleDifference( oldStyle, newStyle ) { + var diff = {}, + name, value; + + for ( name in newStyle ) { + value = newStyle[ name ]; + if ( oldStyle[ name ] !== value ) { + if ( !shorthandStyles[ name ] ) { + if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) { + diff[ name ] = value; + } + } + } + } + + return diff; +} + +// Support: jQuery <1.8 +if ( !$.fn.addBack ) { + $.fn.addBack = function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + }; +} + +$.effects.animateClass = function( value, duration, easing, callback ) { + var o = $.speed( duration, easing, callback ); + + return this.queue( function() { + var animated = $( this ), + baseClass = animated.attr( "class" ) || "", + applyClassChange, + allAnimations = o.children ? animated.find( "*" ).addBack() : animated; + + // Map the animated objects to store the original styles. + allAnimations = allAnimations.map( function() { + var el = $( this ); + return { + el: el, + start: getElementStyles( this ) + }; + } ); + + // Apply class change + applyClassChange = function() { + $.each( classAnimationActions, function( i, action ) { + if ( value[ action ] ) { + animated[ action + "Class" ]( value[ action ] ); + } + } ); + }; + applyClassChange(); + + // Map all animated objects again - calculate new styles and diff + allAnimations = allAnimations.map( function() { + this.end = getElementStyles( this.el[ 0 ] ); + this.diff = styleDifference( this.start, this.end ); + return this; + } ); + + // Apply original class + animated.attr( "class", baseClass ); + + // Map all animated objects again - this time collecting a promise + allAnimations = allAnimations.map( function() { + var styleInfo = this, + dfd = $.Deferred(), + opts = $.extend( {}, o, { + queue: false, + complete: function() { + dfd.resolve( styleInfo ); + } + } ); + + this.el.animate( this.diff, opts ); + return dfd.promise(); + } ); + + // Once all animations have completed: + $.when.apply( $, allAnimations.get() ).done( function() { + + // Set the final class + applyClassChange(); + + // For each animated element, + // clear all css properties that were animated + $.each( arguments, function() { + var el = this.el; + $.each( this.diff, function( key ) { + el.css( key, "" ); + } ); + } ); + + // This is guarnteed to be there if you use jQuery.speed() + // it also handles dequeuing the next anim... + o.complete.call( animated[ 0 ] ); + } ); + } ); +}; + +$.fn.extend( { + addClass: ( function( orig ) { + return function( classNames, speed, easing, callback ) { + return speed ? + $.effects.animateClass.call( this, + { add: classNames }, speed, easing, callback ) : + orig.apply( this, arguments ); + }; + } )( $.fn.addClass ), + + removeClass: ( function( orig ) { + return function( classNames, speed, easing, callback ) { + return arguments.length > 1 ? + $.effects.animateClass.call( this, + { remove: classNames }, speed, easing, callback ) : + orig.apply( this, arguments ); + }; + } )( $.fn.removeClass ), + + toggleClass: ( function( orig ) { + return function( classNames, force, speed, easing, callback ) { + if ( typeof force === "boolean" || force === undefined ) { + if ( !speed ) { + + // Without speed parameter + return orig.apply( this, arguments ); + } else { + return $.effects.animateClass.call( this, + ( force ? { add: classNames } : { remove: classNames } ), + speed, easing, callback ); + } + } else { + + // Without force parameter + return $.effects.animateClass.call( this, + { toggle: classNames }, force, speed, easing ); + } + }; + } )( $.fn.toggleClass ), + + switchClass: function( remove, add, speed, easing, callback ) { + return $.effects.animateClass.call( this, { + add: add, + remove: remove + }, speed, easing, callback ); + } +} ); + +} )(); + +/******************************************************************************/ +/*********************************** EFFECTS **********************************/ +/******************************************************************************/ + +( function() { + +if ( $.expr && $.expr.pseudos && $.expr.pseudos.animated ) { + $.expr.pseudos.animated = ( function( orig ) { + return function( elem ) { + return !!$( elem ).data( dataSpaceAnimated ) || orig( elem ); + }; + } )( $.expr.pseudos.animated ); +} + +if ( $.uiBackCompat !== false ) { + $.extend( $.effects, { + + // Saves a set of properties in a data storage + save: function( element, set ) { + var i = 0, length = set.length; + for ( ; i < length; i++ ) { + if ( set[ i ] !== null ) { + element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] ); + } + } + }, + + // Restores a set of previously saved properties from a data storage + restore: function( element, set ) { + var val, i = 0, length = set.length; + for ( ; i < length; i++ ) { + if ( set[ i ] !== null ) { + val = element.data( dataSpace + set[ i ] ); + element.css( set[ i ], val ); + } + } + }, + + setMode: function( el, mode ) { + if ( mode === "toggle" ) { + mode = el.is( ":hidden" ) ? "show" : "hide"; + } + return mode; + }, + + // Wraps the element around a wrapper that copies position properties + createWrapper: function( element ) { + + // If the element is already wrapped, return it + if ( element.parent().is( ".ui-effects-wrapper" ) ) { + return element.parent(); + } + + // Wrap the element + var props = { + width: element.outerWidth( true ), + height: element.outerHeight( true ), + "float": element.css( "float" ) + }, + wrapper = $( "

    " ) + .addClass( "ui-effects-wrapper" ) + .css( { + fontSize: "100%", + background: "transparent", + border: "none", + margin: 0, + padding: 0 + } ), + + // Store the size in case width/height are defined in % - Fixes #5245 + size = { + width: element.width(), + height: element.height() + }, + active = document.activeElement; + + // Support: Firefox + // Firefox incorrectly exposes anonymous content + // https://bugzilla.mozilla.org/show_bug.cgi?id=561664 + try { + active.id; + } catch ( e ) { + active = document.body; + } + + element.wrap( wrapper ); + + // Fixes #7595 - Elements lose focus when wrapped. + if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) { + $( active ).trigger( "focus" ); + } + + // Hotfix for jQuery 1.4 since some change in wrap() seems to actually + // lose the reference to the wrapped element + wrapper = element.parent(); + + // Transfer positioning properties to the wrapper + if ( element.css( "position" ) === "static" ) { + wrapper.css( { position: "relative" } ); + element.css( { position: "relative" } ); + } else { + $.extend( props, { + position: element.css( "position" ), + zIndex: element.css( "z-index" ) + } ); + $.each( [ "top", "left", "bottom", "right" ], function( i, pos ) { + props[ pos ] = element.css( pos ); + if ( isNaN( parseInt( props[ pos ], 10 ) ) ) { + props[ pos ] = "auto"; + } + } ); + element.css( { + position: "relative", + top: 0, + left: 0, + right: "auto", + bottom: "auto" + } ); + } + element.css( size ); + + return wrapper.css( props ).show(); + }, + + removeWrapper: function( element ) { + var active = document.activeElement; + + if ( element.parent().is( ".ui-effects-wrapper" ) ) { + element.parent().replaceWith( element ); + + // Fixes #7595 - Elements lose focus when wrapped. + if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) { + $( active ).trigger( "focus" ); + } + } + + return element; + } + } ); +} + +$.extend( $.effects, { + version: "1.12.1", + + define: function( name, mode, effect ) { + if ( !effect ) { + effect = mode; + mode = "effect"; + } + + $.effects.effect[ name ] = effect; + $.effects.effect[ name ].mode = mode; + + return effect; + }, + + scaledDimensions: function( element, percent, direction ) { + if ( percent === 0 ) { + return { + height: 0, + width: 0, + outerHeight: 0, + outerWidth: 0 + }; + } + + var x = direction !== "horizontal" ? ( ( percent || 100 ) / 100 ) : 1, + y = direction !== "vertical" ? ( ( percent || 100 ) / 100 ) : 1; + + return { + height: element.height() * y, + width: element.width() * x, + outerHeight: element.outerHeight() * y, + outerWidth: element.outerWidth() * x + }; + + }, + + clipToBox: function( animation ) { + return { + width: animation.clip.right - animation.clip.left, + height: animation.clip.bottom - animation.clip.top, + left: animation.clip.left, + top: animation.clip.top + }; + }, + + // Injects recently queued functions to be first in line (after "inprogress") + unshift: function( element, queueLength, count ) { + var queue = element.queue(); + + if ( queueLength > 1 ) { + queue.splice.apply( queue, + [ 1, 0 ].concat( queue.splice( queueLength, count ) ) ); + } + element.dequeue(); + }, + + saveStyle: function( element ) { + element.data( dataSpaceStyle, element[ 0 ].style.cssText ); + }, + + restoreStyle: function( element ) { + element[ 0 ].style.cssText = element.data( dataSpaceStyle ) || ""; + element.removeData( dataSpaceStyle ); + }, + + mode: function( element, mode ) { + var hidden = element.is( ":hidden" ); + + if ( mode === "toggle" ) { + mode = hidden ? "show" : "hide"; + } + if ( hidden ? mode === "hide" : mode === "show" ) { + mode = "none"; + } + return mode; + }, + + // Translates a [top,left] array into a baseline value + getBaseline: function( origin, original ) { + var y, x; + + switch ( origin[ 0 ] ) { + case "top": + y = 0; + break; + case "middle": + y = 0.5; + break; + case "bottom": + y = 1; + break; + default: + y = origin[ 0 ] / original.height; + } + + switch ( origin[ 1 ] ) { + case "left": + x = 0; + break; + case "center": + x = 0.5; + break; + case "right": + x = 1; + break; + default: + x = origin[ 1 ] / original.width; + } + + return { + x: x, + y: y + }; + }, + + // Creates a placeholder element so that the original element can be made absolute + createPlaceholder: function( element ) { + var placeholder, + cssPosition = element.css( "position" ), + position = element.position(); + + // Lock in margins first to account for form elements, which + // will change margin if you explicitly set height + // see: http://jsfiddle.net/JZSMt/3/ https://bugs.webkit.org/show_bug.cgi?id=107380 + // Support: Safari + element.css( { + marginTop: element.css( "marginTop" ), + marginBottom: element.css( "marginBottom" ), + marginLeft: element.css( "marginLeft" ), + marginRight: element.css( "marginRight" ) + } ) + .outerWidth( element.outerWidth() ) + .outerHeight( element.outerHeight() ); + + if ( /^(static|relative)/.test( cssPosition ) ) { + cssPosition = "absolute"; + + placeholder = $( "<" + element[ 0 ].nodeName + ">" ).insertAfter( element ).css( { + + // Convert inline to inline block to account for inline elements + // that turn to inline block based on content (like img) + display: /^(inline|ruby)/.test( element.css( "display" ) ) ? + "inline-block" : + "block", + visibility: "hidden", + + // Margins need to be set to account for margin collapse + marginTop: element.css( "marginTop" ), + marginBottom: element.css( "marginBottom" ), + marginLeft: element.css( "marginLeft" ), + marginRight: element.css( "marginRight" ), + "float": element.css( "float" ) + } ) + .outerWidth( element.outerWidth() ) + .outerHeight( element.outerHeight() ) + .addClass( "ui-effects-placeholder" ); + + element.data( dataSpace + "placeholder", placeholder ); + } + + element.css( { + position: cssPosition, + left: position.left, + top: position.top + } ); + + return placeholder; + }, + + removePlaceholder: function( element ) { + var dataKey = dataSpace + "placeholder", + placeholder = element.data( dataKey ); + + if ( placeholder ) { + placeholder.remove(); + element.removeData( dataKey ); + } + }, + + // Removes a placeholder if it exists and restores + // properties that were modified during placeholder creation + cleanUp: function( element ) { + $.effects.restoreStyle( element ); + $.effects.removePlaceholder( element ); + }, + + setTransition: function( element, list, factor, value ) { + value = value || {}; + $.each( list, function( i, x ) { + var unit = element.cssUnit( x ); + if ( unit[ 0 ] > 0 ) { + value[ x ] = unit[ 0 ] * factor + unit[ 1 ]; + } + } ); + return value; + } +} ); + +// Return an effect options object for the given parameters: +function _normalizeArguments( effect, options, speed, callback ) { + + // Allow passing all options as the first parameter + if ( $.isPlainObject( effect ) ) { + options = effect; + effect = effect.effect; + } + + // Convert to an object + effect = { effect: effect }; + + // Catch (effect, null, ...) + if ( options == null ) { + options = {}; + } + + // Catch (effect, callback) + if ( typeof options === 'function' ) { + callback = options; + speed = null; + options = {}; + } + + // Catch (effect, speed, ?) + if ( typeof options === "number" || $.fx.speeds[ options ] ) { + callback = speed; + speed = options; + options = {}; + } + + // Catch (effect, options, callback) + if ( typeof speed === 'function' ) { + callback = speed; + speed = null; + } + + // Add options to effect + if ( options ) { + $.extend( effect, options ); + } + + speed = speed || options.duration; + effect.duration = $.fx.off ? 0 : + typeof speed === "number" ? speed : + speed in $.fx.speeds ? $.fx.speeds[ speed ] : + $.fx.speeds._default; + + effect.complete = callback || options.complete; + + return effect; +} + +function standardAnimationOption( option ) { + + // Valid standard speeds (nothing, number, named speed) + if ( !option || typeof option === "number" || $.fx.speeds[ option ] ) { + return true; + } + + // Invalid strings - treat as "normal" speed + if ( typeof option === "string" && !$.effects.effect[ option ] ) { + return true; + } + + // Complete callback + if ( typeof option === 'function' ) { + return true; + } + + // Options hash (but not naming an effect) + if ( typeof option === "object" && !option.effect ) { + return true; + } + + // Didn't match any standard API + return false; +} + +$.fn.extend( { + effect: function( /* effect, options, speed, callback */ ) { + var args = _normalizeArguments.apply( this, arguments ), + effectMethod = $.effects.effect[ args.effect ], + defaultMode = effectMethod.mode, + queue = args.queue, + queueName = queue || "fx", + complete = args.complete, + mode = args.mode, + modes = [], + prefilter = function( next ) { + var el = $( this ), + normalizedMode = $.effects.mode( el, mode ) || defaultMode; + + // Sentinel for duck-punching the :animated psuedo-selector + el.data( dataSpaceAnimated, true ); + + // Save effect mode for later use, + // we can't just call $.effects.mode again later, + // as the .show() below destroys the initial state + modes.push( normalizedMode ); + + // See $.uiBackCompat inside of run() for removal of defaultMode in 1.13 + if ( defaultMode && ( normalizedMode === "show" || + ( normalizedMode === defaultMode && normalizedMode === "hide" ) ) ) { + el.show(); + } + + if ( !defaultMode || normalizedMode !== "none" ) { + $.effects.saveStyle( el ); + } + + if ( typeof next === 'function' ) { + next(); + } + }; + + if ( $.fx.off || !effectMethod ) { + + // Delegate to the original method (e.g., .show()) if possible + if ( mode ) { + return this[ mode ]( args.duration, complete ); + } else { + return this.each( function() { + if ( complete ) { + complete.call( this ); + } + } ); + } + } + + function run( next ) { + var elem = $( this ); + + function cleanup() { + elem.removeData( dataSpaceAnimated ); + + $.effects.cleanUp( elem ); + + if ( args.mode === "hide" ) { + elem.hide(); + } + + done(); + } + + function done() { + if ( typeof complete === 'function' ) { + complete.call( elem[ 0 ] ); + } + + if ( typeof next === 'function' ) { + next(); + } + } + + // Override mode option on a per element basis, + // as toggle can be either show or hide depending on element state + args.mode = modes.shift(); + + if ( $.uiBackCompat !== false && !defaultMode ) { + if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) { + + // Call the core method to track "olddisplay" properly + elem[ mode ](); + done(); + } else { + effectMethod.call( elem[ 0 ], args, done ); + } + } else { + if ( args.mode === "none" ) { + + // Call the core method to track "olddisplay" properly + elem[ mode ](); + done(); + } else { + effectMethod.call( elem[ 0 ], args, cleanup ); + } + } + } + + // Run prefilter on all elements first to ensure that + // any showing or hiding happens before placeholder creation, + // which ensures that any layout changes are correctly captured. + return queue === false ? + this.each( prefilter ).each( run ) : + this.queue( queueName, prefilter ).queue( queueName, run ); + }, + + show: ( function( orig ) { + return function( option ) { + if ( standardAnimationOption( option ) ) { + return orig.apply( this, arguments ); + } else { + var args = _normalizeArguments.apply( this, arguments ); + args.mode = "show"; + return this.effect.call( this, args ); + } + }; + } )( $.fn.show ), + + hide: ( function( orig ) { + return function( option ) { + if ( standardAnimationOption( option ) ) { + return orig.apply( this, arguments ); + } else { + var args = _normalizeArguments.apply( this, arguments ); + args.mode = "hide"; + return this.effect.call( this, args ); + } + }; + } )( $.fn.hide ), + + toggle: ( function( orig ) { + return function( option ) { + if ( standardAnimationOption( option ) || typeof option === "boolean" ) { + return orig.apply( this, arguments ); + } else { + var args = _normalizeArguments.apply( this, arguments ); + args.mode = "toggle"; + return this.effect.call( this, args ); + } + }; + } )( $.fn.toggle ), + + cssUnit: function( key ) { + var style = this.css( key ), + val = []; + + $.each( [ "em", "px", "%", "pt" ], function( i, unit ) { + if ( style.indexOf( unit ) > 0 ) { + val = [ parseFloat( style ), unit ]; + } + } ); + return val; + }, + + cssClip: function( clipObj ) { + if ( clipObj ) { + return this.css( "clip", "rect(" + clipObj.top + "px " + clipObj.right + "px " + + clipObj.bottom + "px " + clipObj.left + "px)" ); + } + return parseClip( this.css( "clip" ), this ); + }, + + transfer: function( options, done ) { + var element = $( this ), + target = $( options.to ), + targetFixed = target.css( "position" ) === "fixed", + body = $( "body" ), + fixTop = targetFixed ? body.scrollTop() : 0, + fixLeft = targetFixed ? body.scrollLeft() : 0, + endPosition = target.offset(), + animation = { + top: endPosition.top - fixTop, + left: endPosition.left - fixLeft, + height: target.innerHeight(), + width: target.innerWidth() + }, + startPosition = element.offset(), + transfer = $( "
    " ) + .appendTo( "body" ) + .addClass( options.className ) + .css( { + top: startPosition.top - fixTop, + left: startPosition.left - fixLeft, + height: element.innerHeight(), + width: element.innerWidth(), + position: targetFixed ? "fixed" : "absolute" + } ) + .animate( animation, options.duration, options.easing, function() { + transfer.remove(); + if ( typeof done === 'function' ) { + done(); + } + } ); + } +} ); + +function parseClip( str, element ) { + var outerWidth = element.outerWidth(), + outerHeight = element.outerHeight(), + clipRegex = /^rect\((-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto)\)$/, + values = clipRegex.exec( str ) || [ "", 0, outerWidth, outerHeight, 0 ]; + + return { + top: parseFloat( values[ 1 ] ) || 0, + right: values[ 2 ] === "auto" ? outerWidth : parseFloat( values[ 2 ] ), + bottom: values[ 3 ] === "auto" ? outerHeight : parseFloat( values[ 3 ] ), + left: parseFloat( values[ 4 ] ) || 0 + }; +} + +$.fx.step.clip = function( fx ) { + if ( !fx.clipInit ) { + fx.start = $( fx.elem ).cssClip(); + if ( typeof fx.end === "string" ) { + fx.end = parseClip( fx.end, fx.elem ); + } + fx.clipInit = true; + } + + $( fx.elem ).cssClip( { + top: fx.pos * ( fx.end.top - fx.start.top ) + fx.start.top, + right: fx.pos * ( fx.end.right - fx.start.right ) + fx.start.right, + bottom: fx.pos * ( fx.end.bottom - fx.start.bottom ) + fx.start.bottom, + left: fx.pos * ( fx.end.left - fx.start.left ) + fx.start.left + } ); +}; + +} )(); + +/******************************************************************************/ +/*********************************** EASING ***********************************/ +/******************************************************************************/ + +( function() { + +// Based on easing equations from Robert Penner (http://www.robertpenner.com/easing) + +var baseEasings = {}; + +$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) { + baseEasings[ name ] = function( p ) { + return Math.pow( p, i + 2 ); + }; +} ); + +$.extend( baseEasings, { + Sine: function( p ) { + return 1 - Math.cos( p * Math.PI / 2 ); + }, + Circ: function( p ) { + return 1 - Math.sqrt( 1 - p * p ); + }, + Elastic: function( p ) { + return p === 0 || p === 1 ? p : + -Math.pow( 2, 8 * ( p - 1 ) ) * Math.sin( ( ( p - 1 ) * 80 - 7.5 ) * Math.PI / 15 ); + }, + Back: function( p ) { + return p * p * ( 3 * p - 2 ); + }, + Bounce: function( p ) { + var pow2, + bounce = 4; + + while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {} + return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 ); + } +} ); + +$.each( baseEasings, function( name, easeIn ) { + $.easing[ "easeIn" + name ] = easeIn; + $.easing[ "easeOut" + name ] = function( p ) { + return 1 - easeIn( 1 - p ); + }; + $.easing[ "easeInOut" + name ] = function( p ) { + return p < 0.5 ? + easeIn( p * 2 ) / 2 : + 1 - easeIn( p * -2 + 2 ) / 2; + }; +} ); + +} )(); + +var effect = $.effects; + + +/*! + * jQuery UI Effects Blind 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Blind Effect +//>>group: Effects +//>>description: Blinds the element. +//>>docs: http://api.jqueryui.com/blind-effect/ +//>>demos: http://jqueryui.com/effect/ + + + +var effectsEffectBlind = $.effects.define( "blind", "hide", function( options, done ) { + var map = { + up: [ "bottom", "top" ], + vertical: [ "bottom", "top" ], + down: [ "top", "bottom" ], + left: [ "right", "left" ], + horizontal: [ "right", "left" ], + right: [ "left", "right" ] + }, + element = $( this ), + direction = options.direction || "up", + start = element.cssClip(), + animate = { clip: $.extend( {}, start ) }, + placeholder = $.effects.createPlaceholder( element ); + + animate.clip[ map[ direction ][ 0 ] ] = animate.clip[ map[ direction ][ 1 ] ]; + + if ( options.mode === "show" ) { + element.cssClip( animate.clip ); + if ( placeholder ) { + placeholder.css( $.effects.clipToBox( animate ) ); + } + + animate.clip = start; + } + + if ( placeholder ) { + placeholder.animate( $.effects.clipToBox( animate ), options.duration, options.easing ); + } + + element.animate( animate, { + queue: false, + duration: options.duration, + easing: options.easing, + complete: done + } ); +} ); + + +/*! + * jQuery UI Effects Bounce 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Bounce Effect +//>>group: Effects +//>>description: Bounces an element horizontally or vertically n times. +//>>docs: http://api.jqueryui.com/bounce-effect/ +//>>demos: http://jqueryui.com/effect/ + + + +var effectsEffectBounce = $.effects.define( "bounce", function( options, done ) { + var upAnim, downAnim, refValue, + element = $( this ), + + // Defaults: + mode = options.mode, + hide = mode === "hide", + show = mode === "show", + direction = options.direction || "up", + distance = options.distance, + times = options.times || 5, + + // Number of internal animations + anims = times * 2 + ( show || hide ? 1 : 0 ), + speed = options.duration / anims, + easing = options.easing, + + // Utility: + ref = ( direction === "up" || direction === "down" ) ? "top" : "left", + motion = ( direction === "up" || direction === "left" ), + i = 0, + + queuelen = element.queue().length; + + $.effects.createPlaceholder( element ); + + refValue = element.css( ref ); + + // Default distance for the BIGGEST bounce is the outer Distance / 3 + if ( !distance ) { + distance = element[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3; + } + + if ( show ) { + downAnim = { opacity: 1 }; + downAnim[ ref ] = refValue; + + // If we are showing, force opacity 0 and set the initial position + // then do the "first" animation + element + .css( "opacity", 0 ) + .css( ref, motion ? -distance * 2 : distance * 2 ) + .animate( downAnim, speed, easing ); + } + + // Start at the smallest distance if we are hiding + if ( hide ) { + distance = distance / Math.pow( 2, times - 1 ); + } + + downAnim = {}; + downAnim[ ref ] = refValue; + + // Bounces up/down/left/right then back to 0 -- times * 2 animations happen here + for ( ; i < times; i++ ) { + upAnim = {}; + upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance; + + element + .animate( upAnim, speed, easing ) + .animate( downAnim, speed, easing ); + + distance = hide ? distance * 2 : distance / 2; + } + + // Last Bounce when Hiding + if ( hide ) { + upAnim = { opacity: 0 }; + upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance; + + element.animate( upAnim, speed, easing ); + } + + element.queue( done ); + + $.effects.unshift( element, queuelen, anims + 1 ); +} ); + + +/*! + * jQuery UI Effects Clip 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Clip Effect +//>>group: Effects +//>>description: Clips the element on and off like an old TV. +//>>docs: http://api.jqueryui.com/clip-effect/ +//>>demos: http://jqueryui.com/effect/ + + + +var effectsEffectClip = $.effects.define( "clip", "hide", function( options, done ) { + var start, + animate = {}, + element = $( this ), + direction = options.direction || "vertical", + both = direction === "both", + horizontal = both || direction === "horizontal", + vertical = both || direction === "vertical"; + + start = element.cssClip(); + animate.clip = { + top: vertical ? ( start.bottom - start.top ) / 2 : start.top, + right: horizontal ? ( start.right - start.left ) / 2 : start.right, + bottom: vertical ? ( start.bottom - start.top ) / 2 : start.bottom, + left: horizontal ? ( start.right - start.left ) / 2 : start.left + }; + + $.effects.createPlaceholder( element ); + + if ( options.mode === "show" ) { + element.cssClip( animate.clip ); + animate.clip = start; + } + + element.animate( animate, { + queue: false, + duration: options.duration, + easing: options.easing, + complete: done + } ); + +} ); + + +/*! + * jQuery UI Effects Drop 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Drop Effect +//>>group: Effects +//>>description: Moves an element in one direction and hides it at the same time. +//>>docs: http://api.jqueryui.com/drop-effect/ +//>>demos: http://jqueryui.com/effect/ + + + +var effectsEffectDrop = $.effects.define( "drop", "hide", function( options, done ) { + + var distance, + element = $( this ), + mode = options.mode, + show = mode === "show", + direction = options.direction || "left", + ref = ( direction === "up" || direction === "down" ) ? "top" : "left", + motion = ( direction === "up" || direction === "left" ) ? "-=" : "+=", + oppositeMotion = ( motion === "+=" ) ? "-=" : "+=", + animation = { + opacity: 0 + }; + + $.effects.createPlaceholder( element ); + + distance = options.distance || + element[ ref === "top" ? "outerHeight" : "outerWidth" ]( true ) / 2; + + animation[ ref ] = motion + distance; + + if ( show ) { + element.css( animation ); + + animation[ ref ] = oppositeMotion + distance; + animation.opacity = 1; + } + + // Animate + element.animate( animation, { + queue: false, + duration: options.duration, + easing: options.easing, + complete: done + } ); +} ); + + +/*! + * jQuery UI Effects Explode 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Explode Effect +//>>group: Effects +// jscs:disable maximumLineLength +//>>description: Explodes an element in all directions into n pieces. Implodes an element to its original wholeness. +// jscs:enable maximumLineLength +//>>docs: http://api.jqueryui.com/explode-effect/ +//>>demos: http://jqueryui.com/effect/ + + + +var effectsEffectExplode = $.effects.define( "explode", "hide", function( options, done ) { + + var i, j, left, top, mx, my, + rows = options.pieces ? Math.round( Math.sqrt( options.pieces ) ) : 3, + cells = rows, + element = $( this ), + mode = options.mode, + show = mode === "show", + + // Show and then visibility:hidden the element before calculating offset + offset = element.show().css( "visibility", "hidden" ).offset(), + + // Width and height of a piece + width = Math.ceil( element.outerWidth() / cells ), + height = Math.ceil( element.outerHeight() / rows ), + pieces = []; + + // Children animate complete: + function childComplete() { + pieces.push( this ); + if ( pieces.length === rows * cells ) { + animComplete(); + } + } + + // Clone the element for each row and cell. + for ( i = 0; i < rows; i++ ) { // ===> + top = offset.top + i * height; + my = i - ( rows - 1 ) / 2; + + for ( j = 0; j < cells; j++ ) { // ||| + left = offset.left + j * width; + mx = j - ( cells - 1 ) / 2; + + // Create a clone of the now hidden main element that will be absolute positioned + // within a wrapper div off the -left and -top equal to size of our pieces + element + .clone() + .appendTo( "body" ) + .wrap( "
    " ) + .css( { + position: "absolute", + visibility: "visible", + left: -j * width, + top: -i * height + } ) + + // Select the wrapper - make it overflow: hidden and absolute positioned based on + // where the original was located +left and +top equal to the size of pieces + .parent() + .addClass( "ui-effects-explode" ) + .css( { + position: "absolute", + overflow: "hidden", + width: width, + height: height, + left: left + ( show ? mx * width : 0 ), + top: top + ( show ? my * height : 0 ), + opacity: show ? 0 : 1 + } ) + .animate( { + left: left + ( show ? 0 : mx * width ), + top: top + ( show ? 0 : my * height ), + opacity: show ? 1 : 0 + }, options.duration || 500, options.easing, childComplete ); + } + } + + function animComplete() { + element.css( { + visibility: "visible" + } ); + $( pieces ).remove(); + done(); + } +} ); + + +/*! + * jQuery UI Effects Fade 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Fade Effect +//>>group: Effects +//>>description: Fades the element. +//>>docs: http://api.jqueryui.com/fade-effect/ +//>>demos: http://jqueryui.com/effect/ + + + +var effectsEffectFade = $.effects.define( "fade", "toggle", function( options, done ) { + var show = options.mode === "show"; + + $( this ) + .css( "opacity", show ? 0 : 1 ) + .animate( { + opacity: show ? 1 : 0 + }, { + queue: false, + duration: options.duration, + easing: options.easing, + complete: done + } ); +} ); + + +/*! + * jQuery UI Effects Fold 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Fold Effect +//>>group: Effects +//>>description: Folds an element first horizontally and then vertically. +//>>docs: http://api.jqueryui.com/fold-effect/ +//>>demos: http://jqueryui.com/effect/ + + + +var effectsEffectFold = $.effects.define( "fold", "hide", function( options, done ) { + + // Create element + var element = $( this ), + mode = options.mode, + show = mode === "show", + hide = mode === "hide", + size = options.size || 15, + percent = /([0-9]+)%/.exec( size ), + horizFirst = !!options.horizFirst, + ref = horizFirst ? [ "right", "bottom" ] : [ "bottom", "right" ], + duration = options.duration / 2, + + placeholder = $.effects.createPlaceholder( element ), + + start = element.cssClip(), + animation1 = { clip: $.extend( {}, start ) }, + animation2 = { clip: $.extend( {}, start ) }, + + distance = [ start[ ref[ 0 ] ], start[ ref[ 1 ] ] ], + + queuelen = element.queue().length; + + if ( percent ) { + size = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ]; + } + animation1.clip[ ref[ 0 ] ] = size; + animation2.clip[ ref[ 0 ] ] = size; + animation2.clip[ ref[ 1 ] ] = 0; + + if ( show ) { + element.cssClip( animation2.clip ); + if ( placeholder ) { + placeholder.css( $.effects.clipToBox( animation2 ) ); + } + + animation2.clip = start; + } + + // Animate + element + .queue( function( next ) { + if ( placeholder ) { + placeholder + .animate( $.effects.clipToBox( animation1 ), duration, options.easing ) + .animate( $.effects.clipToBox( animation2 ), duration, options.easing ); + } + + next(); + } ) + .animate( animation1, duration, options.easing ) + .animate( animation2, duration, options.easing ) + .queue( done ); + + $.effects.unshift( element, queuelen, 4 ); +} ); + + +/*! + * jQuery UI Effects Highlight 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Highlight Effect +//>>group: Effects +//>>description: Highlights the background of an element in a defined color for a custom duration. +//>>docs: http://api.jqueryui.com/highlight-effect/ +//>>demos: http://jqueryui.com/effect/ + + + +var effectsEffectHighlight = $.effects.define( "highlight", "show", function( options, done ) { + var element = $( this ), + animation = { + backgroundColor: element.css( "backgroundColor" ) + }; + + if ( options.mode === "hide" ) { + animation.opacity = 0; + } + + $.effects.saveStyle( element ); + + element + .css( { + backgroundImage: "none", + backgroundColor: options.color || "#ffff99" + } ) + .animate( animation, { + queue: false, + duration: options.duration, + easing: options.easing, + complete: done + } ); +} ); + + +/*! + * jQuery UI Effects Size 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Size Effect +//>>group: Effects +//>>description: Resize an element to a specified width and height. +//>>docs: http://api.jqueryui.com/size-effect/ +//>>demos: http://jqueryui.com/effect/ + + + +var effectsEffectSize = $.effects.define( "size", function( options, done ) { + + // Create element + var baseline, factor, temp, + element = $( this ), + + // Copy for children + cProps = [ "fontSize" ], + vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ], + hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ], + + // Set options + mode = options.mode, + restore = mode !== "effect", + scale = options.scale || "both", + origin = options.origin || [ "middle", "center" ], + position = element.css( "position" ), + pos = element.position(), + original = $.effects.scaledDimensions( element ), + from = options.from || original, + to = options.to || $.effects.scaledDimensions( element, 0 ); + + $.effects.createPlaceholder( element ); + + if ( mode === "show" ) { + temp = from; + from = to; + to = temp; + } + + // Set scaling factor + factor = { + from: { + y: from.height / original.height, + x: from.width / original.width + }, + to: { + y: to.height / original.height, + x: to.width / original.width + } + }; + + // Scale the css box + if ( scale === "box" || scale === "both" ) { + + // Vertical props scaling + if ( factor.from.y !== factor.to.y ) { + from = $.effects.setTransition( element, vProps, factor.from.y, from ); + to = $.effects.setTransition( element, vProps, factor.to.y, to ); + } + + // Horizontal props scaling + if ( factor.from.x !== factor.to.x ) { + from = $.effects.setTransition( element, hProps, factor.from.x, from ); + to = $.effects.setTransition( element, hProps, factor.to.x, to ); + } + } + + // Scale the content + if ( scale === "content" || scale === "both" ) { + + // Vertical props scaling + if ( factor.from.y !== factor.to.y ) { + from = $.effects.setTransition( element, cProps, factor.from.y, from ); + to = $.effects.setTransition( element, cProps, factor.to.y, to ); + } + } + + // Adjust the position properties based on the provided origin points + if ( origin ) { + baseline = $.effects.getBaseline( origin, original ); + from.top = ( original.outerHeight - from.outerHeight ) * baseline.y + pos.top; + from.left = ( original.outerWidth - from.outerWidth ) * baseline.x + pos.left; + to.top = ( original.outerHeight - to.outerHeight ) * baseline.y + pos.top; + to.left = ( original.outerWidth - to.outerWidth ) * baseline.x + pos.left; + } + element.css( from ); + + // Animate the children if desired + if ( scale === "content" || scale === "both" ) { + + vProps = vProps.concat( [ "marginTop", "marginBottom" ] ).concat( cProps ); + hProps = hProps.concat( [ "marginLeft", "marginRight" ] ); + + // Only animate children with width attributes specified + // TODO: is this right? should we include anything with css width specified as well + element.find( "*[width]" ).each( function() { + var child = $( this ), + childOriginal = $.effects.scaledDimensions( child ), + childFrom = { + height: childOriginal.height * factor.from.y, + width: childOriginal.width * factor.from.x, + outerHeight: childOriginal.outerHeight * factor.from.y, + outerWidth: childOriginal.outerWidth * factor.from.x + }, + childTo = { + height: childOriginal.height * factor.to.y, + width: childOriginal.width * factor.to.x, + outerHeight: childOriginal.height * factor.to.y, + outerWidth: childOriginal.width * factor.to.x + }; + + // Vertical props scaling + if ( factor.from.y !== factor.to.y ) { + childFrom = $.effects.setTransition( child, vProps, factor.from.y, childFrom ); + childTo = $.effects.setTransition( child, vProps, factor.to.y, childTo ); + } + + // Horizontal props scaling + if ( factor.from.x !== factor.to.x ) { + childFrom = $.effects.setTransition( child, hProps, factor.from.x, childFrom ); + childTo = $.effects.setTransition( child, hProps, factor.to.x, childTo ); + } + + if ( restore ) { + $.effects.saveStyle( child ); + } + + // Animate children + child.css( childFrom ); + child.animate( childTo, options.duration, options.easing, function() { + + // Restore children + if ( restore ) { + $.effects.restoreStyle( child ); + } + } ); + } ); + } + + // Animate + element.animate( to, { + queue: false, + duration: options.duration, + easing: options.easing, + complete: function() { + + var offset = element.offset(); + + if ( to.opacity === 0 ) { + element.css( "opacity", from.opacity ); + } + + if ( !restore ) { + element + .css( "position", position === "static" ? "relative" : position ) + .offset( offset ); + + // Need to save style here so that automatic style restoration + // doesn't restore to the original styles from before the animation. + $.effects.saveStyle( element ); + } + + done(); + } + } ); + +} ); + + +/*! + * jQuery UI Effects Scale 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Scale Effect +//>>group: Effects +//>>description: Grows or shrinks an element and its content. +//>>docs: http://api.jqueryui.com/scale-effect/ +//>>demos: http://jqueryui.com/effect/ + + + +var effectsEffectScale = $.effects.define( "scale", function( options, done ) { + + // Create element + var el = $( this ), + mode = options.mode, + percent = parseInt( options.percent, 10 ) || + ( parseInt( options.percent, 10 ) === 0 ? 0 : ( mode !== "effect" ? 0 : 100 ) ), + + newOptions = $.extend( true, { + from: $.effects.scaledDimensions( el ), + to: $.effects.scaledDimensions( el, percent, options.direction || "both" ), + origin: options.origin || [ "middle", "center" ] + }, options ); + + // Fade option to support puff + if ( options.fade ) { + newOptions.from.opacity = 1; + newOptions.to.opacity = 0; + } + + $.effects.effect.size.call( this, newOptions, done ); +} ); + + +/*! + * jQuery UI Effects Puff 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Puff Effect +//>>group: Effects +//>>description: Creates a puff effect by scaling the element up and hiding it at the same time. +//>>docs: http://api.jqueryui.com/puff-effect/ +//>>demos: http://jqueryui.com/effect/ + + + +var effectsEffectPuff = $.effects.define( "puff", "hide", function( options, done ) { + var newOptions = $.extend( true, {}, options, { + fade: true, + percent: parseInt( options.percent, 10 ) || 150 + } ); + + $.effects.effect.scale.call( this, newOptions, done ); +} ); + + +/*! + * jQuery UI Effects Pulsate 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Pulsate Effect +//>>group: Effects +//>>description: Pulsates an element n times by changing the opacity to zero and back. +//>>docs: http://api.jqueryui.com/pulsate-effect/ +//>>demos: http://jqueryui.com/effect/ + + + +var effectsEffectPulsate = $.effects.define( "pulsate", "show", function( options, done ) { + var element = $( this ), + mode = options.mode, + show = mode === "show", + hide = mode === "hide", + showhide = show || hide, + + // Showing or hiding leaves off the "last" animation + anims = ( ( options.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ), + duration = options.duration / anims, + animateTo = 0, + i = 1, + queuelen = element.queue().length; + + if ( show || !element.is( ":visible" ) ) { + element.css( "opacity", 0 ).show(); + animateTo = 1; + } + + // Anims - 1 opacity "toggles" + for ( ; i < anims; i++ ) { + element.animate( { opacity: animateTo }, duration, options.easing ); + animateTo = 1 - animateTo; + } + + element.animate( { opacity: animateTo }, duration, options.easing ); + + element.queue( done ); + + $.effects.unshift( element, queuelen, anims + 1 ); +} ); + + +/*! + * jQuery UI Effects Shake 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Shake Effect +//>>group: Effects +//>>description: Shakes an element horizontally or vertically n times. +//>>docs: http://api.jqueryui.com/shake-effect/ +//>>demos: http://jqueryui.com/effect/ + + + +var effectsEffectShake = $.effects.define( "shake", function( options, done ) { + + var i = 1, + element = $( this ), + direction = options.direction || "left", + distance = options.distance || 20, + times = options.times || 3, + anims = times * 2 + 1, + speed = Math.round( options.duration / anims ), + ref = ( direction === "up" || direction === "down" ) ? "top" : "left", + positiveMotion = ( direction === "up" || direction === "left" ), + animation = {}, + animation1 = {}, + animation2 = {}, + + queuelen = element.queue().length; + + $.effects.createPlaceholder( element ); + + // Animation + animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance; + animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2; + animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2; + + // Animate + element.animate( animation, speed, options.easing ); + + // Shakes + for ( ; i < times; i++ ) { + element + .animate( animation1, speed, options.easing ) + .animate( animation2, speed, options.easing ); + } + + element + .animate( animation1, speed, options.easing ) + .animate( animation, speed / 2, options.easing ) + .queue( done ); + + $.effects.unshift( element, queuelen, anims + 1 ); +} ); + + +/*! + * jQuery UI Effects Slide 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Slide Effect +//>>group: Effects +//>>description: Slides an element in and out of the viewport. +//>>docs: http://api.jqueryui.com/slide-effect/ +//>>demos: http://jqueryui.com/effect/ + + + +var effectsEffectSlide = $.effects.define( "slide", "show", function( options, done ) { + var startClip, startRef, + element = $( this ), + map = { + up: [ "bottom", "top" ], + down: [ "top", "bottom" ], + left: [ "right", "left" ], + right: [ "left", "right" ] + }, + mode = options.mode, + direction = options.direction || "left", + ref = ( direction === "up" || direction === "down" ) ? "top" : "left", + positiveMotion = ( direction === "up" || direction === "left" ), + distance = options.distance || + element[ ref === "top" ? "outerHeight" : "outerWidth" ]( true ), + animation = {}; + + $.effects.createPlaceholder( element ); + + startClip = element.cssClip(); + startRef = element.position()[ ref ]; + + // Define hide animation + animation[ ref ] = ( positiveMotion ? -1 : 1 ) * distance + startRef; + animation.clip = element.cssClip(); + animation.clip[ map[ direction ][ 1 ] ] = animation.clip[ map[ direction ][ 0 ] ]; + + // Reverse the animation if we're showing + if ( mode === "show" ) { + element.cssClip( animation.clip ); + element.css( ref, animation[ ref ] ); + animation.clip = startClip; + animation[ ref ] = startRef; + } + + // Actually animate + element.animate( animation, { + queue: false, + duration: options.duration, + easing: options.easing, + complete: done + } ); +} ); + + +/*! + * jQuery UI Effects Transfer 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Transfer Effect +//>>group: Effects +//>>description: Displays a transfer effect from one element to another. +//>>docs: http://api.jqueryui.com/transfer-effect/ +//>>demos: http://jqueryui.com/effect/ + + + +var effect; +if ( $.uiBackCompat !== false ) { + effect = $.effects.define( "transfer", function( options, done ) { + $( this ).transfer( options, done ); + } ); +} +var effectsEffectTransfer = effect; + + +/*! + * jQuery UI Focusable 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: :focusable Selector +//>>group: Core +//>>description: Selects elements which can be focused. +//>>docs: http://api.jqueryui.com/focusable-selector/ + + + +// Selectors +$.ui.focusable = function( element, hasTabindex ) { + var map, mapName, img, focusableIfVisible, fieldset, + nodeName = element.nodeName.toLowerCase(); + + if ( "area" === nodeName ) { + map = element.parentNode; + mapName = map.name; + if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) { + return false; + } + img = $( "img[usemap='#" + mapName + "']" ); + return img.length > 0 && img.is( ":visible" ); + } + + if ( /^(input|select|textarea|button|object)$/.test( nodeName ) ) { + focusableIfVisible = !element.disabled; + + if ( focusableIfVisible ) { + + // Form controls within a disabled fieldset are disabled. + // However, controls within the fieldset's legend do not get disabled. + // Since controls generally aren't placed inside legends, we skip + // this portion of the check. + fieldset = $( element ).closest( "fieldset" )[ 0 ]; + if ( fieldset ) { + focusableIfVisible = !fieldset.disabled; + } + } + } else if ( "a" === nodeName ) { + focusableIfVisible = element.href || hasTabindex; + } else { + focusableIfVisible = hasTabindex; + } + + return focusableIfVisible && $( element ).is( ":visible" ) && visible( $( element ) ); +}; + +// Support: IE 8 only +// IE 8 doesn't resolve inherit to visible/hidden for computed values +function visible( element ) { + var visibility = element.css( "visibility" ); + while ( visibility === "inherit" ) { + element = element.parent(); + visibility = element.css( "visibility" ); + } + return visibility !== "hidden"; +} + +$.extend( $.expr.pseudos, { + focusable: function( element ) { + return $.ui.focusable( element, $.attr( element, "tabindex" ) != null ); + } +} ); + +var focusable = $.ui.focusable; + + + + +// Support: IE8 Only +// IE8 does not support the form attribute and when it is supplied. It overwrites the form prop +// with a string, so we need to find the proper form. +var form = $.fn.form = function() { + return typeof this[ 0 ].form === "string" ? this.closest( "form" ) : $( this[ 0 ].form ); +}; + + +/*! + * jQuery UI Form Reset Mixin 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Form Reset Mixin +//>>group: Core +//>>description: Refresh input widgets when their form is reset +//>>docs: http://api.jqueryui.com/form-reset-mixin/ + + + +var formResetMixin = $.ui.formResetMixin = { + _formResetHandler: function() { + var form = $( this ); + + // Wait for the form reset to actually happen before refreshing + setTimeout( function() { + var instances = form.data( "ui-form-reset-instances" ); + $.each( instances, function() { + this.refresh(); + } ); + } ); + }, + + _bindFormResetHandler: function() { + this.form = this.element.form(); + if ( !this.form.length ) { + return; + } + + var instances = this.form.data( "ui-form-reset-instances" ) || []; + if ( !instances.length ) { + + // We don't use _on() here because we use a single event handler per form + this.form.on( "reset.ui-form-reset", this._formResetHandler ); + } + instances.push( this ); + this.form.data( "ui-form-reset-instances", instances ); + }, + + _unbindFormResetHandler: function() { + if ( !this.form.length ) { + return; + } + + var instances = this.form.data( "ui-form-reset-instances" ); + instances.splice( $.inArray( this, instances ), 1 ); + if ( instances.length ) { + this.form.data( "ui-form-reset-instances", instances ); + } else { + this.form + .removeData( "ui-form-reset-instances" ) + .off( "reset.ui-form-reset" ); + } + } +}; + + +/*! + * jQuery UI Support for jQuery core 1.7.x 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + */ + +//>>label: jQuery 1.7 Support +//>>group: Core +//>>description: Support version 1.7.x of jQuery core + + + +// Support: jQuery 1.7 only +// Not a great way to check versions, but since we only support 1.7+ and only +// need to detect <1.8, this is a simple check that should suffice. Checking +// for "1.7." would be a bit safer, but the version string is 1.7, not 1.7.0 +// and we'll never reach 1.70.0 (if we do, we certainly won't be supporting +// 1.7 anymore). See #11197 for why we're not using feature detection. +if ( $.fn.jquery.substring( 0, 3 ) === "1.7" ) { + + // Setters for .innerWidth(), .innerHeight(), .outerWidth(), .outerHeight() + // Unlike jQuery Core 1.8+, these only support numeric values to set the + // dimensions in pixels + $.each( [ "Width", "Height" ], function( i, name ) { + var side = name === "Width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ], + type = name.toLowerCase(), + orig = { + innerWidth: $.fn.innerWidth, + innerHeight: $.fn.innerHeight, + outerWidth: $.fn.outerWidth, + outerHeight: $.fn.outerHeight + }; + + function reduce( elem, size, border, margin ) { + $.each( side, function() { + size -= parseFloat( $.css( elem, "padding" + this ) ) || 0; + if ( border ) { + size -= parseFloat( $.css( elem, "border" + this + "Width" ) ) || 0; + } + if ( margin ) { + size -= parseFloat( $.css( elem, "margin" + this ) ) || 0; + } + } ); + return size; + } + + $.fn[ "inner" + name ] = function( size ) { + if ( size === undefined ) { + return orig[ "inner" + name ].call( this ); + } + + return this.each( function() { + $( this ).css( type, reduce( this, size ) + "px" ); + } ); + }; + + $.fn[ "outer" + name ] = function( size, margin ) { + if ( typeof size !== "number" ) { + return orig[ "outer" + name ].call( this, size ); + } + + return this.each( function() { + $( this ).css( type, reduce( this, size, true, margin ) + "px" ); + } ); + }; + } ); + + $.fn.addBack = function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + }; +} + +; +/*! + * jQuery UI Keycode 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Keycode +//>>group: Core +//>>description: Provide keycodes as keynames +//>>docs: http://api.jqueryui.com/jQuery.ui.keyCode/ + + +var keycode = $.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 +}; + + + + +// Internal use only +var escapeSelector = $.ui.escapeSelector = ( function() { + var selectorEscape = /([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g; + return function( selector ) { + return selector.replace( selectorEscape, "\\$1" ); + }; +} )(); + + +/*! + * jQuery UI Labels 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: labels +//>>group: Core +//>>description: Find all the labels associated with a given input +//>>docs: http://api.jqueryui.com/labels/ + + + +var labels = $.fn.labels = function() { + var ancestor, selector, id, labels, ancestors; + + // Check control.labels first + if ( this[ 0 ].labels && this[ 0 ].labels.length ) { + return this.pushStack( this[ 0 ].labels ); + } + + // Support: IE <= 11, FF <= 37, Android <= 2.3 only + // Above browsers do not support control.labels. Everything below is to support them + // as well as document fragments. control.labels does not work on document fragments + labels = this.eq( 0 ).parents( "label" ); + + // Look for the label based on the id + id = this.attr( "id" ); + if ( id ) { + + // We don't search against the document in case the element + // is disconnected from the DOM + ancestor = this.eq( 0 ).parents().last(); + + // Get a full set of top level ancestors + ancestors = ancestor.add( ancestor.length ? ancestor.siblings() : this.siblings() ); + + // Create a selector for the label based on the id + selector = "label[for='" + $.ui.escapeSelector( id ) + "']"; + + labels = labels.add( ancestors.find( selector ).addBack( selector ) ); + + } + + // Return whatever we have found for labels + return this.pushStack( labels ); +}; + + +/*! + * jQuery UI Scroll Parent 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: scrollParent +//>>group: Core +//>>description: Get the closest ancestor element that is scrollable. +//>>docs: http://api.jqueryui.com/scrollParent/ + + + +var scrollParent = $.fn.scrollParent = function( includeHidden ) { + var position = this.css( "position" ), + excludeStaticParent = position === "absolute", + overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/, + scrollParent = this.parents().filter( function() { + var parent = $( this ); + if ( excludeStaticParent && parent.css( "position" ) === "static" ) { + return false; + } + return overflowRegex.test( parent.css( "overflow" ) + parent.css( "overflow-y" ) + + parent.css( "overflow-x" ) ); + } ).eq( 0 ); + + return position === "fixed" || !scrollParent.length ? + $( this[ 0 ].ownerDocument || document ) : + scrollParent; +}; + + +/*! + * jQuery UI Tabbable 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: :tabbable Selector +//>>group: Core +//>>description: Selects elements which can be tabbed to. +//>>docs: http://api.jqueryui.com/tabbable-selector/ + + + +var tabbable = $.extend( $.expr.pseudos, { + tabbable: function( element ) { + var tabIndex = $.attr( element, "tabindex" ), + hasTabindex = tabIndex != null; + return ( !hasTabindex || tabIndex >= 0 ) && $.ui.focusable( element, hasTabindex ); + } +} ); + + +/*! + * jQuery UI Unique ID 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: uniqueId +//>>group: Core +//>>description: Functions to generate and remove uniqueId's +//>>docs: http://api.jqueryui.com/uniqueId/ + + + +var uniqueId = $.fn.extend( { + uniqueId: ( function() { + var uuid = 0; + + return function() { + return this.each( function() { + if ( !this.id ) { + this.id = "ui-id-" + ( ++uuid ); + } + } ); + }; + } )(), + + removeUniqueId: function() { + return this.each( function() { + if ( /^ui-id-\d+$/.test( this.id ) ) { + $( this ).removeAttr( "id" ); + } + } ); + } +} ); + + +/*! + * jQuery UI Accordion 1.12.1 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Accordion +//>>group: Widgets +// jscs:disable maximumLineLength +//>>description: Displays collapsible content panels for presenting information in a limited amount of space. +// jscs:enable maximumLineLength +//>>docs: http://api.jqueryui.com/accordion/ +//>>demos: http://jqueryui.com/accordion/ +//>>css.structure: ../../themes/base/core.css +//>>css.structure: ../../themes/base/accordion.css +//>>css.theme: ../../themes/base/theme.css + + + +var widgetsAccordion = $.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: false, + event: "click", + header: "> li > :first-child, > :not(li):even", + heightStyle: "auto", + icons: { + activeHeader: "ui-icon-triangle-1-s", + header: "ui-icon-triangle-1-e" + }, + + // Callbacks + activate: null, + beforeActivate: null + }, + + hideProps: { + borderTopWidth: "hide", + borderBottomWidth: "hide", + paddingTop: "hide", + paddingBottom: "hide", + height: "hide" + }, + + showProps: { + borderTopWidth: "show", + borderBottomWidth: "show", + paddingTop: "show", + paddingBottom: "show", + height: "show" + }, + + _create: function() { + var options = this.options; + + this.prevShow = this.prevHide = $(); + this._addClass( "ui-accordion", "ui-widget ui-helper-reset" ); + this.element.attr( "role", "tablist" ); + + // Don't allow collapsible: false and active: false / null + if ( !options.collapsible && ( options.active === false || options.active == null ) ) { + options.active = 0; + } + + this._processPanels(); + + // handle negative values + if ( options.active < 0 ) { + options.active += this.headers.length; + } + this._refresh(); + }, + + _getCreateEventData: function() { + return { + header: this.active, + panel: !this.active.length ? $() : this.active.next() + }; + }, + + _createIcons: function() { + var icon, children, + icons = this.options.icons; + + if ( icons ) { + icon = $( "" ); + this._addClass( icon, "ui-accordion-header-icon", "ui-icon " + icons.header ); + icon.prependTo( this.headers ); + children = this.active.children( ".ui-accordion-header-icon" ); + this._removeClass( children, icons.header ) + ._addClass( children, null, icons.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 contents; + + // Clean up main element + this.element.removeAttr( "role" ); + + // Clean up headers + this.headers + .removeAttr( "role aria-expanded aria-selected aria-controls tabIndex" ) + .removeUniqueId(); + + this._destroyIcons(); + + // Clean up content panels + contents = this.headers.next() + .css( "display", "" ) + .removeAttr( "role aria-hidden aria-labelledby" ) + .removeUniqueId(); + + if ( this.options.heightStyle !== "content" ) { + contents.css( "height", "" ); + } + }, + + _setOption: function( key, value ) { + if ( key === "active" ) { + + // _activate() will handle invalid values and update this.options + this._activate( value ); + return; + } + + if ( key === "event" ) { + if ( this.options.event ) { + this._off( this.headers, this.options.event ); + } + this._setupEvents( value ); + } + + this._super( key, value ); + + // Setting collapsible: false while collapsed; open first panel + if ( key === "collapsible" && !value && this.options.active === false ) { + this._activate( 0 ); + } + + if ( key === "icons" ) { + this._destroyIcons(); + if ( value ) { + this._createIcons(); + } + } + }, + + _setOptionDisabled: function( value ) { + this._super( value ); + + this.element.attr( "aria-disabled", value ); + + // Support: IE8 Only + // #5332 / #6059 - opacity doesn't cascade to positioned elements in IE + // so we need to add the disabled class to the headers and panels + this._toggleClass( null, "ui-state-disabled", !!value ); + this._toggleClass( this.headers.add( this.headers.next() ), null, "ui-state-disabled", + !!value ); + }, + + _keydown: function( event ) { + if ( event.altKey || event.ctrlKey ) { + return; + } + + var keyCode = $.ui.keyCode, + length = this.headers.length, + currentIndex = this.headers.index( event.target ), + toFocus = false; + + switch ( event.keyCode ) { + case keyCode.RIGHT: + case keyCode.DOWN: + toFocus = this.headers[ ( currentIndex + 1 ) % length ]; + break; + case keyCode.LEFT: + case keyCode.UP: + toFocus = this.headers[ ( currentIndex - 1 + length ) % length ]; + break; + case keyCode.SPACE: + case keyCode.ENTER: + this._eventHandler( event ); + break; + case keyCode.HOME: + toFocus = this.headers[ 0 ]; + break; + case keyCode.END: + toFocus = this.headers[ length - 1 ]; + break; + } + + if ( toFocus ) { + $( event.target ).attr( "tabIndex", -1 ); + $( toFocus ).attr( "tabIndex", 0 ); + $( toFocus ).trigger( "focus" ); + event.preventDefault(); + } + }, + + _panelKeyDown: function( event ) { + if ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) { + $( event.currentTarget ).prev().trigger( "focus" ); + } + }, + + refresh: function() { + var options = this.options; + this._processPanels(); + + // Was collapsed or no panel + if ( ( options.active === false && options.collapsible === true ) || + !this.headers.length ) { + options.active = false; + this.active = $(); + + // active false only when collapsible is true + } else if ( options.active === false ) { + this._activate( 0 ); + + // was active, but active panel is gone + } else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) { + + // all remaining panel are disabled + if ( this.headers.length === this.headers.find( ".ui-state-disabled" ).length ) { + options.active = false; + this.active = $(); + + // activate previous panel + } else { + this._activate( Math.max( 0, options.active - 1 ) ); + } + + // was active, active panel still exists + } else { + + // make sure active index is correct + options.active = this.headers.index( this.active ); + } + + this._destroyIcons(); + + this._refresh(); + }, + + _processPanels: function() { + var prevHeaders = this.headers, + prevPanels = this.panels; + + this.headers = this.element.find( this.options.header ); + 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" ); + + // Avoid memory leaks (#10056) + if ( prevPanels ) { + this._off( prevHeaders.not( this.headers ) ); + this._off( prevPanels.not( this.panels ) ); + } + }, + + _refresh: function() { + var maxHeight, + options = this.options, + heightStyle = options.heightStyle, + parent = this.element.parent(); + + this.active = this._findActive( options.active ); + 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 header = $( this ), + headerId = header.uniqueId().attr( "id" ), + panel = header.next(), + panelId = panel.uniqueId().attr( "id" ); + header.attr( "aria-controls", panelId ); + panel.attr( "aria-labelledby", headerId ); + } ) + .next() + .attr( "role", "tabpanel" ); + + this.headers + .not( this.active ) + .attr( { + "aria-selected": "false", + "aria-expanded": "false", + tabIndex: -1 + } ) + .next() + .attr( { + "aria-hidden": "true" + } ) + .hide(); + + // Make sure at least one header is in the tab order + if ( !this.active.length ) { + this.headers.eq( 0 ).attr( "tabIndex", 0 ); + } else { + this.active.attr( { + "aria-selected": "true", + "aria-expanded": "true", + tabIndex: 0 + } ) + .next() + .attr( { + "aria-hidden": "false" + } ); + } + + this._createIcons(); + + this._setupEvents( options.event ); + + if ( heightStyle === "fill" ) { + maxHeight = parent.height(); + this.element.siblings( ":visible" ).each( function() { + var elem = $( this ), + position = elem.css( "position" ); + + if ( position === "absolute" || position === "fixed" ) { + return; + } + maxHeight -= elem.outerHeight( true ); + } ); + + this.headers.each( function() { + maxHeight -= $( this ).outerHeight( true ); + } ); + + this.headers.next() + .each( function() { + $( this ).height( Math.max( 0, maxHeight - + $( this ).innerHeight() + $( this ).height() ) ); + } ) + .css( "overflow", "auto" ); + } else if ( heightStyle === "auto" ) { + maxHeight = 0; + this.headers.next() + .each( function() { + var isVisible = $( this ).is( ":visible" ); + if ( !isVisible ) { + $( this ).show(); + } + maxHeight = Math.max( maxHeight, $( this ).css( "height", "" ).height() ); + if ( !isVisible ) { + $( this ).hide(); + } + } ) + .height( maxHeight ); + } + }, + + _activate: function( index ) { + var active = this._findActive( index )[ 0 ]; + + // Trying to activate the already active panel + if ( active === this.active[ 0 ] ) { + return; + } + + // Trying to collapse, simulate a click on the currently active header + active = active || this.active[ 0 ]; + + this._eventHandler( { + target: active, + currentTarget: active, + preventDefault: $.noop + } ); + }, + + _findActive: function( selector ) { + return typeof selector === "number" ? this.headers.eq( selector ) : $(); + }, + + _setupEvents: function( event ) { + var events = { + keydown: "_keydown" + }; + if ( event ) { + $.each( event.split( " " ), function( index, eventName ) { + events[ eventName ] = "_eventHandler"; + } ); + } + + this._off( this.headers.add( this.headers.next() ) ); + this._on( this.headers, events ); + this._on( this.headers.next(), { keydown: "_panelKeyDown" } ); + this._hoverable( this.headers ); + this._focusable( this.headers ); + }, + + _eventHandler: function( event ) { + var activeChildren, clickedChildren, + options = this.options, + active = this.active, + clicked = $( event.currentTarget ), + clickedIsActive = clicked[ 0 ] === active[ 0 ], + collapsing = clickedIsActive && options.collapsible, + toShow = collapsing ? $() : clicked.next(), + toHide = active.next(), + eventData = { + oldHeader: active, + oldPanel: toHide, + newHeader: collapsing ? $() : clicked, + newPanel: toShow + }; + + event.preventDefault(); + + if ( + + // click on active header, but not collapsible + ( clickedIsActive && !options.collapsible ) || + + // allow canceling activation + ( this._trigger( "beforeActivate", event, eventData ) === false ) ) { + return; + } + + options.active = collapsing ? false : this.headers.index( clicked ); + + // When the call to ._toggle() comes after the class changes + // it causes a very odd bug in IE 8 (see #6720) + this.active = clickedIsActive ? $() : clicked; + this._toggle( eventData ); + + // Switch classes + // corner classes on the previously active header stay after the animation + this._removeClass( active, "ui-accordion-header-active", "ui-state-active" ); + if ( options.icons ) { + activeChildren = active.children( ".ui-accordion-header-icon" ); + this._removeClass( activeChildren, null, options.icons.activeHeader ) + ._addClass( activeChildren, null, options.icons.header ); + } + + if ( !clickedIsActive ) { + this._removeClass( clicked, "ui-accordion-header-collapsed" ) + ._addClass( clicked, "ui-accordion-header-active", "ui-state-active" ); + if ( options.icons ) { + clickedChildren = clicked.children( ".ui-accordion-header-icon" ); + this._removeClass( clickedChildren, null, options.icons.header ) + ._addClass( clickedChildren, null, options.icons.activeHeader ); + } + + this._addClass( clicked.next(), "ui-accordion-content-active" ); + } + }, + + _toggle: function( data ) { + var toShow = data.newPanel, + toHide = this.prevShow.length ? this.prevShow : data.oldPanel; + + // Handle activating a panel during the animation for another activation + this.prevShow.add( this.prevHide ).stop( true, true ); + this.prevShow = toShow; + this.prevHide = toHide; + + if ( this.options.animate ) { + this._animate( toShow, toHide, data ); + } else { + toHide.hide(); + toShow.show(); + this._toggleComplete( data ); + } + + toHide.attr( { + "aria-hidden": "true" + } ); + toHide.prev().attr( { + "aria-selected": "false", + "aria-expanded": "false" + } ); + + // if we're switching panels, remove the old header from the tab order + // if we're opening from collapsed state, remove the previous header from the tab order + // if we're collapsing, then keep the collapsing header in the tab order + if ( toShow.length && toHide.length ) { + toHide.prev().attr( { + "tabIndex": -1, + "aria-expanded": "false" + } ); + } else if ( toShow.length ) { + this.headers.filter( function() { + return parseInt( $( this ).attr( "tabIndex" ), 10 ) === 0; + } ) + .attr( "tabIndex", -1 ); + } + + toShow + .attr( "aria-hidden", "false" ) + .prev() + .attr( { + "aria-selected": "true", + "aria-expanded": "true", + tabIndex: 0 + } ); + }, + + _animate: function( toShow, toHide, data ) { + var total, easing, duration, + that = this, + adjust = 0, + boxSizing = toShow.css( "box-sizing" ), + down = toShow.length && + ( !toHide.length || ( toShow.index() < toHide.index() ) ), + animate = this.options.animate || {}, + options = down && animate.down || animate, + complete = function() { + that._toggleComplete( data ); + }; + + if ( typeof options === "number" ) { + duration = options; + } + if ( typeof options === "string" ) { + easing = options; + } + + // fall back from options to animation in case of partial down settings + easing = easing || options.easing || animate.easing; + duration = duration || options.duration || animate.duration; + + if ( !toHide.length ) { + return toShow.animate( this.showProps, duration, easing, complete ); + } + if ( !toShow.length ) { + return toHide.animate( this.hideProps, duration, easing, complete ); + } + + total = toShow.show().outerHeight(); + toHide.animate( this.hideProps, { + duration: duration, + easing: easing, + step: function( now, fx ) { + fx.now = Math.round( now ); + } + } ); + toShow + .hide() + .animate( this.showProps, { + duration: duration, + easing: easing, + complete: complete, + step: function( now, fx ) { + fx.now = Math.round( now ); + if ( fx.prop !== "height" ) { + if ( boxSizing === "content-box" ) { + adjust += fx.now; + } + } else if ( that.options.heightStyle !== "content" ) { + fx.now = Math.round( total - toHide.outerHeight() - adjust ); + adjust = 0; + } + } + } ); + }, + + _toggleComplete: function( data ) { + var toHide = data.oldPanel, + prev = toHide.prev(); + + this._removeClass( toHide, "ui-accordion-content-active" ); + this._removeClass( prev, "ui-accordion-header-active" ) + ._addClass( prev, "ui-accordion-header-collapsed" ); + + // Work around for rendering bug in IE (#5421) + if ( toHide.length ) { + toHide.parent()[ 0 ].className = toHide.parent()[ 0 ].className; + } + this._trigger( "activate", null, data ); + } +} ); + + + +var safeActiveElement = $.ui.safeActiveElement = function( document ) { + var activeElement; + + // Support: IE 9 only + // IE9 throws an "Unspecified error" accessing document.activeElement from an