From c2066abca24290b5a141285713e56aa9ddd14a4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=B5=9C=EC=A4=80=ED=9D=A0?= Date: Mon, 17 Jul 2023 21:09:49 +0900 Subject: [PATCH] servermgrv2 init... --- .gitignore | 136 + LICENSE | 22 + README.md | 66 +- app/.htaccess | 6 + app/Common.php | 15 + app/Config/App.php | 450 + app/Config/Autoload.php | 97 + app/Config/Boot/development.php | 32 + app/Config/Boot/production.php | 21 + app/Config/Boot/testing.php | 32 + app/Config/CURLRequest.php | 20 + app/Config/Cache.php | 169 + app/Config/Constants.php | 202 + app/Config/ContentSecurityPolicy.php | 176 + app/Config/Cookie.php | 105 + app/Config/Database.php | 84 + app/Config/DocTypes.php | 43 + app/Config/Email.php | 117 + app/Config/Encryption.php | 83 + app/Config/Events.php | 48 + app/Config/Exceptions.php | 77 + app/Config/Feature.php | 30 + app/Config/Filters.php | 65 + app/Config/ForeignCharacters.php | 9 + app/Config/Format.php | 77 + app/Config/Generators.php | 40 + app/Config/Honeypot.php | 42 + app/Config/Images.php | 31 + app/Config/Kint.php | 51 + app/Config/Logger.php | 150 + app/Config/Migrations.php | 52 + app/Config/Mimes.php | 530 + app/Config/Modules.php | 76 + app/Config/Pager.php | 39 + app/Config/Paths.php | 75 + app/Config/Publisher.php | 28 + app/Config/Routes.php | 103 + app/Config/Security.php | 101 + app/Config/Services.php | 32 + app/Config/Session.php | 102 + app/Config/Toolbar.php | 91 + app/Config/UserAgents.php | 252 + app/Config/Validation.php | 44 + app/Config/View.php | 56 + app/Controllers/Admin/AdminController.php | 19 + app/Controllers/Admin/HPILOController.php | 185 + app/Controllers/Admin/Home.php | 27 + app/Controllers/Admin/LoggerController.php | 108 + app/Controllers/Admin/UserController.php | 116 + app/Controllers/Admin/UserSNSController.php | 127 + app/Controllers/BaseController.php | 58 + app/Controllers/CLI/HPILO/HPILO4.php | 52 + app/Controllers/Common/AuthController.php | 80 + app/Controllers/Common/CommonController.php | 465 + app/Controllers/Common/CommonTrait.php | 49 + app/Controllers/Front/FrontController.php | 17 + app/Controllers/Home.php | 11 + app/Database/Migrations/.gitkeep | 0 .../2023-02-15-055119_CreateUsersTable.php | 64 + app/Database/Seeds/.gitkeep | 0 app/Database/Seeds/UserSeeder.php | 41 + app/Database/table.sql | 69 + app/Entities/CommonEntity.php | 14 + app/Entities/HPILOEntity.php | 41 + app/Entities/LoggerEntity.php | 18 + app/Entities/UserEntity.php | 37 + app/Entities/UserSNSEntity.php | 37 + app/Filters/.gitkeep | 0 app/Filters/AuthFilter.php | 64 + app/Helpers/.gitkeep | 0 app/Helpers/Admin/HPILO_helper.php | 101 + app/Helpers/Admin/Logger_helper.php | 86 + app/Helpers/Admin/UserSNS_helper.php | 76 + app/Helpers/Admin/User_helper.php | 80 + app/Helpers/Common_helper.php | 146 + app/Language/.gitkeep | 0 app/Language/en/Admin/HPILO.php | 30 + app/Language/en/Admin/Logger.php | 18 + app/Language/en/Admin/User.php | 27 + app/Language/en/Admin/UserSNS.php | 20 + app/Language/en/Admin/Validation.php | 4 + app/Libraries/.gitkeep | 0 app/Libraries/API/HPILO/HPILO4.php | 167 + app/Libraries/Adapter/API/Adapter.php | 82 + app/Libraries/Adapter/API/CurlAdapter.php | 204 + app/Libraries/Adapter/API/GuzzleAdapter.php | 83 + app/Libraries/Adapter/Auth/Adapter.php | 65 + app/Libraries/Adapter/Auth/GoogleAdapter.php | 123 + app/Libraries/Adapter/Auth/LocalAdapter.php | 35 + app/Libraries/Log/DataBase.php | 23 + app/Libraries/Log/Log.php | 28 + app/Models/.gitkeep | 0 app/Models/CommonModel.php | 58 + app/Models/CommonTrait.php | 41 + app/Models/HPILOModel.php | 58 + app/Models/LoggerModel.php | 48 + app/Models/UserModel.php | 56 + app/Models/UserSNSModel.php | 59 + app/ThirdParty/.gitkeep | 0 app/Views/admin/hpilo/console_applet.php | 17 + app/Views/admin/hpilo/console_iframe.php | 13 + app/Views/admin/hpilo/console_info.php | 285 + app/Views/admin/hpilo/console_irc.php | 1523 ++ app/Views/admin/hpilo/console_shell.php | 139 + app/Views/admin/hpilo/index.php | 47 + app/Views/admin/hpilo/insert.php | 24 + app/Views/admin/hpilo/update.php | 24 + app/Views/admin/hpilo/view.php | 15 + app/Views/admin/index.php | 89 + app/Views/admin/logger/index.php | 46 + app/Views/admin/logger/view.php | 15 + app/Views/admin/user/index.php | 49 + app/Views/admin/user/insert.php | 24 + app/Views/admin/user/update.php | 22 + app/Views/admin/user/view.php | 15 + app/Views/admin/usersns/index.php | 48 + app/Views/auth/login.php | 38 + app/Views/auth/login_v1.php | 58 + app/Views/errors/cli/error_404.php | 7 + app/Views/errors/cli/error_exception.php | 65 + app/Views/errors/cli/production.php | 5 + app/Views/errors/html/debug.css | 197 + app/Views/errors/html/debug.js | 116 + app/Views/errors/html/error_404.php | 84 + app/Views/errors/html/error_exception.php | 397 + app/Views/errors/html/production.php | 25 + app/Views/layouts/admin.php | 44 + app/Views/layouts/admin/left_menu.php | 73 + app/Views/layouts/admin/make_password.php | 4 + app/Views/layouts/admin/member_link.php | 17 + app/Views/layouts/admin/quick_btn.php | 15 + app/Views/layouts/admin/top_menu.php | 14 + app/Views/layouts/empty.php | 36 + app/Views/layouts/front.php | 45 + app/Views/layouts/front/cfmgr/copyright.php | 19 + app/Views/layouts/front/cfmgr/header.php | 5 + .../front/cfmgr/siteboard_left_banner.php | 8 + .../front/cfmgr/sitecontent_left_banner.php | 8 + app/Views/layouts/front/cfmgr/top_logo.php | 13 + .../front/cfmgr/welcome_left_banner.php | 5 + .../front/cfmgr/welcome_partner_banner.php | 16 + .../front/cfmgr/welcome_right_banner.php | 14 + app/Views/templates/Pagers/bootstrap_full.php | 34 + .../templates/Pagers/bootstrap_simple.php | 17 + app/Views/templates/admin/cloudflare/dns.php | 51 + .../templates/admin/cloudflare/select2.php | 13 + app/Views/templates/admin/footer.php | 28 + app/Views/templates/admin/header.php | 4 + app/Views/templates/admin/index_head.php | 6 + app/Views/welcome_message.php | 325 + app/index.html | 11 + builds | 125 + cfmgr_dataflow.png | Bin 0 -> 127030 bytes cfmgr_dataflow.xml | 1 + composer.json | 42 + phpunit.xml.dist | 57 + preload.php | 113 + public/.htaccess | 49 + public/css/admin.css | 103 + public/css/admin/header.css | 15 + public/css/admin/left_menu.css | 32 + public/css/admin/member_link.css | 17 + public/css/admin/quick_btn.css | 10 + public/css/admin/top_menu.css | 34 + public/css/empty.css | 43 + public/css/front.css | 63 + public/css/front/top_banner.css | 56 + public/css/front/welcome_left_banner.css | 25 + public/css/front/welcome_partner_banner.css | 41 + public/css/front/zeta-menu.css | 54 + public/css/login.css | 19 + public/favicon.ico | Bin 0 -> 5430 bytes public/hpilo/alt/css/style.css | 1736 ++ public/hpilo/css/application.css | 48 + public/hpilo/css/eov.css | 354 + public/hpilo/css/irc.css | 86 + public/hpilo/css/jquery-ui.css | 386 + public/hpilo/css/msgbox.css | 21 + public/hpilo/html/application.html | 9 + public/hpilo/js/VMconnection.js | 390 + public/hpilo/js/cache.js | 49 + public/hpilo/js/constants.js | 168 + public/hpilo/js/extendedIcons.js | 11 + public/hpilo/js/hostPwr.js | 42 + public/hpilo/js/iLO.js | 2273 ++ public/hpilo/js/icons.js | 36 + public/hpilo/js/inputValidator.js | 624 + public/hpilo/js/irc.js | 705 + public/hpilo/js/ircKeyboardMouse.js | 288 + public/hpilo/js/jquery-ui.js | 18709 ++++++++++++++++ public/hpilo/js/jquery.eventsource.js | 191 + public/hpilo/js/jquery.fullscreen.js | 36 + public/hpilo/js/jquery.js | 3205 +++ public/hpilo/js/pseudo-worker.js | 135 + public/hpilo/js/renderer.js | 216 + public/hpilo/js/socket.js | 508 + public/hpilo/js/state.js | 523 + public/hpilo/lang/en/strings.js | 3078 +++ public/images/auth/google_login_button.png | Bin 0 -> 2280 bytes public/images/common/adminbg.png | Bin 0 -> 147749 bytes public/images/common/btn_login.png | Bin 0 -> 23014 bytes public/images/common/japanese/adminbg.png | Bin 0 -> 147749 bytes public/images/common/japanese/bicon1.gif | Bin 0 -> 196 bytes public/images/common/japanese/blank.gif | Bin 0 -> 43 bytes .../images/common/japanese/blit_diamond.jpg | Bin 0 -> 445 bytes public/images/common/japanese/blit_orange.gif | Bin 0 -> 114 bytes .../common/japanese/board/img/--arrow.gif | Bin 0 -> 73 bytes .../common/japanese/board/img/-arrow.gif | Bin 0 -> 63 bytes .../common/japanese/board/img/admin.gif | Bin 0 -> 153 bytes .../common/japanese/board/img/arrow--.gif | Bin 0 -> 71 bytes .../common/japanese/board/img/arrow-.gif | Bin 0 -> 63 bytes .../common/japanese/board/img/arrow.gif | Bin 0 -> 60 bytes .../common/japanese/board/img/barBg.gif | Bin 0 -> 54 bytes .../common/japanese/board/img/barLeft.gif | Bin 0 -> 62 bytes .../common/japanese/board/img/barRight.gif | Bin 0 -> 62 bytes .../common/japanese/board/img/barTxt1.gif | Bin 0 -> 226 bytes .../common/japanese/board/img/barTxt2.gif | Bin 0 -> 228 bytes .../common/japanese/board/img/barTxt3.gif | Bin 0 -> 279 bytes .../common/japanese/board/img/barTxt4.gif | Bin 0 -> 238 bytes .../common/japanese/board/img/barTxt5.gif | Bin 0 -> 223 bytes .../common/japanese/board/img/barTxt6.gif | Bin 0 -> 367 bytes .../common/japanese/board/img/barTxt7.gif | Bin 0 -> 2471 bytes .../common/japanese/board/img/barTxt8.gif | Bin 0 -> 2244 bytes .../images/common/japanese/board/img/bdr1.gif | Bin 0 -> 57 bytes .../images/common/japanese/board/img/bdr2.gif | Bin 0 -> 59 bytes .../images/common/japanese/board/img/bdr3.gif | Bin 0 -> 57 bytes .../images/common/japanese/board/img/bdr4.gif | Bin 0 -> 59 bytes .../japanese/board/img/boardTxtNotice.gif | Bin 0 -> 10817 bytes .../images/common/japanese/board/img/cnr1.gif | Bin 0 -> 79 bytes .../images/common/japanese/board/img/cnr2.gif | Bin 0 -> 79 bytes .../images/common/japanese/board/img/cnr3.gif | Bin 0 -> 79 bytes .../images/common/japanese/board/img/cnr4.gif | Bin 0 -> 79 bytes .../images/common/japanese/board/img/del.gif | Bin 0 -> 160 bytes .../common/japanese/board/img/disk1.gif | Bin 0 -> 114 bytes .../images/common/japanese/board/img/doc.gif | Bin 0 -> 117 bytes .../images/common/japanese/board/img/dot.gif | Bin 0 -> 49 bytes .../images/common/japanese/board/img/edit.gif | Bin 0 -> 159 bytes .../images/common/japanese/board/img/end.gif | Bin 0 -> 186 bytes .../japanese/board/img/footer_reply.gif | Bin 0 -> 225 bytes .../japanese/board/img/footer_submit.gif | Bin 0 -> 106 bytes .../common/japanese/board/img/grayDate.gif | Bin 0 -> 648 bytes .../common/japanese/board/img/grayHit.gif | Bin 0 -> 786 bytes .../common/japanese/board/img/grayName.gif | Bin 0 -> 824 bytes .../common/japanese/board/img/grayNo.gif | Bin 0 -> 763 bytes .../common/japanese/board/img/graySubject.gif | Bin 0 -> 1187 bytes .../common/japanese/board/img/h_date.gif | Bin 0 -> 87 bytes .../common/japanese/board/img/h_hit.gif | Bin 0 -> 84 bytes .../common/japanese/board/img/h_memo.gif | Bin 0 -> 88 bytes .../common/japanese/board/img/h_name.gif | Bin 0 -> 85 bytes .../common/japanese/board/img/h_next.gif | Bin 0 -> 121 bytes .../images/common/japanese/board/img/h_no.gif | Bin 0 -> 86 bytes .../common/japanese/board/img/h_prev.gif | Bin 0 -> 121 bytes .../common/japanese/board/img/h_reply.gif | Bin 0 -> 75 bytes .../common/japanese/board/img/h_subject.gif | Bin 0 -> 86 bytes .../images/common/japanese/board/img/home.gif | Bin 0 -> 491 bytes .../images/common/japanese/board/img/hwp.gif | Bin 0 -> 176 bytes .../common/japanese/board/img/iconBack.gif | Bin 0 -> 1851 bytes .../common/japanese/board/img/iconDel.gif | Bin 0 -> 1821 bytes .../common/japanese/board/img/iconEdit.gif | Bin 0 -> 1822 bytes .../common/japanese/board/img/iconEnd.gif | Bin 0 -> 183 bytes .../common/japanese/board/img/iconFirst.gif | Bin 0 -> 184 bytes .../common/japanese/board/img/iconList.gif | Bin 0 -> 1839 bytes .../common/japanese/board/img/iconNext.gif | Bin 0 -> 180 bytes .../common/japanese/board/img/iconPrev.gif | Bin 0 -> 180 bytes .../common/japanese/board/img/iconReply.gif | Bin 0 -> 1814 bytes .../common/japanese/board/img/iconSave.gif | Bin 0 -> 1803 bytes .../common/japanese/board/img/iconWrite.gif | Bin 0 -> 1809 bytes .../common/japanese/board/img/icon_back.png | Bin 0 -> 1450 bytes .../common/japanese/board/img/icon_close.gif | Bin 0 -> 334 bytes .../common/japanese/board/img/icon_close.jpg | Bin 0 -> 605 bytes .../common/japanese/board/img/icon_del.png | Bin 0 -> 1524 bytes .../common/japanese/board/img/icon_done.png | Bin 0 -> 1446 bytes .../common/japanese/board/img/icon_list.png | Bin 0 -> 1218 bytes .../common/japanese/board/img/icon_modify.png | Bin 0 -> 1750 bytes .../common/japanese/board/img/icon_reply.png | Bin 0 -> 1450 bytes .../common/japanese/board/img/icon_save.png | Bin 0 -> 1446 bytes .../common/japanese/board/img/icon_write.png | Bin 0 -> 1552 bytes .../images/common/japanese/board/img/jpg.gif | Bin 0 -> 120 bytes .../images/common/japanese/board/img/list.gif | Bin 0 -> 154 bytes .../common/japanese/board/img/login_01.gif | Bin 0 -> 3506 bytes .../common/japanese/board/img/login_02.gif | Bin 0 -> 176 bytes .../japanese/board/img/login_03-over.gif | Bin 0 -> 394 bytes .../common/japanese/board/img/login_03.gif | Bin 0 -> 114 bytes .../common/japanese/board/img/login_04.gif | Bin 0 -> 1249 bytes .../common/japanese/board/img/login_05.gif | Bin 0 -> 202 bytes .../common/japanese/board/img/login_06.gif | Bin 0 -> 203 bytes .../japanese/board/img/login_07-over.gif | Bin 0 -> 353 bytes .../common/japanese/board/img/login_07.gif | Bin 0 -> 238 bytes .../common/japanese/board/img/login_08.gif | Bin 0 -> 1327 bytes .../common/japanese/board/img/login_09.gif | Bin 0 -> 202 bytes .../common/japanese/board/img/logout.gif | Bin 0 -> 157 bytes .../images/common/japanese/board/img/mail.gif | Bin 0 -> 97 bytes .../common/japanese/board/img/mail_top2.gif | Bin 0 -> 17031 bytes .../common/japanese/board/img/n_end.gif | Bin 0 -> 121 bytes .../common/japanese/board/img/n_next.gif | Bin 0 -> 108 bytes .../common/japanese/board/img/n_prev.gif | Bin 0 -> 112 bytes .../common/japanese/board/img/n_top.gif | Bin 0 -> 126 bytes .../images/common/japanese/board/img/next.gif | Bin 0 -> 118 bytes .../common/japanese/board/img/noImage.gif | Bin 0 -> 220 bytes .../common/japanese/board/img/notice.gif | Bin 0 -> 134 bytes .../images/common/japanese/board/img/off.gif | Bin 0 -> 118 bytes .../images/common/japanese/board/img/on.gif | Bin 0 -> 327 bytes .../common/japanese/board/img/paper.gif | Bin 0 -> 94 bytes .../images/common/japanese/board/img/pdf.gif | Bin 0 -> 1045 bytes .../common/japanese/board/img/photoBar.gif | Bin 0 -> 821 bytes .../common/japanese/board/img/photoBody.gif | Bin 0 -> 281 bytes .../common/japanese/board/img/photoShadow.gif | Bin 0 -> 268 bytes .../common/japanese/board/img/photoTop.gif | Bin 0 -> 1537 bytes .../common/japanese/board/img/photoUnder.gif | Bin 0 -> 1209 bytes .../common/japanese/board/img/point.gif | Bin 0 -> 60 bytes .../images/common/japanese/board/img/ppt.gif | Bin 0 -> 105 bytes .../images/common/japanese/board/img/prev.gif | Bin 0 -> 121 bytes .../common/japanese/board/img/reply.gif | Bin 0 -> 166 bytes .../common/japanese/board/img/reply2.gif | Bin 0 -> 77 bytes .../common/japanese/board/img/reset.gif | Bin 0 -> 2322 bytes .../common/japanese/board/img/search.gif | Bin 0 -> 106 bytes .../common/japanese/board/img/submit.gif | Bin 0 -> 2311 bytes .../common/japanese/board/img/t_down.gif | Bin 0 -> 125 bytes .../common/japanese/board/img/t_edit.gif | Bin 0 -> 112 bytes .../common/japanese/board/img/t_email.gif | Bin 0 -> 101 bytes .../common/japanese/board/img/t_html.gif | Bin 0 -> 157 bytes .../common/japanese/board/img/t_memo.gif | Bin 0 -> 102 bytes .../common/japanese/board/img/t_name.gif | Bin 0 -> 112 bytes .../common/japanese/board/img/t_password.gif | Bin 0 -> 120 bytes .../common/japanese/board/img/t_reply.gif | Bin 0 -> 119 bytes .../common/japanese/board/img/t_subject.gif | Bin 0 -> 103 bytes .../common/japanese/board/img/t_tag.gif | Bin 0 -> 120 bytes .../common/japanese/board/img/t_text.gif | Bin 0 -> 103 bytes .../common/japanese/board/img/t_write.gif | Bin 0 -> 104 bytes .../images/common/japanese/board/img/top.gif | Bin 0 -> 141 bytes .../common/japanese/board/img/write.gif | Bin 0 -> 148 bytes .../images/common/japanese/board/img/xls.gif | Bin 0 -> 103 bytes public/images/common/japanese/box_1.gif | Bin 0 -> 56 bytes public/images/common/japanese/box_2.gif | Bin 0 -> 56 bytes public/images/common/japanese/box_21.gif | Bin 0 -> 45 bytes public/images/common/japanese/box_22.gif | Bin 0 -> 45 bytes public/images/common/japanese/box_23.gif | Bin 0 -> 45 bytes public/images/common/japanese/box_24.gif | Bin 0 -> 45 bytes public/images/common/japanese/box_3.gif | Bin 0 -> 56 bytes public/images/common/japanese/box_4.gif | Bin 0 -> 56 bytes .../common/japanese/btn_introduce_1.png | Bin 0 -> 16893 bytes .../common/japanese/btn_introduce_1_over.png | Bin 0 -> 16451 bytes .../common/japanese/btn_introduce_2.png | Bin 0 -> 16769 bytes .../common/japanese/btn_introduce_2_over.png | Bin 0 -> 16353 bytes .../common/japanese/btn_introduce_3.png | Bin 0 -> 17086 bytes .../common/japanese/btn_introduce_3_over.png | Bin 0 -> 16624 bytes .../common/japanese/btn_introduce_bg.png | Bin 0 -> 205 bytes public/images/common/japanese/btn_login.png | Bin 0 -> 23014 bytes public/images/common/japanese/btn_search.gif | Bin 0 -> 742 bytes public/images/common/japanese/btn_waf_1.png | Bin 0 -> 3161 bytes .../images/common/japanese/btn_waf_1_over.png | Bin 0 -> 2926 bytes public/images/common/japanese/btn_waf_2.png | Bin 0 -> 3457 bytes .../images/common/japanese/btn_waf_2_over.png | Bin 0 -> 3538 bytes public/images/common/japanese/btn_waf_3.png | Bin 0 -> 3080 bytes .../images/common/japanese/btn_waf_3_over.png | Bin 0 -> 2945 bytes public/images/common/japanese/btn_waf_4.png | Bin 0 -> 2962 bytes .../images/common/japanese/btn_waf_4_over.png | Bin 0 -> 2898 bytes public/images/common/japanese/btn_waf_5.png | Bin 0 -> 3411 bytes .../images/common/japanese/btn_waf_5_over.png | Bin 0 -> 3240 bytes public/images/common/japanese/buttonBlack.gif | Bin 0 -> 4371 bytes public/images/common/japanese/buttonBlue.gif | Bin 0 -> 3416 bytes public/images/common/japanese/buttonGreen.gif | Bin 0 -> 3708 bytes public/images/common/japanese/buttonRed.gif | Bin 0 -> 4753 bytes public/images/common/japanese/common | 1 + public/images/common/japanese/content/10.gif | Bin 0 -> 189700 bytes public/images/common/japanese/content/10.png | Bin 0 -> 123610 bytes .../images/common/japanese/content/11-1.png | Bin 0 -> 28831 bytes public/images/common/japanese/content/11.png | Bin 0 -> 89631 bytes public/images/common/japanese/content/12.png | Bin 0 -> 73553 bytes .../images/common/japanese/content/13-1.png | Bin 0 -> 56668 bytes public/images/common/japanese/content/13.png | Bin 0 -> 65750 bytes public/images/common/japanese/content/14.png | Bin 0 -> 69039 bytes public/images/common/japanese/content/15.png | Bin 0 -> 46297 bytes public/images/common/japanese/content/16.jpg | Bin 0 -> 76556 bytes public/images/common/japanese/content/16.png | Bin 0 -> 104498 bytes public/images/common/japanese/content/17.png | Bin 0 -> 60186 bytes public/images/common/japanese/content/18.png | Bin 0 -> 53323 bytes public/images/common/japanese/content/19.png | Bin 0 -> 42575 bytes public/images/common/japanese/content/20.png | Bin 0 -> 81501 bytes .../images/common/japanese/content/22-1.jpg | Bin 0 -> 42028 bytes public/images/common/japanese/content/22.png | Bin 0 -> 55076 bytes public/images/common/japanese/content/23.jpg | Bin 0 -> 57614 bytes public/images/common/japanese/content/23.png | Bin 0 -> 69608 bytes public/images/common/japanese/content/3.png | Bin 0 -> 149994 bytes public/images/common/japanese/content/4-1.png | Bin 0 -> 199155 bytes public/images/common/japanese/content/4-2.png | Bin 0 -> 117457 bytes public/images/common/japanese/content/4.png | Bin 0 -> 73169 bytes public/images/common/japanese/content/50.png | Bin 0 -> 24216 bytes public/images/common/japanese/content/51.png | Bin 0 -> 26710 bytes public/images/common/japanese/content/52.png | Bin 0 -> 24866 bytes public/images/common/japanese/content/53.png | Bin 0 -> 25529 bytes public/images/common/japanese/content/54.png | Bin 0 -> 25152 bytes public/images/common/japanese/content/55.png | Bin 0 -> 26914 bytes public/images/common/japanese/content/56.png | Bin 0 -> 27702 bytes public/images/common/japanese/content/57.png | Bin 0 -> 28029 bytes public/images/common/japanese/content/58.png | Bin 0 -> 24906 bytes public/images/common/japanese/content/59.png | Bin 0 -> 29004 bytes public/images/common/japanese/content/60.png | Bin 0 -> 24956 bytes public/images/common/japanese/content/61.png | Bin 0 -> 22936 bytes public/images/common/japanese/content/8.png | Bin 0 -> 30262 bytes public/images/common/japanese/content/9.png | Bin 0 -> 113628 bytes .../japanese/content/btn_introduce_1.png | Bin 0 -> 1695 bytes .../japanese/content/btn_introduce_1_over.png | Bin 0 -> 1449 bytes .../japanese/content/btn_introduce_2.png | Bin 0 -> 1772 bytes .../japanese/content/btn_introduce_2_over.png | Bin 0 -> 1545 bytes .../japanese/content/btn_introduce_3.png | Bin 0 -> 1533 bytes .../japanese/content/btn_introduce_3_over.png | Bin 0 -> 1216 bytes .../japanese/content/btn_introduce_bg.png | Bin 0 -> 205 bytes public/images/common/japanese/content/cs.png | Bin 0 -> 51801 bytes .../images/common/japanese/content/ddos.png | Bin 0 -> 299601 bytes .../images/common/japanese/customervoice.png | Bin 0 -> 140394 bytes public/images/common/japanese/disk1.gif | Bin 0 -> 114 bytes public/images/common/japanese/dot_bold.gif | Bin 0 -> 43 bytes public/images/common/japanese/dot_bronze.gif | Bin 0 -> 43 bytes public/images/common/japanese/dot_dot.gif | Bin 0 -> 44 bytes public/images/common/japanese/dot_e.gif | Bin 0 -> 43 bytes public/images/common/japanese/dot_g.gif | Bin 0 -> 43 bytes public/images/common/japanese/dot_gold.gif | Bin 0 -> 43 bytes public/images/common/japanese/dot_h.gif | Bin 0 -> 43 bytes public/images/common/japanese/dot_m.gif | Bin 0 -> 43 bytes public/images/common/japanese/dot_silver.gif | Bin 0 -> 43 bytes public/images/common/japanese/dot_u.gif | Bin 0 -> 43 bytes public/images/common/japanese/iconBack.gif | Bin 0 -> 1851 bytes public/images/common/japanese/iconDel.gif | Bin 0 -> 1821 bytes public/images/common/japanese/iconEdit.gif | Bin 0 -> 1822 bytes public/images/common/japanese/iconEnd.gif | Bin 0 -> 183 bytes public/images/common/japanese/iconFirst.gif | Bin 0 -> 184 bytes public/images/common/japanese/iconList.gif | Bin 0 -> 1839 bytes public/images/common/japanese/iconNext.gif | Bin 0 -> 180 bytes public/images/common/japanese/iconPrev.gif | Bin 0 -> 180 bytes public/images/common/japanese/iconReply.gif | Bin 0 -> 1814 bytes public/images/common/japanese/iconSave.gif | Bin 0 -> 1803 bytes public/images/common/japanese/iconWrite.gif | Bin 0 -> 1809 bytes public/images/common/japanese/icon_pdf.gif | Bin 0 -> 1546 bytes .../common/japanese/idcjp_server_us.png | Bin 0 -> 67096 bytes .../images/common/japanese/left_banner_1.png | Bin 0 -> 40683 bytes .../images/common/japanese/left_banner_2.png | Bin 0 -> 42697 bytes .../common/japanese/left_banner_2.png.130808 | Bin 0 -> 24658 bytes .../japanese/left_banner_2.png_old20160417 | Bin 0 -> 24803 bytes .../common/japanese/left_banner_2_old.png | Bin 0 -> 23719 bytes .../images/common/japanese/left_banner_3.png | Bin 0 -> 23646 bytes .../japanese/left_menu_addition_1-over.png | Bin 0 -> 19191 bytes .../common/japanese/left_menu_addition_1.png | Bin 0 -> 18738 bytes .../japanese/left_menu_addition_2-over.png | Bin 0 -> 19009 bytes .../common/japanese/left_menu_addition_2.png | Bin 0 -> 18948 bytes .../japanese/left_menu_addition_3-over.png | Bin 0 -> 18981 bytes .../common/japanese/left_menu_addition_3.png | Bin 0 -> 18523 bytes .../japanese/left_menu_addition_4-over.png | Bin 0 -> 19340 bytes .../common/japanese/left_menu_addition_4.png | Bin 0 -> 18995 bytes .../japanese/left_menu_addition_5-over.png | Bin 0 -> 16409 bytes .../common/japanese/left_menu_addition_5.png | Bin 0 -> 15873 bytes .../images/common/japanese/left_menu_bg.png | Bin 0 -> 161 bytes .../common/japanese/left_menu_bottom.png | Bin 0 -> 3145 bytes .../japanese/left_menu_colacation_1-over.png | Bin 0 -> 18888 bytes .../japanese/left_menu_colacation_1.png | Bin 0 -> 15987 bytes .../japanese/left_menu_colacation_2-over.png | Bin 0 -> 19362 bytes .../japanese/left_menu_colacation_2.png | Bin 0 -> 19116 bytes .../japanese/left_menu_colacation_3-over.png | Bin 0 -> 19223 bytes .../japanese/left_menu_colacation_3.png | Bin 0 -> 18979 bytes .../japanese/left_menu_customer_1-over.png | Bin 0 -> 18665 bytes .../common/japanese/left_menu_customer_1.png | Bin 0 -> 18510 bytes .../japanese/left_menu_customer_2-over.png | Bin 0 -> 18949 bytes .../common/japanese/left_menu_customer_2.png | Bin 0 -> 18802 bytes .../japanese/left_menu_customer_3-over.png | Bin 0 -> 21094 bytes .../common/japanese/left_menu_customer_3.png | Bin 0 -> 18533 bytes .../japanese/left_menu_customer_4-over.png | Bin 0 -> 20457 bytes .../common/japanese/left_menu_customer_4.png | Bin 0 -> 20374 bytes .../japanese/left_menu_customer_5-over.png | Bin 0 -> 20384 bytes .../common/japanese/left_menu_customer_5.png | Bin 0 -> 20325 bytes .../japanese/left_menu_customer_6-over.png | Bin 0 -> 21094 bytes .../common/japanese/left_menu_customer_6.png | Bin 0 -> 18533 bytes .../japanese/left_menu_customer_7-over.png | Bin 0 -> 18784 bytes .../common/japanese/left_menu_customer_7.png | Bin 0 -> 18565 bytes .../japanese/left_menu_hosting_1-over.png | Bin 0 -> 18901 bytes .../common/japanese/left_menu_hosting_1.png | Bin 0 -> 18706 bytes .../japanese/left_menu_hosting_2-over.png | Bin 0 -> 19363 bytes .../common/japanese/left_menu_hosting_2.png | Bin 0 -> 19116 bytes .../japanese/left_menu_hosting_3-over.png | Bin 0 -> 19208 bytes .../common/japanese/left_menu_hosting_3.png | Bin 0 -> 18923 bytes .../left_menu_independence_1-over.png | Bin 0 -> 18894 bytes .../japanese/left_menu_independence_1.png | Bin 0 -> 16095 bytes .../left_menu_independence_2-over.png | Bin 0 -> 19055 bytes .../japanese/left_menu_independence_2.png | Bin 0 -> 16125 bytes .../left_menu_independence_3-over.png | Bin 0 -> 19007 bytes .../japanese/left_menu_independence_3.png | Bin 0 -> 16226 bytes .../japanese/left_menu_independence_4-ov.png | Bin 0 -> 17210 bytes .../left_menu_independence_4-over.png | Bin 0 -> 19930 bytes .../japanese/left_menu_independence_4.png | Bin 0 -> 16620 bytes .../japanese/left_menu_introduce_1-over.png | Bin 0 -> 18594 bytes .../common/japanese/left_menu_introduce_1.png | Bin 0 -> 18433 bytes .../japanese/left_menu_introduce_2-over.png | Bin 0 -> 19315 bytes .../common/japanese/left_menu_introduce_2.png | Bin 0 -> 18958 bytes .../japanese/left_menu_introduce_3-over.png | Bin 0 -> 18799 bytes .../common/japanese/left_menu_introduce_3.png | Bin 0 -> 18517 bytes .../japanese/left_menu_introduce_4-over.png | Bin 0 -> 19603 bytes .../common/japanese/left_menu_introduce_4.png | Bin 0 -> 19433 bytes .../japanese/left_menu_introduce_5-over.png | Bin 0 -> 18953 bytes .../common/japanese/left_menu_introduce_5.png | Bin 0 -> 18580 bytes .../japanese/left_menu_secure_1-.over.png | Bin 0 -> 16288 bytes .../japanese/left_menu_secure_1-over.png | Bin 0 -> 16288 bytes .../common/japanese/left_menu_secure_1.png | Bin 0 -> 16106 bytes .../japanese/left_menu_secure_2-over.png | Bin 0 -> 17094 bytes .../japanese/left_menu_secure_2.-over.png | Bin 0 -> 17100 bytes .../common/japanese/left_menu_secure_2.png | Bin 0 -> 16528 bytes .../japanese/left_menu_secure_3-over.png | Bin 0 -> 17389 bytes .../common/japanese/left_menu_secure_3.png | Bin 0 -> 17018 bytes .../common/japanese/left_menu_vpn_1-over.png | Bin 0 -> 17204 bytes .../common/japanese/left_menu_vpn_1.png | Bin 0 -> 16709 bytes .../common/japanese/left_menu_vpn_2-over.png | Bin 0 -> 19894 bytes .../common/japanese/left_menu_vpn_2.png | Bin 0 -> 18820 bytes public/images/common/japanese/left_top.png | Bin 0 -> 11817 bytes .../common/japanese/left_top_addition.png | Bin 0 -> 26788 bytes .../common/japanese/left_top_colacation.png | Bin 0 -> 26754 bytes .../common/japanese/left_top_customer.png | Bin 0 -> 27147 bytes .../common/japanese/left_top_hosting.png | Bin 0 -> 27450 bytes .../common/japanese/left_top_independence.png | Bin 0 -> 24398 bytes .../common/japanese/left_top_introduce.png | Bin 0 -> 11673 bytes .../common/japanese/left_top_secure.png | Bin 0 -> 27338 bytes .../images/common/japanese/left_top_vpn.png | Bin 0 -> 26898 bytes public/images/common/japanese/logo.png | Bin 0 -> 15752 bytes public/images/common/japanese/logo_gray.png | Bin 0 -> 5219 bytes public/images/common/japanese/logo_side.png | Bin 0 -> 20428 bytes .../images/common/japanese/main_banner_1.png | Bin 0 -> 37003 bytes .../images/common/japanese/main_banner_2.png | Bin 0 -> 42697 bytes .../japanese/main_banner_2.png_old20160417 | Bin 0 -> 36835 bytes .../common/japanese/main_banner_2_old.png | Bin 0 -> 20350 bytes .../images/common/japanese/main_banner_3.png | Bin 0 -> 9726 bytes .../images/common/japanese/main_banner_4.png | Bin 0 -> 7981 bytes .../images/common/japanese/main_banner_5.png | Bin 0 -> 9683 bytes .../images/common/japanese/main_banner_6.png | Bin 0 -> 8808 bytes .../common/japanese/main_cont_antivirus.jpg | Bin 0 -> 84734 bytes .../common/japanese/main_cont_backup_1.png | Bin 0 -> 113604 bytes .../common/japanese/main_cont_bypass_1.png | Bin 0 -> 81445 bytes .../japanese/main_cont_colocation_1.png | Bin 0 -> 175832 bytes .../common/japanese/main_cont_domain_1.png | Bin 0 -> 68344 bytes .../common/japanese/main_cont_firewall_1.png | Bin 0 -> 73474 bytes .../common/japanese/main_cont_fireweb.jpg | Bin 0 -> 112574 bytes .../common/japanese/main_cont_fowarding.jpg | Bin 0 -> 42028 bytes .../common/japanese/main_cont_hosting_1.png | Bin 0 -> 165356 bytes .../common/japanese/main_cont_hosting_2.png | Bin 0 -> 155756 bytes .../common/japanese/main_cont_hosting_2_1.png | Bin 0 -> 44430 bytes .../common/japanese/main_cont_hosting_2_2.png | Bin 0 -> 63840 bytes .../common/japanese/main_cont_hosting_3.png | Bin 0 -> 75508 bytes .../common/japanese/main_cont_hosting_3_1.png | Bin 0 -> 48817 bytes .../japanese/main_cont_hosting_3_1_160302.png | Bin 0 -> 164468 bytes .../common/japanese/main_cont_hosting_3_2.png | Bin 0 -> 54149 bytes .../japanese/main_cont_independence4.png | Bin 0 -> 102598 bytes .../japanese/main_cont_independence_1.png | Bin 0 -> 99921 bytes .../japanese/main_cont_independence_2.png | Bin 0 -> 56668 bytes .../japanese/main_cont_independence_3.png | Bin 0 -> 105651 bytes .../japanese/main_cont_independence_4.png | Bin 0 -> 103232 bytes .../common/japanese/main_cont_introduce_1.png | Bin 0 -> 180925 bytes .../common/japanese/main_cont_introduce_2.png | Bin 0 -> 130404 bytes .../japanese/main_cont_introduce_2_2.png | Bin 0 -> 279884 bytes .../japanese/main_cont_introduce_2_3.png | Bin 0 -> 206578 bytes .../common/japanese/main_cont_tns_1.png | Bin 0 -> 103343 bytes .../common/japanese/main_cont_vas_1.png | Bin 0 -> 94280 bytes .../common/japanese/main_cont_vas_2.png | Bin 0 -> 61028 bytes .../common/japanese/main_cont_vpn_1.png | Bin 0 -> 87235 bytes .../common/japanese/main_cont_waf_1.png | Bin 0 -> 58223 bytes .../common/japanese/main_cont_waf_2.png | Bin 0 -> 47078 bytes .../common/japanese/main_cont_waf_3.png | Bin 0 -> 64383 bytes .../common/japanese/main_cont_waf_4.png | Bin 0 -> 56073 bytes .../common/japanese/main_cont_waf_5.png | Bin 0 -> 70354 bytes public/images/common/japanese/main_icon_1.png | Bin 0 -> 19266 bytes public/images/common/japanese/main_icon_2.png | Bin 0 -> 19291 bytes public/images/common/japanese/main_icon_3.png | Bin 0 -> 19526 bytes public/images/common/japanese/main_icon_4.png | Bin 0 -> 19521 bytes .../common/japanese/main_icon_cisco.png | Bin 0 -> 1053 bytes .../common/japanese/main_icon_corel.png | Bin 0 -> 1013 bytes .../images/common/japanese/main_icon_dell.png | Bin 0 -> 849 bytes .../images/common/japanese/main_icon_hp.png | Bin 0 -> 979 bytes .../images/common/japanese/main_icon_ibm.png | Bin 0 -> 833 bytes .../common/japanese/main_icon_jstream.png | Bin 0 -> 1431 bytes .../images/common/japanese/main_icon_kddi.png | Bin 0 -> 926 bytes .../images/common/japanese/main_icon_lg.png | Bin 0 -> 1676 bytes .../images/common/japanese/main_icon_ns.png | Bin 0 -> 27852 bytes .../images/common/japanese/main_icon_ntt.png | Bin 0 -> 1262 bytes .../common/japanese/main_icon_partner.png | Bin 0 -> 1483 bytes .../images/common/japanese/main_icon_red.png | Bin 0 -> 784 bytes .../images/common/japanese/main_icon_slim.png | Bin 0 -> 1188 bytes .../common/japanese/main_icon_softbank.png | Bin 0 -> 1434 bytes .../common/japanese/main_icon_yahoobb.png | Bin 0 -> 1960 bytes .../common/japanese/main_icon_yamaha.png | Bin 0 -> 1484 bytes public/images/common/japanese/main_img.png | Bin 0 -> 241297 bytes public/images/common/japanese/main_img_3.png | Bin 0 -> 245675 bytes .../common/japanese/main_img_addition.png | Bin 0 -> 170405 bytes .../common/japanese/main_img_colacation.png | Bin 0 -> 170405 bytes .../common/japanese/main_img_customer.png | Bin 0 -> 170405 bytes .../common/japanese/main_img_hosting.png | Bin 0 -> 170405 bytes .../common/japanese/main_img_independence.png | Bin 0 -> 170405 bytes .../common/japanese/main_img_introduce.png | Bin 0 -> 170405 bytes .../common/japanese/main_img_secure.png | Bin 0 -> 170405 bytes .../images/common/japanese/main_img_vpn.png | Bin 0 -> 170405 bytes .../common/japanese/main_link_bookmark.png | Bin 0 -> 15840 bytes .../common/japanese/main_link_contact.png | Bin 0 -> 679 bytes .../images/common/japanese/main_link_home.png | Bin 0 -> 437 bytes .../common/japanese/main_link_japan.png | Bin 0 -> 957 bytes .../common/japanese/main_link_korea.png | Bin 0 -> 1166 bytes .../common/japanese/main_tab_1-over.png | Bin 0 -> 17385 bytes public/images/common/japanese/main_tab_1.png | Bin 0 -> 16487 bytes .../common/japanese/main_tab_2-over.png | Bin 0 -> 17099 bytes public/images/common/japanese/main_tab_2.png | Bin 0 -> 16563 bytes .../images/common/japanese/main_tab_bar.png | Bin 0 -> 180 bytes .../images/common/japanese/main_tab_link.png | Bin 0 -> 478 bytes public/images/common/japanese/mng_logo.png | Bin 0 -> 17812 bytes public/images/common/japanese/mnu_01-over.png | Bin 0 -> 2419 bytes public/images/common/japanese/mnu_01.png | Bin 0 -> 2460 bytes public/images/common/japanese/mnu_02-over.png | Bin 0 -> 3401 bytes public/images/common/japanese/mnu_02.png | Bin 0 -> 3456 bytes public/images/common/japanese/mnu_03-over.png | Bin 0 -> 3597 bytes public/images/common/japanese/mnu_03.png | Bin 0 -> 3691 bytes public/images/common/japanese/mnu_04-over.png | Bin 0 -> 3039 bytes public/images/common/japanese/mnu_04.png | Bin 0 -> 3098 bytes public/images/common/japanese/mnu_05-over.png | Bin 0 -> 2983 bytes public/images/common/japanese/mnu_05.png | Bin 0 -> 3047 bytes public/images/common/japanese/mnu_06-over.png | Bin 0 -> 3026 bytes public/images/common/japanese/mnu_06.png | Bin 0 -> 3091 bytes public/images/common/japanese/mnu_07-over.png | Bin 0 -> 2771 bytes public/images/common/japanese/mnu_07.png | Bin 0 -> 2812 bytes public/images/common/japanese/mnu_08-over.png | Bin 0 -> 2915 bytes public/images/common/japanese/mnu_08.png | Bin 0 -> 2973 bytes public/images/common/japanese/mnu_09-over.png | Bin 0 -> 3075 bytes public/images/common/japanese/mnu_09.png | Bin 0 -> 3163 bytes .../japanese/old_left_menu_secure_1-over.png | Bin 0 -> 18528 bytes .../japanese/old_left_menu_secure_1.-over.png | Bin 0 -> 18689 bytes .../japanese/old_left_menu_secure_1.png | Bin 0 -> 18529 bytes .../japanese/old_left_menu_secure_2-over.png | Bin 0 -> 18790 bytes .../japanese/old_left_menu_secure_2.-over.png | Bin 0 -> 15959 bytes .../japanese/old_left_menu_secure_2.png | Bin 0 -> 18505 bytes .../japanese/old_page_title_secure_1.png | Bin 0 -> 2334 bytes .../common/japanese/page_title_addition_1.png | Bin 0 -> 2501 bytes .../common/japanese/page_title_addition_2.png | Bin 0 -> 2556 bytes .../common/japanese/page_title_addition_3.png | Bin 0 -> 2229 bytes .../common/japanese/page_title_addition_4.png | Bin 0 -> 3529 bytes .../common/japanese/page_title_addition_5.png | Bin 0 -> 3445 bytes .../japanese/page_title_colacation_1.png | Bin 0 -> 2313 bytes .../japanese/page_title_colacation_2.png | Bin 0 -> 2773 bytes .../japanese/page_title_colacation_3.png | Bin 0 -> 2531 bytes .../common/japanese/page_title_customer_1.png | Bin 0 -> 2870 bytes .../common/japanese/page_title_customer_2.png | Bin 0 -> 2176 bytes .../common/japanese/page_title_customer_3.png | Bin 0 -> 2361 bytes .../common/japanese/page_title_customer_4.png | Bin 0 -> 2259 bytes .../common/japanese/page_title_customer_5.png | Bin 0 -> 2464 bytes .../common/japanese/page_title_customer_6.png | Bin 0 -> 1993 bytes .../common/japanese/page_title_customer_7.png | Bin 0 -> 2388 bytes .../common/japanese/page_title_hosting_1.png | Bin 0 -> 2309 bytes .../common/japanese/page_title_hosting_2.png | Bin 0 -> 2771 bytes .../common/japanese/page_title_hosting_3.png | Bin 0 -> 2504 bytes .../japanese/page_title_independence_1.png | Bin 0 -> 2335 bytes .../japanese/page_title_independence_2.png | Bin 0 -> 2574 bytes .../japanese/page_title_independence_3.png | Bin 0 -> 2568 bytes .../japanese/page_title_independence_4.png | Bin 0 -> 2930 bytes .../japanese/page_title_introduce_1.png | Bin 0 -> 1983 bytes .../japanese/page_title_introduce_2.png | Bin 0 -> 5360 bytes .../japanese/page_title_introduce_3.png | Bin 0 -> 2297 bytes .../japanese/page_title_introduce_4.png | Bin 0 -> 2780 bytes .../common/japanese/page_title_secure_1.png | Bin 0 -> 2744 bytes .../common/japanese/page_title_secure_2.png | Bin 0 -> 2393 bytes .../common/japanese/page_title_secure_3.png | Bin 0 -> 3925 bytes .../common/japanese/page_title_vpn_1.png | Bin 0 -> 2837 bytes .../common/japanese/page_title_vpn_2.png | Bin 0 -> 2796 bytes public/images/common/japanese/popup/idcjp.png | Bin 0 -> 321558 bytes .../common/japanese/popup/idcjp_coupon.png | Bin 0 -> 355471 bytes .../common/japanese/popup/idcjp_server.png | Bin 0 -> 285613 bytes public/images/common/japanese/popup01.png | Bin 0 -> 235123 bytes .../common/japanese/side_left_title.png | Bin 0 -> 230029 bytes .../common/japanese/side_right_title.gif | Bin 0 -> 49122 bytes public/images/common/korean/adminbg.png | Bin 0 -> 147749 bytes .../backup/left_menu_customer_1-over.png | Bin 0 -> 2307 bytes .../korean/backup/left_menu_customer_1.png | Bin 0 -> 2122 bytes .../backup/left_menu_customer_2-over.png | Bin 0 -> 3701 bytes .../korean/backup/left_menu_customer_2.png | Bin 0 -> 3576 bytes .../backup/left_menu_customer_3-over.png | Bin 0 -> 3742 bytes .../korean/backup/left_menu_customer_3.png | Bin 0 -> 3580 bytes .../backup/left_menu_customer_4-over.png | Bin 0 -> 3848 bytes .../korean/backup/left_menu_customer_4.png | Bin 0 -> 3697 bytes .../backup/left_menu_customer_5-over.png | Bin 0 -> 3520 bytes .../korean/backup/left_menu_customer_5.png | Bin 0 -> 3427 bytes .../backup/left_menu_customer_6-over.png | Bin 0 -> 3520 bytes .../korean/backup/left_menu_customer_6.png | Bin 0 -> 3427 bytes .../backup/left_menu_customer_7-over.png | Bin 0 -> 3741 bytes .../korean/backup/left_menu_customer_7.png | Bin 0 -> 3606 bytes public/images/common/korean/bicon1.gif | Bin 0 -> 196 bytes public/images/common/korean/blank.gif | Bin 0 -> 43 bytes public/images/common/korean/blit_diamond.jpg | Bin 0 -> 445 bytes public/images/common/korean/blit_orange.gif | Bin 0 -> 114 bytes .../common/korean/board/img/--arrow.gif | Bin 0 -> 73 bytes .../images/common/korean/board/img/-arrow.gif | Bin 0 -> 63 bytes .../images/common/korean/board/img/admin.gif | Bin 0 -> 153 bytes .../common/korean/board/img/arrow--.gif | Bin 0 -> 71 bytes .../images/common/korean/board/img/arrow-.gif | Bin 0 -> 63 bytes .../images/common/korean/board/img/arrow.gif | Bin 0 -> 60 bytes .../images/common/korean/board/img/barBg.gif | Bin 0 -> 54 bytes .../common/korean/board/img/barLeft.gif | Bin 0 -> 62 bytes .../common/korean/board/img/barRight.gif | Bin 0 -> 62 bytes .../common/korean/board/img/barTxt1.gif | Bin 0 -> 226 bytes .../common/korean/board/img/barTxt2.gif | Bin 0 -> 228 bytes .../common/korean/board/img/barTxt3.gif | Bin 0 -> 279 bytes .../common/korean/board/img/barTxt4.gif | Bin 0 -> 238 bytes .../common/korean/board/img/barTxt5.gif | Bin 0 -> 223 bytes .../common/korean/board/img/barTxt6.gif | Bin 0 -> 367 bytes .../common/korean/board/img/barTxt7.gif | Bin 0 -> 2471 bytes .../common/korean/board/img/barTxt8.gif | Bin 0 -> 2244 bytes .../images/common/korean/board/img/bdr1.gif | Bin 0 -> 57 bytes .../images/common/korean/board/img/bdr2.gif | Bin 0 -> 59 bytes .../images/common/korean/board/img/bdr3.gif | Bin 0 -> 57 bytes .../images/common/korean/board/img/bdr4.gif | Bin 0 -> 59 bytes .../korean/board/img/boardTxtNotice.gif | Bin 0 -> 10817 bytes .../images/common/korean/board/img/cnr1.gif | Bin 0 -> 79 bytes .../images/common/korean/board/img/cnr2.gif | Bin 0 -> 79 bytes .../images/common/korean/board/img/cnr3.gif | Bin 0 -> 79 bytes .../images/common/korean/board/img/cnr4.gif | Bin 0 -> 79 bytes public/images/common/korean/board/img/del.gif | Bin 0 -> 160 bytes .../images/common/korean/board/img/disk1.gif | Bin 0 -> 114 bytes public/images/common/korean/board/img/doc.gif | Bin 0 -> 117 bytes public/images/common/korean/board/img/dot.gif | Bin 0 -> 49 bytes .../images/common/korean/board/img/edit.gif | Bin 0 -> 159 bytes public/images/common/korean/board/img/end.gif | Bin 0 -> 186 bytes .../common/korean/board/img/footer_reply.gif | Bin 0 -> 225 bytes .../common/korean/board/img/footer_submit.gif | Bin 0 -> 106 bytes .../common/korean/board/img/grayDate.gif | Bin 0 -> 648 bytes .../common/korean/board/img/grayHit.gif | Bin 0 -> 786 bytes .../common/korean/board/img/grayName.gif | Bin 0 -> 824 bytes .../images/common/korean/board/img/grayNo.gif | Bin 0 -> 763 bytes .../common/korean/board/img/graySubject.gif | Bin 0 -> 1187 bytes .../images/common/korean/board/img/h_date.gif | Bin 0 -> 87 bytes .../images/common/korean/board/img/h_hit.gif | Bin 0 -> 84 bytes .../images/common/korean/board/img/h_memo.gif | Bin 0 -> 88 bytes .../images/common/korean/board/img/h_name.gif | Bin 0 -> 85 bytes .../images/common/korean/board/img/h_next.gif | Bin 0 -> 121 bytes .../images/common/korean/board/img/h_no.gif | Bin 0 -> 86 bytes .../images/common/korean/board/img/h_prev.gif | Bin 0 -> 121 bytes .../common/korean/board/img/h_reply.gif | Bin 0 -> 75 bytes .../common/korean/board/img/h_subject.gif | Bin 0 -> 86 bytes .../images/common/korean/board/img/home.gif | Bin 0 -> 491 bytes public/images/common/korean/board/img/hwp.gif | Bin 0 -> 176 bytes .../common/korean/board/img/iconBack.gif | Bin 0 -> 1851 bytes .../common/korean/board/img/iconDel.gif | Bin 0 -> 1821 bytes .../common/korean/board/img/iconEdit.gif | Bin 0 -> 1822 bytes .../common/korean/board/img/iconEnd.gif | Bin 0 -> 183 bytes .../common/korean/board/img/iconFirst.gif | Bin 0 -> 184 bytes .../common/korean/board/img/iconList.gif | Bin 0 -> 1839 bytes .../common/korean/board/img/iconNext.gif | Bin 0 -> 180 bytes .../common/korean/board/img/iconPrev.gif | Bin 0 -> 180 bytes .../common/korean/board/img/iconReply.gif | Bin 0 -> 1814 bytes .../common/korean/board/img/iconSave.gif | Bin 0 -> 1803 bytes .../common/korean/board/img/iconWrite.gif | Bin 0 -> 1809 bytes .../common/korean/board/img/icon_back.png | Bin 0 -> 1450 bytes .../common/korean/board/img/icon_close.gif | Bin 0 -> 334 bytes .../common/korean/board/img/icon_close.jpg | Bin 0 -> 605 bytes .../common/korean/board/img/icon_del.png | Bin 0 -> 1524 bytes .../common/korean/board/img/icon_done.png | Bin 0 -> 1446 bytes .../common/korean/board/img/icon_list.png | Bin 0 -> 1218 bytes .../common/korean/board/img/icon_modify.png | Bin 0 -> 1750 bytes .../common/korean/board/img/icon_reply.png | Bin 0 -> 1450 bytes .../common/korean/board/img/icon_save.png | Bin 0 -> 1446 bytes .../common/korean/board/img/icon_write.png | Bin 0 -> 1552 bytes public/images/common/korean/board/img/jpg.gif | Bin 0 -> 120 bytes .../images/common/korean/board/img/list.gif | Bin 0 -> 154 bytes .../common/korean/board/img/login_01.gif | Bin 0 -> 3506 bytes .../common/korean/board/img/login_02.gif | Bin 0 -> 176 bytes .../common/korean/board/img/login_03-over.gif | Bin 0 -> 394 bytes .../common/korean/board/img/login_03.gif | Bin 0 -> 114 bytes .../common/korean/board/img/login_04.gif | Bin 0 -> 1249 bytes .../common/korean/board/img/login_05.gif | Bin 0 -> 202 bytes .../common/korean/board/img/login_06.gif | Bin 0 -> 203 bytes .../common/korean/board/img/login_07-over.gif | Bin 0 -> 353 bytes .../common/korean/board/img/login_07.gif | Bin 0 -> 238 bytes .../common/korean/board/img/login_08.gif | Bin 0 -> 1327 bytes .../common/korean/board/img/login_09.gif | Bin 0 -> 202 bytes .../images/common/korean/board/img/logout.gif | Bin 0 -> 157 bytes .../images/common/korean/board/img/mail.gif | Bin 0 -> 97 bytes .../common/korean/board/img/mail_top2.gif | Bin 0 -> 17031 bytes .../images/common/korean/board/img/n_end.gif | Bin 0 -> 121 bytes .../images/common/korean/board/img/n_next.gif | Bin 0 -> 108 bytes .../images/common/korean/board/img/n_prev.gif | Bin 0 -> 112 bytes .../images/common/korean/board/img/n_top.gif | Bin 0 -> 126 bytes .../images/common/korean/board/img/next.gif | Bin 0 -> 118 bytes .../common/korean/board/img/noImage.gif | Bin 0 -> 220 bytes .../images/common/korean/board/img/notice.gif | Bin 0 -> 134 bytes public/images/common/korean/board/img/off.gif | Bin 0 -> 118 bytes public/images/common/korean/board/img/on.gif | Bin 0 -> 327 bytes .../images/common/korean/board/img/paper.gif | Bin 0 -> 94 bytes public/images/common/korean/board/img/pdf.gif | Bin 0 -> 1045 bytes .../common/korean/board/img/photoBar.gif | Bin 0 -> 821 bytes .../common/korean/board/img/photoBody.gif | Bin 0 -> 281 bytes .../common/korean/board/img/photoShadow.gif | Bin 0 -> 268 bytes .../common/korean/board/img/photoTop.gif | Bin 0 -> 1537 bytes .../common/korean/board/img/photoUnder.gif | Bin 0 -> 1209 bytes .../images/common/korean/board/img/point.gif | Bin 0 -> 60 bytes public/images/common/korean/board/img/ppt.gif | Bin 0 -> 105 bytes .../images/common/korean/board/img/prev.gif | Bin 0 -> 121 bytes .../images/common/korean/board/img/reply.gif | Bin 0 -> 166 bytes .../images/common/korean/board/img/reply2.gif | Bin 0 -> 77 bytes .../images/common/korean/board/img/reset.gif | Bin 0 -> 2322 bytes .../images/common/korean/board/img/search.gif | Bin 0 -> 106 bytes .../images/common/korean/board/img/submit.gif | Bin 0 -> 2311 bytes .../images/common/korean/board/img/t_down.gif | Bin 0 -> 125 bytes .../images/common/korean/board/img/t_edit.gif | Bin 0 -> 112 bytes .../common/korean/board/img/t_email.gif | Bin 0 -> 101 bytes .../images/common/korean/board/img/t_html.gif | Bin 0 -> 157 bytes .../images/common/korean/board/img/t_memo.gif | Bin 0 -> 102 bytes .../images/common/korean/board/img/t_name.gif | Bin 0 -> 112 bytes .../common/korean/board/img/t_password.gif | Bin 0 -> 120 bytes .../common/korean/board/img/t_reply.gif | Bin 0 -> 119 bytes .../common/korean/board/img/t_subject.gif | Bin 0 -> 103 bytes .../images/common/korean/board/img/t_tag.gif | Bin 0 -> 120 bytes .../images/common/korean/board/img/t_text.gif | Bin 0 -> 103 bytes .../common/korean/board/img/t_write.gif | Bin 0 -> 104 bytes public/images/common/korean/board/img/top.gif | Bin 0 -> 141 bytes .../images/common/korean/board/img/write.gif | Bin 0 -> 148 bytes public/images/common/korean/board/img/xls.gif | Bin 0 -> 103 bytes public/images/common/korean/box_1.gif | Bin 0 -> 56 bytes public/images/common/korean/box_2.gif | Bin 0 -> 56 bytes public/images/common/korean/box_21.gif | Bin 0 -> 45 bytes public/images/common/korean/box_22.gif | Bin 0 -> 45 bytes public/images/common/korean/box_23.gif | Bin 0 -> 45 bytes public/images/common/korean/box_24.gif | Bin 0 -> 45 bytes public/images/common/korean/box_3.gif | Bin 0 -> 56 bytes public/images/common/korean/box_4.gif | Bin 0 -> 56 bytes .../images/common/korean/btn_introduce_1.png | Bin 0 -> 1695 bytes .../common/korean/btn_introduce_1_over.png | Bin 0 -> 1449 bytes .../images/common/korean/btn_introduce_2.png | Bin 0 -> 1772 bytes .../common/korean/btn_introduce_2_over.png | Bin 0 -> 1545 bytes .../images/common/korean/btn_introduce_3.png | Bin 0 -> 1533 bytes .../common/korean/btn_introduce_3_over.png | Bin 0 -> 1533 bytes .../korean/btn_introduce_3_over_org.png | Bin 0 -> 1216 bytes .../images/common/korean/btn_introduce_bg.png | Bin 0 -> 205 bytes public/images/common/korean/btn_login.png | Bin 0 -> 23014 bytes public/images/common/korean/btn_search.gif | Bin 0 -> 742 bytes public/images/common/korean/btn_waf_1.png | Bin 0 -> 3161 bytes .../images/common/korean/btn_waf_1_over.png | Bin 0 -> 2926 bytes public/images/common/korean/btn_waf_2.png | Bin 0 -> 3457 bytes .../images/common/korean/btn_waf_2_over.png | Bin 0 -> 3538 bytes public/images/common/korean/btn_waf_3.png | Bin 0 -> 3080 bytes .../images/common/korean/btn_waf_3_over.png | Bin 0 -> 2945 bytes public/images/common/korean/btn_waf_4.png | Bin 0 -> 2962 bytes .../images/common/korean/btn_waf_4_over.png | Bin 0 -> 2898 bytes public/images/common/korean/btn_waf_5.png | Bin 0 -> 3411 bytes .../images/common/korean/btn_waf_5_over.png | Bin 0 -> 3240 bytes public/images/common/korean/buttonBlack.gif | Bin 0 -> 4371 bytes public/images/common/korean/buttonBlue.gif | Bin 0 -> 3416 bytes public/images/common/korean/buttonGreen.gif | Bin 0 -> 3708 bytes public/images/common/korean/buttonRed.gif | Bin 0 -> 4753 bytes public/images/common/korean/common | 1 + public/images/common/korean/content/10.gif | Bin 0 -> 189700 bytes public/images/common/korean/content/10.png | Bin 0 -> 123610 bytes public/images/common/korean/content/11-1.png | Bin 0 -> 28831 bytes public/images/common/korean/content/11.png | Bin 0 -> 89631 bytes public/images/common/korean/content/12.png | Bin 0 -> 73553 bytes public/images/common/korean/content/13-1.png | Bin 0 -> 56668 bytes public/images/common/korean/content/13.png | Bin 0 -> 65750 bytes public/images/common/korean/content/14.png | Bin 0 -> 69039 bytes public/images/common/korean/content/15.png | Bin 0 -> 46297 bytes public/images/common/korean/content/16.jpg | Bin 0 -> 76556 bytes public/images/common/korean/content/16.png | Bin 0 -> 104498 bytes public/images/common/korean/content/17.png | Bin 0 -> 60186 bytes public/images/common/korean/content/18.png | Bin 0 -> 53323 bytes public/images/common/korean/content/19.png | Bin 0 -> 42575 bytes public/images/common/korean/content/20.png | Bin 0 -> 81501 bytes public/images/common/korean/content/22-1.jpg | Bin 0 -> 42028 bytes public/images/common/korean/content/22.png | Bin 0 -> 55076 bytes public/images/common/korean/content/23.jpg | Bin 0 -> 57614 bytes public/images/common/korean/content/23.png | Bin 0 -> 69608 bytes public/images/common/korean/content/3.png | Bin 0 -> 149994 bytes public/images/common/korean/content/4-1.png | Bin 0 -> 199155 bytes public/images/common/korean/content/4-2.png | Bin 0 -> 117457 bytes public/images/common/korean/content/4.png | Bin 0 -> 73169 bytes public/images/common/korean/content/50.png | Bin 0 -> 20617 bytes public/images/common/korean/content/51.png | Bin 0 -> 21291 bytes public/images/common/korean/content/52.png | Bin 0 -> 19880 bytes public/images/common/korean/content/53.png | Bin 0 -> 20052 bytes public/images/common/korean/content/54.png | Bin 0 -> 19789 bytes public/images/common/korean/content/55.png | Bin 0 -> 20738 bytes public/images/common/korean/content/56.png | Bin 0 -> 20930 bytes public/images/common/korean/content/57.png | Bin 0 -> 22481 bytes public/images/common/korean/content/58.png | Bin 0 -> 20235 bytes public/images/common/korean/content/59.png | Bin 0 -> 21214 bytes public/images/common/korean/content/60.png | Bin 0 -> 19421 bytes public/images/common/korean/content/61.png | Bin 0 -> 22936 bytes public/images/common/korean/content/8.png | Bin 0 -> 30262 bytes public/images/common/korean/content/9.png | Bin 0 -> 113628 bytes .../common/korean/content/btn_introduce_1.png | Bin 0 -> 1695 bytes .../korean/content/btn_introduce_1_over.png | Bin 0 -> 1449 bytes .../common/korean/content/btn_introduce_2.png | Bin 0 -> 1772 bytes .../korean/content/btn_introduce_2_over.png | Bin 0 -> 1545 bytes .../common/korean/content/btn_introduce_3.png | Bin 0 -> 1533 bytes .../korean/content/btn_introduce_3_over.png | Bin 0 -> 1216 bytes .../korean/content/btn_introduce_bg.png | Bin 0 -> 205 bytes public/images/common/korean/content/cs.png | Bin 0 -> 51801 bytes public/images/common/korean/content/ddos.png | Bin 0 -> 299601 bytes public/images/common/korean/customervoice.png | Bin 0 -> 140394 bytes public/images/common/korean/disk1.gif | Bin 0 -> 114 bytes public/images/common/korean/dot_bold.gif | Bin 0 -> 43 bytes public/images/common/korean/dot_bronze.gif | Bin 0 -> 43 bytes public/images/common/korean/dot_dot.gif | Bin 0 -> 44 bytes public/images/common/korean/dot_e.gif | Bin 0 -> 43 bytes public/images/common/korean/dot_g.gif | Bin 0 -> 43 bytes public/images/common/korean/dot_gold.gif | Bin 0 -> 43 bytes public/images/common/korean/dot_h.gif | Bin 0 -> 43 bytes public/images/common/korean/dot_m.gif | Bin 0 -> 43 bytes public/images/common/korean/dot_silver.gif | Bin 0 -> 43 bytes public/images/common/korean/dot_u.gif | Bin 0 -> 43 bytes public/images/common/korean/iconBack.gif | Bin 0 -> 1851 bytes public/images/common/korean/iconDel.gif | Bin 0 -> 1821 bytes public/images/common/korean/iconEdit.gif | Bin 0 -> 1822 bytes public/images/common/korean/iconEnd.gif | Bin 0 -> 183 bytes public/images/common/korean/iconFirst.gif | Bin 0 -> 184 bytes public/images/common/korean/iconList.gif | Bin 0 -> 1839 bytes public/images/common/korean/iconNext.gif | Bin 0 -> 180 bytes public/images/common/korean/iconPrev.gif | Bin 0 -> 180 bytes public/images/common/korean/iconReply.gif | Bin 0 -> 1814 bytes public/images/common/korean/iconSave.gif | Bin 0 -> 1803 bytes public/images/common/korean/iconWrite.gif | Bin 0 -> 1809 bytes public/images/common/korean/icon_pdf.gif | Bin 0 -> 1546 bytes .../images/common/korean/idcjp_server_us.png | Bin 0 -> 64432 bytes public/images/common/korean/left_banner_1.png | Bin 0 -> 13672 bytes public/images/common/korean/left_banner_2.png | Bin 0 -> 31317 bytes .../common/korean/left_banner_2.png.130808 | Bin 0 -> 24658 bytes .../korean/left_banner_2.png_old20160417 | Bin 0 -> 24803 bytes .../common/korean/left_banner_2_old.png | Bin 0 -> 23719 bytes public/images/common/korean/left_banner_3.png | Bin 0 -> 4325 bytes .../korean/left_menu_addition_1-over.png | Bin 0 -> 3862 bytes .../common/korean/left_menu_addition_1.png | Bin 0 -> 3729 bytes .../korean/left_menu_addition_2-over.png | Bin 0 -> 3900 bytes .../common/korean/left_menu_addition_2.png | Bin 0 -> 3752 bytes .../korean/left_menu_addition_3-over.png | Bin 0 -> 3646 bytes .../common/korean/left_menu_addition_3.png | Bin 0 -> 3542 bytes .../korean/left_menu_addition_4-over.png | Bin 0 -> 3908 bytes .../common/korean/left_menu_addition_4.png | Bin 0 -> 3774 bytes .../korean/left_menu_addition_5-over.png | Bin 0 -> 907 bytes .../common/korean/left_menu_addition_5.png | Bin 0 -> 887 bytes public/images/common/korean/left_menu_bg.png | Bin 0 -> 161 bytes .../images/common/korean/left_menu_bottom.png | Bin 0 -> 3145 bytes .../korean/left_menu_colacation_1-over.png | Bin 0 -> 3688 bytes .../common/korean/left_menu_colacation_1.png | Bin 0 -> 835 bytes .../korean/left_menu_colacation_2-over.png | Bin 0 -> 4066 bytes .../common/korean/left_menu_colacation_2.png | Bin 0 -> 3904 bytes .../korean/left_menu_colacation_3-over.png | Bin 0 -> 3875 bytes .../common/korean/left_menu_colacation_3.png | Bin 0 -> 3754 bytes .../korean/left_menu_customer_1-over.png | Bin 0 -> 2307 bytes .../common/korean/left_menu_customer_1.png | Bin 0 -> 2122 bytes .../korean/left_menu_customer_2-over.png | Bin 0 -> 3701 bytes .../common/korean/left_menu_customer_2.png | Bin 0 -> 3576 bytes .../korean/left_menu_customer_3-over.png | Bin 0 -> 720 bytes .../common/korean/left_menu_customer_3.png | Bin 0 -> 654 bytes .../korean/left_menu_customer_4-over.png | Bin 0 -> 3848 bytes .../common/korean/left_menu_customer_4.png | Bin 0 -> 3697 bytes .../korean/left_menu_customer_5-over.png | Bin 0 -> 3520 bytes .../common/korean/left_menu_customer_5.png | Bin 0 -> 3427 bytes .../korean/left_menu_customer_6-over.png | Bin 0 -> 3520 bytes .../common/korean/left_menu_customer_6.png | Bin 0 -> 3427 bytes .../korean/left_menu_customer_7-over.png | Bin 0 -> 3741 bytes .../common/korean/left_menu_customer_7.png | Bin 0 -> 3606 bytes .../korean/left_menu_hosting_1-over.png | Bin 0 -> 3688 bytes .../common/korean/left_menu_hosting_1.png | Bin 0 -> 3568 bytes .../korean/left_menu_hosting_2-over.png | Bin 0 -> 4066 bytes .../common/korean/left_menu_hosting_2.png | Bin 0 -> 3904 bytes .../korean/left_menu_hosting_3-over.png | Bin 0 -> 3829 bytes .../common/korean/left_menu_hosting_3.png | Bin 0 -> 3679 bytes .../korean/left_menu_independence_1-over.png | Bin 0 -> 3705 bytes .../korean/left_menu_independence_1.png | Bin 0 -> 812 bytes .../korean/left_menu_independence_2-over.png | Bin 0 -> 3837 bytes .../korean/left_menu_independence_2.png | Bin 0 -> 982 bytes .../korean/left_menu_independence_3-over.png | Bin 0 -> 3782 bytes .../korean/left_menu_independence_3.png | Bin 0 -> 953 bytes .../korean/left_menu_independence_4-ov.png | Bin 0 -> 1509 bytes .../korean/left_menu_independence_4-over.png | Bin 0 -> 4418 bytes .../korean/left_menu_independence_4.png | Bin 0 -> 1277 bytes .../korean/left_menu_introduce_1-over.png | Bin 0 -> 3487 bytes .../common/korean/left_menu_introduce_1.png | Bin 0 -> 3396 bytes .../korean/left_menu_introduce_2-over.png | Bin 0 -> 4038 bytes .../common/korean/left_menu_introduce_2.png | Bin 0 -> 3868 bytes .../korean/left_menu_introduce_3-over.png | Bin 0 -> 3804 bytes .../common/korean/left_menu_introduce_3.png | Bin 0 -> 3658 bytes .../korean/left_menu_introduce_4-over.png | Bin 0 -> 4186 bytes .../common/korean/left_menu_introduce_4.png | Bin 0 -> 3994 bytes .../korean/left_menu_introduce_5-over.png | Bin 0 -> 3631 bytes .../common/korean/left_menu_introduce_5.png | Bin 0 -> 3502 bytes .../korean/left_menu_secure_1-.over.png | Bin 0 -> 1074 bytes .../common/korean/left_menu_secure_1-over.png | Bin 0 -> 1074 bytes .../common/korean/left_menu_secure_1.png | Bin 0 -> 886 bytes .../common/korean/left_menu_secure_2-over.png | Bin 0 -> 1504 bytes .../korean/left_menu_secure_2.-over.png | Bin 0 -> 1504 bytes .../common/korean/left_menu_secure_2.png | Bin 0 -> 1307 bytes .../common/korean/left_menu_secure_3-over.png | Bin 0 -> 2424 bytes .../common/korean/left_menu_secure_3.png | Bin 0 -> 2292 bytes .../common/korean/left_menu_vpn_1-over.png | Bin 0 -> 1324 bytes .../images/common/korean/left_menu_vpn_1.png | Bin 0 -> 1118 bytes .../common/korean/left_menu_vpn_2-over.png | Bin 0 -> 4134 bytes .../images/common/korean/left_menu_vpn_2.png | Bin 0 -> 3962 bytes public/images/common/korean/left_top.png | Bin 0 -> 11817 bytes .../common/korean/left_top_addition.png | Bin 0 -> 12055 bytes .../common/korean/left_top_colacation.png | Bin 0 -> 12146 bytes .../common/korean/left_top_customer.png | Bin 0 -> 11966 bytes .../images/common/korean/left_top_hosting.png | Bin 0 -> 12191 bytes .../common/korean/left_top_independence.png | Bin 0 -> 9515 bytes .../common/korean/left_top_introduce.png | Bin 0 -> 11673 bytes .../images/common/korean/left_top_secure.png | Bin 0 -> 12108 bytes public/images/common/korean/left_top_vpn.png | Bin 0 -> 12250 bytes public/images/common/korean/logo.png | Bin 0 -> 15752 bytes public/images/common/korean/logo_gray.png | Bin 0 -> 5219 bytes public/images/common/korean/logo_side.png | Bin 0 -> 2964 bytes public/images/common/korean/main_banner_1.png | Bin 0 -> 15171 bytes public/images/common/korean/main_banner_2.png | Bin 0 -> 31317 bytes .../korean/main_banner_2.png_old20160417 | Bin 0 -> 36835 bytes .../common/korean/main_banner_2_old.png | Bin 0 -> 20350 bytes public/images/common/korean/main_banner_3.png | Bin 0 -> 9726 bytes public/images/common/korean/main_banner_4.png | Bin 0 -> 7981 bytes public/images/common/korean/main_banner_5.png | Bin 0 -> 9683 bytes public/images/common/korean/main_banner_6.png | Bin 0 -> 8808 bytes .../common/korean/main_cont_antivirus.jpg | Bin 0 -> 57614 bytes .../common/korean/main_cont_backup_1.png | Bin 0 -> 81501 bytes .../common/korean/main_cont_bypass_1.png | Bin 0 -> 55076 bytes .../common/korean/main_cont_colocation_1.png | Bin 0 -> 123610 bytes .../common/korean/main_cont_domain_1.png | Bin 0 -> 42575 bytes .../common/korean/main_cont_firewall_1.png | Bin 0 -> 46297 bytes .../common/korean/main_cont_fireweb.jpg | Bin 0 -> 76556 bytes .../common/korean/main_cont_fowarding.jpg | Bin 0 -> 42028 bytes .../common/korean/main_cont_hosting_1.png | Bin 0 -> 113628 bytes .../common/korean/main_cont_hosting_2.png | Bin 0 -> 91491 bytes .../common/korean/main_cont_hosting_2_1.png | Bin 0 -> 37305 bytes .../common/korean/main_cont_hosting_2_2.png | Bin 0 -> 63840 bytes .../common/korean/main_cont_hosting_3.png | Bin 0 -> 75508 bytes .../common/korean/main_cont_hosting_3_1.png | Bin 0 -> 48817 bytes .../korean/main_cont_hosting_3_1_160302.png | Bin 0 -> 154484 bytes .../common/korean/main_cont_hosting_3_2.png | Bin 0 -> 49340 bytes .../common/korean/main_cont_independence4.png | Bin 0 -> 102598 bytes .../korean/main_cont_independence_1.png | Bin 0 -> 65750 bytes .../korean/main_cont_independence_2.png | Bin 0 -> 56668 bytes .../korean/main_cont_independence_3.png | Bin 0 -> 73553 bytes .../korean/main_cont_independence_4.png | Bin 0 -> 69039 bytes .../common/korean/main_cont_introduce_1.png | Bin 0 -> 149994 bytes .../common/korean/main_cont_introduce_2.png | Bin 0 -> 73169 bytes .../common/korean/main_cont_introduce_2_2.png | Bin 0 -> 199155 bytes .../common/korean/main_cont_introduce_2_3.png | Bin 0 -> 159286 bytes .../images/common/korean/main_cont_tns_1.png | Bin 0 -> 103343 bytes .../images/common/korean/main_cont_vas_1.png | Bin 0 -> 94280 bytes .../images/common/korean/main_cont_vas_2.png | Bin 0 -> 61028 bytes .../images/common/korean/main_cont_vpn_1.png | Bin 0 -> 60186 bytes .../images/common/korean/main_cont_waf_1.png | Bin 0 -> 58223 bytes .../images/common/korean/main_cont_waf_2.png | Bin 0 -> 47078 bytes .../images/common/korean/main_cont_waf_3.png | Bin 0 -> 64383 bytes .../images/common/korean/main_cont_waf_4.png | Bin 0 -> 56073 bytes .../images/common/korean/main_cont_waf_5.png | Bin 0 -> 70354 bytes public/images/common/korean/main_icon_1.png | Bin 0 -> 3930 bytes public/images/common/korean/main_icon_2.png | Bin 0 -> 3752 bytes public/images/common/korean/main_icon_3.png | Bin 0 -> 4182 bytes public/images/common/korean/main_icon_4.png | Bin 0 -> 4027 bytes .../images/common/korean/main_icon_cisco.png | Bin 0 -> 1053 bytes .../images/common/korean/main_icon_corel.png | Bin 0 -> 1013 bytes .../images/common/korean/main_icon_dell.png | Bin 0 -> 849 bytes public/images/common/korean/main_icon_hp.png | Bin 0 -> 979 bytes public/images/common/korean/main_icon_ibm.png | Bin 0 -> 833 bytes .../common/korean/main_icon_jstream.png | Bin 0 -> 1431 bytes .../images/common/korean/main_icon_kddi.png | Bin 0 -> 926 bytes public/images/common/korean/main_icon_lg.png | Bin 0 -> 1676 bytes public/images/common/korean/main_icon_ns.png | Bin 0 -> 27117 bytes public/images/common/korean/main_icon_ntt.png | Bin 0 -> 1262 bytes .../common/korean/main_icon_partner.png | Bin 0 -> 1483 bytes public/images/common/korean/main_icon_red.png | Bin 0 -> 784 bytes .../images/common/korean/main_icon_slim.png | Bin 0 -> 1188 bytes .../common/korean/main_icon_softbank.png | Bin 0 -> 1434 bytes .../common/korean/main_icon_yahoobb.png | Bin 0 -> 1960 bytes .../images/common/korean/main_icon_yamaha.png | Bin 0 -> 1484 bytes public/images/common/korean/main_img.png | Bin 0 -> 241297 bytes public/images/common/korean/main_img_3.png | Bin 0 -> 245675 bytes .../common/korean/main_img_addition.png | Bin 0 -> 154610 bytes .../common/korean/main_img_colacation.png | Bin 0 -> 154584 bytes .../common/korean/main_img_customer.png | Bin 0 -> 154584 bytes .../images/common/korean/main_img_hosting.png | Bin 0 -> 154584 bytes .../common/korean/main_img_independence.png | Bin 0 -> 154584 bytes .../common/korean/main_img_introduce.png | Bin 0 -> 154610 bytes .../images/common/korean/main_img_secure.png | Bin 0 -> 154415 bytes public/images/common/korean/main_img_vpn.png | Bin 0 -> 154584 bytes .../common/korean/main_link_bookmark.png | Bin 0 -> 633 bytes .../common/korean/main_link_contact.png | Bin 0 -> 679 bytes .../images/common/korean/main_link_home.png | Bin 0 -> 437 bytes .../images/common/korean/main_link_japan.png | Bin 0 -> 957 bytes .../images/common/korean/main_link_korea.png | Bin 0 -> 1166 bytes .../images/common/korean/main_tab_1-over.png | Bin 0 -> 2057 bytes public/images/common/korean/main_tab_1.png | Bin 0 -> 1449 bytes .../images/common/korean/main_tab_2-over.png | Bin 0 -> 1550 bytes public/images/common/korean/main_tab_2.png | Bin 0 -> 1259 bytes public/images/common/korean/main_tab_bar.png | Bin 0 -> 180 bytes public/images/common/korean/main_tab_link.png | Bin 0 -> 478 bytes public/images/common/korean/mng_logo.png | Bin 0 -> 17812 bytes public/images/common/korean/mnu_01-over.png | Bin 0 -> 3591 bytes public/images/common/korean/mnu_01.png | Bin 0 -> 3620 bytes public/images/common/korean/mnu_02-over.png | Bin 0 -> 4157 bytes public/images/common/korean/mnu_02.png | Bin 0 -> 4176 bytes public/images/common/korean/mnu_03-over.png | Bin 0 -> 4031 bytes public/images/common/korean/mnu_03.png | Bin 0 -> 4075 bytes public/images/common/korean/mnu_04-over.png | Bin 0 -> 4038 bytes public/images/common/korean/mnu_04.png | Bin 0 -> 4100 bytes public/images/common/korean/mnu_05-over.png | Bin 0 -> 4129 bytes public/images/common/korean/mnu_05.png | Bin 0 -> 4193 bytes public/images/common/korean/mnu_06-over.png | Bin 0 -> 3976 bytes public/images/common/korean/mnu_06.png | Bin 0 -> 4036 bytes public/images/common/korean/mnu_07-over.png | Bin 0 -> 4046 bytes public/images/common/korean/mnu_07.png | Bin 0 -> 4107 bytes public/images/common/korean/mnu_08-over.png | Bin 0 -> 3900 bytes public/images/common/korean/mnu_08.png | Bin 0 -> 3948 bytes public/images/common/korean/mnu_09-over.png | Bin 0 -> 3855 bytes public/images/common/korean/mnu_09.png | Bin 0 -> 3892 bytes .../korean/old_left_menu_secure_1-over.png | Bin 0 -> 3739 bytes .../korean/old_left_menu_secure_1.-over.png | Bin 0 -> 3739 bytes .../common/korean/old_left_menu_secure_1.png | Bin 0 -> 3606 bytes .../korean/old_left_menu_secure_2-over.png | Bin 0 -> 3833 bytes .../korean/old_left_menu_secure_2.-over.png | Bin 0 -> 941 bytes .../common/korean/old_left_menu_secure_2.png | Bin 0 -> 3685 bytes .../common/korean/old_page_title_secure_1.png | Bin 0 -> 2334 bytes .../common/korean/page_title_addition_1.png | Bin 0 -> 2501 bytes .../common/korean/page_title_addition_2.png | Bin 0 -> 2556 bytes .../common/korean/page_title_addition_3.png | Bin 0 -> 2229 bytes .../common/korean/page_title_addition_4.png | Bin 0 -> 3529 bytes .../common/korean/page_title_addition_5.png | Bin 0 -> 3445 bytes .../common/korean/page_title_colacation_1.png | Bin 0 -> 2313 bytes .../common/korean/page_title_colacation_2.png | Bin 0 -> 2773 bytes .../common/korean/page_title_colacation_3.png | Bin 0 -> 2531 bytes .../common/korean/page_title_customer_1.png | Bin 0 -> 2870 bytes .../common/korean/page_title_customer_2.png | Bin 0 -> 2176 bytes .../common/korean/page_title_customer_3.png | Bin 0 -> 2361 bytes .../common/korean/page_title_customer_4.png | Bin 0 -> 2259 bytes .../common/korean/page_title_customer_5.png | Bin 0 -> 2464 bytes .../common/korean/page_title_customer_6.png | Bin 0 -> 1993 bytes .../common/korean/page_title_customer_7.png | Bin 0 -> 2388 bytes .../common/korean/page_title_hosting_1.png | Bin 0 -> 2309 bytes .../common/korean/page_title_hosting_2.png | Bin 0 -> 2771 bytes .../common/korean/page_title_hosting_3.png | Bin 0 -> 2504 bytes .../korean/page_title_independence_1.png | Bin 0 -> 2335 bytes .../korean/page_title_independence_2.png | Bin 0 -> 2574 bytes .../korean/page_title_independence_3.png | Bin 0 -> 2568 bytes .../korean/page_title_independence_4.png | Bin 0 -> 2930 bytes .../common/korean/page_title_introduce_1.png | Bin 0 -> 1983 bytes .../common/korean/page_title_introduce_2.png | Bin 0 -> 5360 bytes .../common/korean/page_title_introduce_3.png | Bin 0 -> 2297 bytes .../common/korean/page_title_introduce_4.png | Bin 0 -> 2780 bytes .../common/korean/page_title_secure_1.png | Bin 0 -> 2744 bytes .../common/korean/page_title_secure_2.png | Bin 0 -> 2393 bytes .../common/korean/page_title_secure_3.png | Bin 0 -> 3925 bytes .../images/common/korean/page_title_vpn_1.png | Bin 0 -> 2837 bytes .../images/common/korean/page_title_vpn_2.png | Bin 0 -> 2796 bytes public/images/common/korean/popup/idcjp.png | Bin 0 -> 321558 bytes .../images/common/korean/popup/idcjp2018.png | Bin 0 -> 452177 bytes .../common/korean/popup/idcjp_coupon.png | Bin 0 -> 324580 bytes .../common/korean/popup/idcjp_server.png | Bin 0 -> 285613 bytes .../common/korean/popup/worldcupevent.png | Bin 0 -> 185495 bytes public/images/common/korean/popup01.png | Bin 0 -> 235123 bytes .../images/common/korean/side_left_title.png | Bin 0 -> 221159 bytes .../images/common/korean/side_right_title.gif | Bin 0 -> 102053 bytes public/images/common/mimetypes/48/excel.png | Bin 0 -> 881 bytes public/index.php | 67 + public/js/admin.js | 104 + public/js/admin/left_menu.js | 14 + public/js/empty.js | 6 + public/js/front.js | 93 + public/js/front/subpage_fixed_left_banner.js | 12 + public/js/front/top_banner.js | 47 + public/js/front/welcome_left_banner.js | 14 + public/js/front/welcome_partner_banner.js | 86 + public/js/front/zeta-menu.js | 15 + public/js/popup.js | 54 + public/robots.txt | 2 + spark | 99 + tests/README.md | 122 + .../2020-02-22-222222_example_migration.php | 37 + .../_support/Database/Seeds/ExampleSeeder.php | 41 + tests/_support/Libraries/ConfigReader.php | 17 + tests/_support/Models/ExampleModel.php | 24 + tests/database/ExampleDatabaseTest.php | 46 + tests/session/ExampleSessionTest.php | 18 + tests/unit/HealthTest.php | 50 + writable/.htaccess | 6 + writable/Excel/index.html | 11 + writable/HPILO/index.html | 11 + writable/cache/index.html | 11 + writable/logs/index.html | 11 + writable/uploads/index.html | 11 + 1180 files changed, 47462 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 app/.htaccess create mode 100644 app/Common.php create mode 100644 app/Config/App.php create mode 100644 app/Config/Autoload.php create mode 100644 app/Config/Boot/development.php create mode 100644 app/Config/Boot/production.php create mode 100644 app/Config/Boot/testing.php create mode 100644 app/Config/CURLRequest.php create mode 100644 app/Config/Cache.php create mode 100644 app/Config/Constants.php create mode 100644 app/Config/ContentSecurityPolicy.php create mode 100644 app/Config/Cookie.php create mode 100644 app/Config/Database.php create mode 100644 app/Config/DocTypes.php create mode 100644 app/Config/Email.php create mode 100644 app/Config/Encryption.php create mode 100644 app/Config/Events.php create mode 100644 app/Config/Exceptions.php create mode 100644 app/Config/Feature.php create mode 100644 app/Config/Filters.php create mode 100644 app/Config/ForeignCharacters.php create mode 100644 app/Config/Format.php create mode 100644 app/Config/Generators.php create mode 100644 app/Config/Honeypot.php create mode 100644 app/Config/Images.php create mode 100644 app/Config/Kint.php create mode 100644 app/Config/Logger.php create mode 100644 app/Config/Migrations.php create mode 100644 app/Config/Mimes.php create mode 100644 app/Config/Modules.php create mode 100644 app/Config/Pager.php create mode 100644 app/Config/Paths.php create mode 100644 app/Config/Publisher.php create mode 100644 app/Config/Routes.php create mode 100644 app/Config/Security.php create mode 100644 app/Config/Services.php create mode 100644 app/Config/Session.php create mode 100644 app/Config/Toolbar.php create mode 100644 app/Config/UserAgents.php create mode 100644 app/Config/Validation.php create mode 100644 app/Config/View.php create mode 100644 app/Controllers/Admin/AdminController.php create mode 100644 app/Controllers/Admin/HPILOController.php create mode 100644 app/Controllers/Admin/Home.php create mode 100644 app/Controllers/Admin/LoggerController.php create mode 100644 app/Controllers/Admin/UserController.php create mode 100644 app/Controllers/Admin/UserSNSController.php create mode 100644 app/Controllers/BaseController.php create mode 100644 app/Controllers/CLI/HPILO/HPILO4.php create mode 100644 app/Controllers/Common/AuthController.php create mode 100644 app/Controllers/Common/CommonController.php create mode 100644 app/Controllers/Common/CommonTrait.php create mode 100644 app/Controllers/Front/FrontController.php create mode 100644 app/Controllers/Home.php create mode 100644 app/Database/Migrations/.gitkeep create mode 100644 app/Database/Migrations/2023-02-15-055119_CreateUsersTable.php create mode 100644 app/Database/Seeds/.gitkeep create mode 100644 app/Database/Seeds/UserSeeder.php create mode 100644 app/Database/table.sql create mode 100644 app/Entities/CommonEntity.php create mode 100644 app/Entities/HPILOEntity.php create mode 100644 app/Entities/LoggerEntity.php create mode 100644 app/Entities/UserEntity.php create mode 100644 app/Entities/UserSNSEntity.php create mode 100644 app/Filters/.gitkeep create mode 100644 app/Filters/AuthFilter.php create mode 100644 app/Helpers/.gitkeep create mode 100644 app/Helpers/Admin/HPILO_helper.php create mode 100644 app/Helpers/Admin/Logger_helper.php create mode 100644 app/Helpers/Admin/UserSNS_helper.php create mode 100644 app/Helpers/Admin/User_helper.php create mode 100644 app/Helpers/Common_helper.php create mode 100644 app/Language/.gitkeep create mode 100644 app/Language/en/Admin/HPILO.php create mode 100644 app/Language/en/Admin/Logger.php create mode 100644 app/Language/en/Admin/User.php create mode 100644 app/Language/en/Admin/UserSNS.php create mode 100644 app/Language/en/Admin/Validation.php create mode 100644 app/Libraries/.gitkeep create mode 100644 app/Libraries/API/HPILO/HPILO4.php create mode 100644 app/Libraries/Adapter/API/Adapter.php create mode 100644 app/Libraries/Adapter/API/CurlAdapter.php create mode 100644 app/Libraries/Adapter/API/GuzzleAdapter.php create mode 100644 app/Libraries/Adapter/Auth/Adapter.php create mode 100644 app/Libraries/Adapter/Auth/GoogleAdapter.php create mode 100644 app/Libraries/Adapter/Auth/LocalAdapter.php create mode 100644 app/Libraries/Log/DataBase.php create mode 100644 app/Libraries/Log/Log.php create mode 100644 app/Models/.gitkeep create mode 100644 app/Models/CommonModel.php create mode 100644 app/Models/CommonTrait.php create mode 100644 app/Models/HPILOModel.php create mode 100644 app/Models/LoggerModel.php create mode 100644 app/Models/UserModel.php create mode 100644 app/Models/UserSNSModel.php create mode 100644 app/ThirdParty/.gitkeep create mode 100644 app/Views/admin/hpilo/console_applet.php create mode 100644 app/Views/admin/hpilo/console_iframe.php create mode 100644 app/Views/admin/hpilo/console_info.php create mode 100644 app/Views/admin/hpilo/console_irc.php create mode 100644 app/Views/admin/hpilo/console_shell.php create mode 100644 app/Views/admin/hpilo/index.php create mode 100644 app/Views/admin/hpilo/insert.php create mode 100644 app/Views/admin/hpilo/update.php create mode 100644 app/Views/admin/hpilo/view.php create mode 100644 app/Views/admin/index.php create mode 100644 app/Views/admin/logger/index.php create mode 100644 app/Views/admin/logger/view.php create mode 100644 app/Views/admin/user/index.php create mode 100644 app/Views/admin/user/insert.php create mode 100644 app/Views/admin/user/update.php create mode 100644 app/Views/admin/user/view.php create mode 100644 app/Views/admin/usersns/index.php create mode 100644 app/Views/auth/login.php create mode 100644 app/Views/auth/login_v1.php create mode 100644 app/Views/errors/cli/error_404.php create mode 100644 app/Views/errors/cli/error_exception.php create mode 100644 app/Views/errors/cli/production.php create mode 100644 app/Views/errors/html/debug.css create mode 100644 app/Views/errors/html/debug.js create mode 100644 app/Views/errors/html/error_404.php create mode 100644 app/Views/errors/html/error_exception.php create mode 100644 app/Views/errors/html/production.php create mode 100644 app/Views/layouts/admin.php create mode 100644 app/Views/layouts/admin/left_menu.php create mode 100644 app/Views/layouts/admin/make_password.php create mode 100644 app/Views/layouts/admin/member_link.php create mode 100644 app/Views/layouts/admin/quick_btn.php create mode 100644 app/Views/layouts/admin/top_menu.php create mode 100644 app/Views/layouts/empty.php create mode 100644 app/Views/layouts/front.php create mode 100644 app/Views/layouts/front/cfmgr/copyright.php create mode 100644 app/Views/layouts/front/cfmgr/header.php create mode 100644 app/Views/layouts/front/cfmgr/siteboard_left_banner.php create mode 100644 app/Views/layouts/front/cfmgr/sitecontent_left_banner.php create mode 100644 app/Views/layouts/front/cfmgr/top_logo.php create mode 100644 app/Views/layouts/front/cfmgr/welcome_left_banner.php create mode 100644 app/Views/layouts/front/cfmgr/welcome_partner_banner.php create mode 100644 app/Views/layouts/front/cfmgr/welcome_right_banner.php create mode 100644 app/Views/templates/Pagers/bootstrap_full.php create mode 100644 app/Views/templates/Pagers/bootstrap_simple.php create mode 100644 app/Views/templates/admin/cloudflare/dns.php create mode 100644 app/Views/templates/admin/cloudflare/select2.php create mode 100644 app/Views/templates/admin/footer.php create mode 100644 app/Views/templates/admin/header.php create mode 100644 app/Views/templates/admin/index_head.php create mode 100644 app/Views/welcome_message.php create mode 100644 app/index.html create mode 100644 builds create mode 100644 cfmgr_dataflow.png create mode 100644 cfmgr_dataflow.xml create mode 100644 composer.json create mode 100644 phpunit.xml.dist create mode 100644 preload.php create mode 100644 public/.htaccess create mode 100644 public/css/admin.css create mode 100644 public/css/admin/header.css create mode 100644 public/css/admin/left_menu.css create mode 100644 public/css/admin/member_link.css create mode 100644 public/css/admin/quick_btn.css create mode 100644 public/css/admin/top_menu.css create mode 100644 public/css/empty.css create mode 100644 public/css/front.css create mode 100644 public/css/front/top_banner.css create mode 100644 public/css/front/welcome_left_banner.css create mode 100644 public/css/front/welcome_partner_banner.css create mode 100644 public/css/front/zeta-menu.css create mode 100644 public/css/login.css create mode 100644 public/favicon.ico create mode 100644 public/hpilo/alt/css/style.css create mode 100644 public/hpilo/css/application.css create mode 100644 public/hpilo/css/eov.css create mode 100644 public/hpilo/css/irc.css create mode 100644 public/hpilo/css/jquery-ui.css create mode 100644 public/hpilo/css/msgbox.css create mode 100644 public/hpilo/html/application.html create mode 100644 public/hpilo/js/VMconnection.js create mode 100644 public/hpilo/js/cache.js create mode 100644 public/hpilo/js/constants.js create mode 100644 public/hpilo/js/extendedIcons.js create mode 100644 public/hpilo/js/hostPwr.js create mode 100644 public/hpilo/js/iLO.js create mode 100644 public/hpilo/js/icons.js create mode 100644 public/hpilo/js/inputValidator.js create mode 100644 public/hpilo/js/irc.js create mode 100644 public/hpilo/js/ircKeyboardMouse.js create mode 100644 public/hpilo/js/jquery-ui.js create mode 100644 public/hpilo/js/jquery.eventsource.js create mode 100644 public/hpilo/js/jquery.fullscreen.js create mode 100644 public/hpilo/js/jquery.js create mode 100644 public/hpilo/js/pseudo-worker.js create mode 100644 public/hpilo/js/renderer.js create mode 100644 public/hpilo/js/socket.js create mode 100644 public/hpilo/js/state.js create mode 100644 public/hpilo/lang/en/strings.js create mode 100644 public/images/auth/google_login_button.png create mode 100644 public/images/common/adminbg.png create mode 100644 public/images/common/btn_login.png create mode 100644 public/images/common/japanese/adminbg.png create mode 100644 public/images/common/japanese/bicon1.gif create mode 100644 public/images/common/japanese/blank.gif create mode 100644 public/images/common/japanese/blit_diamond.jpg create mode 100644 public/images/common/japanese/blit_orange.gif create mode 100644 public/images/common/japanese/board/img/--arrow.gif create mode 100644 public/images/common/japanese/board/img/-arrow.gif create mode 100644 public/images/common/japanese/board/img/admin.gif create mode 100644 public/images/common/japanese/board/img/arrow--.gif create mode 100644 public/images/common/japanese/board/img/arrow-.gif create mode 100644 public/images/common/japanese/board/img/arrow.gif create mode 100644 public/images/common/japanese/board/img/barBg.gif create mode 100644 public/images/common/japanese/board/img/barLeft.gif create mode 100644 public/images/common/japanese/board/img/barRight.gif create mode 100644 public/images/common/japanese/board/img/barTxt1.gif create mode 100644 public/images/common/japanese/board/img/barTxt2.gif create mode 100644 public/images/common/japanese/board/img/barTxt3.gif create mode 100644 public/images/common/japanese/board/img/barTxt4.gif create mode 100644 public/images/common/japanese/board/img/barTxt5.gif create mode 100644 public/images/common/japanese/board/img/barTxt6.gif create mode 100644 public/images/common/japanese/board/img/barTxt7.gif create mode 100644 public/images/common/japanese/board/img/barTxt8.gif create mode 100644 public/images/common/japanese/board/img/bdr1.gif create mode 100644 public/images/common/japanese/board/img/bdr2.gif create mode 100644 public/images/common/japanese/board/img/bdr3.gif create mode 100644 public/images/common/japanese/board/img/bdr4.gif create mode 100644 public/images/common/japanese/board/img/boardTxtNotice.gif create mode 100644 public/images/common/japanese/board/img/cnr1.gif create mode 100644 public/images/common/japanese/board/img/cnr2.gif create mode 100644 public/images/common/japanese/board/img/cnr3.gif create mode 100644 public/images/common/japanese/board/img/cnr4.gif create mode 100644 public/images/common/japanese/board/img/del.gif create mode 100644 public/images/common/japanese/board/img/disk1.gif create mode 100644 public/images/common/japanese/board/img/doc.gif create mode 100644 public/images/common/japanese/board/img/dot.gif create mode 100644 public/images/common/japanese/board/img/edit.gif create mode 100644 public/images/common/japanese/board/img/end.gif create mode 100644 public/images/common/japanese/board/img/footer_reply.gif create mode 100644 public/images/common/japanese/board/img/footer_submit.gif create mode 100644 public/images/common/japanese/board/img/grayDate.gif create mode 100644 public/images/common/japanese/board/img/grayHit.gif create mode 100644 public/images/common/japanese/board/img/grayName.gif create mode 100644 public/images/common/japanese/board/img/grayNo.gif create mode 100644 public/images/common/japanese/board/img/graySubject.gif create mode 100644 public/images/common/japanese/board/img/h_date.gif create mode 100644 public/images/common/japanese/board/img/h_hit.gif create mode 100644 public/images/common/japanese/board/img/h_memo.gif create mode 100644 public/images/common/japanese/board/img/h_name.gif create mode 100644 public/images/common/japanese/board/img/h_next.gif create mode 100644 public/images/common/japanese/board/img/h_no.gif create mode 100644 public/images/common/japanese/board/img/h_prev.gif create mode 100644 public/images/common/japanese/board/img/h_reply.gif create mode 100644 public/images/common/japanese/board/img/h_subject.gif create mode 100644 public/images/common/japanese/board/img/home.gif create mode 100644 public/images/common/japanese/board/img/hwp.gif create mode 100644 public/images/common/japanese/board/img/iconBack.gif create mode 100644 public/images/common/japanese/board/img/iconDel.gif create mode 100644 public/images/common/japanese/board/img/iconEdit.gif create mode 100644 public/images/common/japanese/board/img/iconEnd.gif create mode 100644 public/images/common/japanese/board/img/iconFirst.gif create mode 100644 public/images/common/japanese/board/img/iconList.gif create mode 100644 public/images/common/japanese/board/img/iconNext.gif create mode 100644 public/images/common/japanese/board/img/iconPrev.gif create mode 100644 public/images/common/japanese/board/img/iconReply.gif create mode 100644 public/images/common/japanese/board/img/iconSave.gif create mode 100644 public/images/common/japanese/board/img/iconWrite.gif create mode 100644 public/images/common/japanese/board/img/icon_back.png create mode 100644 public/images/common/japanese/board/img/icon_close.gif create mode 100644 public/images/common/japanese/board/img/icon_close.jpg create mode 100644 public/images/common/japanese/board/img/icon_del.png create mode 100644 public/images/common/japanese/board/img/icon_done.png create mode 100644 public/images/common/japanese/board/img/icon_list.png create mode 100644 public/images/common/japanese/board/img/icon_modify.png create mode 100644 public/images/common/japanese/board/img/icon_reply.png create mode 100644 public/images/common/japanese/board/img/icon_save.png create mode 100644 public/images/common/japanese/board/img/icon_write.png create mode 100644 public/images/common/japanese/board/img/jpg.gif create mode 100644 public/images/common/japanese/board/img/list.gif create mode 100644 public/images/common/japanese/board/img/login_01.gif create mode 100644 public/images/common/japanese/board/img/login_02.gif create mode 100644 public/images/common/japanese/board/img/login_03-over.gif create mode 100644 public/images/common/japanese/board/img/login_03.gif create mode 100644 public/images/common/japanese/board/img/login_04.gif create mode 100644 public/images/common/japanese/board/img/login_05.gif create mode 100644 public/images/common/japanese/board/img/login_06.gif create mode 100644 public/images/common/japanese/board/img/login_07-over.gif create mode 100644 public/images/common/japanese/board/img/login_07.gif create mode 100644 public/images/common/japanese/board/img/login_08.gif create mode 100644 public/images/common/japanese/board/img/login_09.gif create mode 100644 public/images/common/japanese/board/img/logout.gif create mode 100644 public/images/common/japanese/board/img/mail.gif create mode 100644 public/images/common/japanese/board/img/mail_top2.gif create mode 100644 public/images/common/japanese/board/img/n_end.gif create mode 100644 public/images/common/japanese/board/img/n_next.gif create mode 100644 public/images/common/japanese/board/img/n_prev.gif create mode 100644 public/images/common/japanese/board/img/n_top.gif create mode 100644 public/images/common/japanese/board/img/next.gif create mode 100644 public/images/common/japanese/board/img/noImage.gif create mode 100644 public/images/common/japanese/board/img/notice.gif create mode 100644 public/images/common/japanese/board/img/off.gif create mode 100644 public/images/common/japanese/board/img/on.gif create mode 100644 public/images/common/japanese/board/img/paper.gif create mode 100644 public/images/common/japanese/board/img/pdf.gif create mode 100644 public/images/common/japanese/board/img/photoBar.gif create mode 100644 public/images/common/japanese/board/img/photoBody.gif create mode 100644 public/images/common/japanese/board/img/photoShadow.gif create mode 100644 public/images/common/japanese/board/img/photoTop.gif create mode 100644 public/images/common/japanese/board/img/photoUnder.gif create mode 100644 public/images/common/japanese/board/img/point.gif create mode 100644 public/images/common/japanese/board/img/ppt.gif create mode 100644 public/images/common/japanese/board/img/prev.gif create mode 100644 public/images/common/japanese/board/img/reply.gif create mode 100644 public/images/common/japanese/board/img/reply2.gif create mode 100644 public/images/common/japanese/board/img/reset.gif create mode 100644 public/images/common/japanese/board/img/search.gif create mode 100644 public/images/common/japanese/board/img/submit.gif create mode 100644 public/images/common/japanese/board/img/t_down.gif create mode 100644 public/images/common/japanese/board/img/t_edit.gif create mode 100644 public/images/common/japanese/board/img/t_email.gif create mode 100644 public/images/common/japanese/board/img/t_html.gif create mode 100644 public/images/common/japanese/board/img/t_memo.gif create mode 100644 public/images/common/japanese/board/img/t_name.gif create mode 100644 public/images/common/japanese/board/img/t_password.gif create mode 100644 public/images/common/japanese/board/img/t_reply.gif create mode 100644 public/images/common/japanese/board/img/t_subject.gif create mode 100644 public/images/common/japanese/board/img/t_tag.gif create mode 100644 public/images/common/japanese/board/img/t_text.gif create mode 100644 public/images/common/japanese/board/img/t_write.gif create mode 100644 public/images/common/japanese/board/img/top.gif create mode 100644 public/images/common/japanese/board/img/write.gif create mode 100644 public/images/common/japanese/board/img/xls.gif create mode 100644 public/images/common/japanese/box_1.gif create mode 100644 public/images/common/japanese/box_2.gif create mode 100644 public/images/common/japanese/box_21.gif create mode 100644 public/images/common/japanese/box_22.gif create mode 100644 public/images/common/japanese/box_23.gif create mode 100644 public/images/common/japanese/box_24.gif create mode 100644 public/images/common/japanese/box_3.gif create mode 100644 public/images/common/japanese/box_4.gif create mode 100644 public/images/common/japanese/btn_introduce_1.png create mode 100644 public/images/common/japanese/btn_introduce_1_over.png create mode 100644 public/images/common/japanese/btn_introduce_2.png create mode 100644 public/images/common/japanese/btn_introduce_2_over.png create mode 100644 public/images/common/japanese/btn_introduce_3.png create mode 100644 public/images/common/japanese/btn_introduce_3_over.png create mode 100644 public/images/common/japanese/btn_introduce_bg.png create mode 100644 public/images/common/japanese/btn_login.png create mode 100644 public/images/common/japanese/btn_search.gif create mode 100644 public/images/common/japanese/btn_waf_1.png create mode 100644 public/images/common/japanese/btn_waf_1_over.png create mode 100644 public/images/common/japanese/btn_waf_2.png create mode 100644 public/images/common/japanese/btn_waf_2_over.png create mode 100644 public/images/common/japanese/btn_waf_3.png create mode 100644 public/images/common/japanese/btn_waf_3_over.png create mode 100644 public/images/common/japanese/btn_waf_4.png create mode 100644 public/images/common/japanese/btn_waf_4_over.png create mode 100644 public/images/common/japanese/btn_waf_5.png create mode 100644 public/images/common/japanese/btn_waf_5_over.png create mode 100644 public/images/common/japanese/buttonBlack.gif create mode 100644 public/images/common/japanese/buttonBlue.gif create mode 100644 public/images/common/japanese/buttonGreen.gif create mode 100644 public/images/common/japanese/buttonRed.gif create mode 100644 public/images/common/japanese/common create mode 100644 public/images/common/japanese/content/10.gif create mode 100644 public/images/common/japanese/content/10.png create mode 100644 public/images/common/japanese/content/11-1.png create mode 100644 public/images/common/japanese/content/11.png create mode 100644 public/images/common/japanese/content/12.png create mode 100644 public/images/common/japanese/content/13-1.png create mode 100644 public/images/common/japanese/content/13.png create mode 100644 public/images/common/japanese/content/14.png create mode 100644 public/images/common/japanese/content/15.png create mode 100644 public/images/common/japanese/content/16.jpg create mode 100644 public/images/common/japanese/content/16.png create mode 100644 public/images/common/japanese/content/17.png create mode 100644 public/images/common/japanese/content/18.png create mode 100644 public/images/common/japanese/content/19.png create mode 100644 public/images/common/japanese/content/20.png create mode 100644 public/images/common/japanese/content/22-1.jpg create mode 100644 public/images/common/japanese/content/22.png create mode 100644 public/images/common/japanese/content/23.jpg create mode 100644 public/images/common/japanese/content/23.png create mode 100644 public/images/common/japanese/content/3.png create mode 100644 public/images/common/japanese/content/4-1.png create mode 100644 public/images/common/japanese/content/4-2.png create mode 100644 public/images/common/japanese/content/4.png create mode 100644 public/images/common/japanese/content/50.png create mode 100644 public/images/common/japanese/content/51.png create mode 100644 public/images/common/japanese/content/52.png create mode 100644 public/images/common/japanese/content/53.png create mode 100644 public/images/common/japanese/content/54.png create mode 100644 public/images/common/japanese/content/55.png create mode 100644 public/images/common/japanese/content/56.png create mode 100644 public/images/common/japanese/content/57.png create mode 100644 public/images/common/japanese/content/58.png create mode 100644 public/images/common/japanese/content/59.png create mode 100644 public/images/common/japanese/content/60.png create mode 100644 public/images/common/japanese/content/61.png create mode 100644 public/images/common/japanese/content/8.png create mode 100644 public/images/common/japanese/content/9.png create mode 100644 public/images/common/japanese/content/btn_introduce_1.png create mode 100644 public/images/common/japanese/content/btn_introduce_1_over.png create mode 100644 public/images/common/japanese/content/btn_introduce_2.png create mode 100644 public/images/common/japanese/content/btn_introduce_2_over.png create mode 100644 public/images/common/japanese/content/btn_introduce_3.png create mode 100644 public/images/common/japanese/content/btn_introduce_3_over.png create mode 100644 public/images/common/japanese/content/btn_introduce_bg.png create mode 100644 public/images/common/japanese/content/cs.png create mode 100644 public/images/common/japanese/content/ddos.png create mode 100644 public/images/common/japanese/customervoice.png create mode 100644 public/images/common/japanese/disk1.gif create mode 100644 public/images/common/japanese/dot_bold.gif create mode 100644 public/images/common/japanese/dot_bronze.gif create mode 100644 public/images/common/japanese/dot_dot.gif create mode 100644 public/images/common/japanese/dot_e.gif create mode 100644 public/images/common/japanese/dot_g.gif create mode 100644 public/images/common/japanese/dot_gold.gif create mode 100644 public/images/common/japanese/dot_h.gif create mode 100644 public/images/common/japanese/dot_m.gif create mode 100644 public/images/common/japanese/dot_silver.gif create mode 100644 public/images/common/japanese/dot_u.gif create mode 100644 public/images/common/japanese/iconBack.gif create mode 100644 public/images/common/japanese/iconDel.gif create mode 100644 public/images/common/japanese/iconEdit.gif create mode 100644 public/images/common/japanese/iconEnd.gif create mode 100644 public/images/common/japanese/iconFirst.gif create mode 100644 public/images/common/japanese/iconList.gif create mode 100644 public/images/common/japanese/iconNext.gif create mode 100644 public/images/common/japanese/iconPrev.gif create mode 100644 public/images/common/japanese/iconReply.gif create mode 100644 public/images/common/japanese/iconSave.gif create mode 100644 public/images/common/japanese/iconWrite.gif create mode 100644 public/images/common/japanese/icon_pdf.gif create mode 100644 public/images/common/japanese/idcjp_server_us.png create mode 100644 public/images/common/japanese/left_banner_1.png create mode 100644 public/images/common/japanese/left_banner_2.png create mode 100644 public/images/common/japanese/left_banner_2.png.130808 create mode 100644 public/images/common/japanese/left_banner_2.png_old20160417 create mode 100644 public/images/common/japanese/left_banner_2_old.png create mode 100644 public/images/common/japanese/left_banner_3.png create mode 100644 public/images/common/japanese/left_menu_addition_1-over.png create mode 100644 public/images/common/japanese/left_menu_addition_1.png create mode 100644 public/images/common/japanese/left_menu_addition_2-over.png create mode 100644 public/images/common/japanese/left_menu_addition_2.png create mode 100644 public/images/common/japanese/left_menu_addition_3-over.png create mode 100644 public/images/common/japanese/left_menu_addition_3.png create mode 100644 public/images/common/japanese/left_menu_addition_4-over.png create mode 100644 public/images/common/japanese/left_menu_addition_4.png create mode 100644 public/images/common/japanese/left_menu_addition_5-over.png create mode 100644 public/images/common/japanese/left_menu_addition_5.png create mode 100644 public/images/common/japanese/left_menu_bg.png create mode 100644 public/images/common/japanese/left_menu_bottom.png create mode 100644 public/images/common/japanese/left_menu_colacation_1-over.png create mode 100644 public/images/common/japanese/left_menu_colacation_1.png create mode 100644 public/images/common/japanese/left_menu_colacation_2-over.png create mode 100644 public/images/common/japanese/left_menu_colacation_2.png create mode 100644 public/images/common/japanese/left_menu_colacation_3-over.png create mode 100644 public/images/common/japanese/left_menu_colacation_3.png create mode 100644 public/images/common/japanese/left_menu_customer_1-over.png create mode 100644 public/images/common/japanese/left_menu_customer_1.png create mode 100644 public/images/common/japanese/left_menu_customer_2-over.png create mode 100644 public/images/common/japanese/left_menu_customer_2.png create mode 100644 public/images/common/japanese/left_menu_customer_3-over.png create mode 100644 public/images/common/japanese/left_menu_customer_3.png create mode 100644 public/images/common/japanese/left_menu_customer_4-over.png create mode 100644 public/images/common/japanese/left_menu_customer_4.png create mode 100644 public/images/common/japanese/left_menu_customer_5-over.png create mode 100644 public/images/common/japanese/left_menu_customer_5.png create mode 100644 public/images/common/japanese/left_menu_customer_6-over.png create mode 100644 public/images/common/japanese/left_menu_customer_6.png create mode 100644 public/images/common/japanese/left_menu_customer_7-over.png create mode 100644 public/images/common/japanese/left_menu_customer_7.png create mode 100644 public/images/common/japanese/left_menu_hosting_1-over.png create mode 100644 public/images/common/japanese/left_menu_hosting_1.png create mode 100644 public/images/common/japanese/left_menu_hosting_2-over.png create mode 100644 public/images/common/japanese/left_menu_hosting_2.png create mode 100644 public/images/common/japanese/left_menu_hosting_3-over.png create mode 100644 public/images/common/japanese/left_menu_hosting_3.png create mode 100644 public/images/common/japanese/left_menu_independence_1-over.png create mode 100644 public/images/common/japanese/left_menu_independence_1.png create mode 100644 public/images/common/japanese/left_menu_independence_2-over.png create mode 100644 public/images/common/japanese/left_menu_independence_2.png create mode 100644 public/images/common/japanese/left_menu_independence_3-over.png create mode 100644 public/images/common/japanese/left_menu_independence_3.png create mode 100644 public/images/common/japanese/left_menu_independence_4-ov.png create mode 100644 public/images/common/japanese/left_menu_independence_4-over.png create mode 100644 public/images/common/japanese/left_menu_independence_4.png create mode 100644 public/images/common/japanese/left_menu_introduce_1-over.png create mode 100644 public/images/common/japanese/left_menu_introduce_1.png create mode 100644 public/images/common/japanese/left_menu_introduce_2-over.png create mode 100644 public/images/common/japanese/left_menu_introduce_2.png create mode 100644 public/images/common/japanese/left_menu_introduce_3-over.png create mode 100644 public/images/common/japanese/left_menu_introduce_3.png create mode 100644 public/images/common/japanese/left_menu_introduce_4-over.png create mode 100644 public/images/common/japanese/left_menu_introduce_4.png create mode 100644 public/images/common/japanese/left_menu_introduce_5-over.png create mode 100644 public/images/common/japanese/left_menu_introduce_5.png create mode 100644 public/images/common/japanese/left_menu_secure_1-.over.png create mode 100644 public/images/common/japanese/left_menu_secure_1-over.png create mode 100644 public/images/common/japanese/left_menu_secure_1.png create mode 100644 public/images/common/japanese/left_menu_secure_2-over.png create mode 100644 public/images/common/japanese/left_menu_secure_2.-over.png create mode 100644 public/images/common/japanese/left_menu_secure_2.png create mode 100644 public/images/common/japanese/left_menu_secure_3-over.png create mode 100644 public/images/common/japanese/left_menu_secure_3.png create mode 100644 public/images/common/japanese/left_menu_vpn_1-over.png create mode 100644 public/images/common/japanese/left_menu_vpn_1.png create mode 100644 public/images/common/japanese/left_menu_vpn_2-over.png create mode 100644 public/images/common/japanese/left_menu_vpn_2.png create mode 100644 public/images/common/japanese/left_top.png create mode 100644 public/images/common/japanese/left_top_addition.png create mode 100644 public/images/common/japanese/left_top_colacation.png create mode 100644 public/images/common/japanese/left_top_customer.png create mode 100644 public/images/common/japanese/left_top_hosting.png create mode 100644 public/images/common/japanese/left_top_independence.png create mode 100644 public/images/common/japanese/left_top_introduce.png create mode 100644 public/images/common/japanese/left_top_secure.png create mode 100644 public/images/common/japanese/left_top_vpn.png create mode 100644 public/images/common/japanese/logo.png create mode 100644 public/images/common/japanese/logo_gray.png create mode 100644 public/images/common/japanese/logo_side.png create mode 100644 public/images/common/japanese/main_banner_1.png create mode 100644 public/images/common/japanese/main_banner_2.png create mode 100644 public/images/common/japanese/main_banner_2.png_old20160417 create mode 100644 public/images/common/japanese/main_banner_2_old.png create mode 100644 public/images/common/japanese/main_banner_3.png create mode 100644 public/images/common/japanese/main_banner_4.png create mode 100644 public/images/common/japanese/main_banner_5.png create mode 100644 public/images/common/japanese/main_banner_6.png create mode 100644 public/images/common/japanese/main_cont_antivirus.jpg create mode 100644 public/images/common/japanese/main_cont_backup_1.png create mode 100644 public/images/common/japanese/main_cont_bypass_1.png create mode 100644 public/images/common/japanese/main_cont_colocation_1.png create mode 100644 public/images/common/japanese/main_cont_domain_1.png create mode 100644 public/images/common/japanese/main_cont_firewall_1.png create mode 100644 public/images/common/japanese/main_cont_fireweb.jpg create mode 100644 public/images/common/japanese/main_cont_fowarding.jpg create mode 100644 public/images/common/japanese/main_cont_hosting_1.png create mode 100644 public/images/common/japanese/main_cont_hosting_2.png create mode 100644 public/images/common/japanese/main_cont_hosting_2_1.png create mode 100644 public/images/common/japanese/main_cont_hosting_2_2.png create mode 100644 public/images/common/japanese/main_cont_hosting_3.png create mode 100644 public/images/common/japanese/main_cont_hosting_3_1.png create mode 100644 public/images/common/japanese/main_cont_hosting_3_1_160302.png create mode 100644 public/images/common/japanese/main_cont_hosting_3_2.png create mode 100644 public/images/common/japanese/main_cont_independence4.png create mode 100644 public/images/common/japanese/main_cont_independence_1.png create mode 100644 public/images/common/japanese/main_cont_independence_2.png create mode 100644 public/images/common/japanese/main_cont_independence_3.png create mode 100644 public/images/common/japanese/main_cont_independence_4.png create mode 100644 public/images/common/japanese/main_cont_introduce_1.png create mode 100644 public/images/common/japanese/main_cont_introduce_2.png create mode 100644 public/images/common/japanese/main_cont_introduce_2_2.png create mode 100644 public/images/common/japanese/main_cont_introduce_2_3.png create mode 100644 public/images/common/japanese/main_cont_tns_1.png create mode 100644 public/images/common/japanese/main_cont_vas_1.png create mode 100644 public/images/common/japanese/main_cont_vas_2.png create mode 100644 public/images/common/japanese/main_cont_vpn_1.png create mode 100644 public/images/common/japanese/main_cont_waf_1.png create mode 100644 public/images/common/japanese/main_cont_waf_2.png create mode 100644 public/images/common/japanese/main_cont_waf_3.png create mode 100644 public/images/common/japanese/main_cont_waf_4.png create mode 100644 public/images/common/japanese/main_cont_waf_5.png create mode 100644 public/images/common/japanese/main_icon_1.png create mode 100644 public/images/common/japanese/main_icon_2.png create mode 100644 public/images/common/japanese/main_icon_3.png create mode 100644 public/images/common/japanese/main_icon_4.png create mode 100644 public/images/common/japanese/main_icon_cisco.png create mode 100644 public/images/common/japanese/main_icon_corel.png create mode 100644 public/images/common/japanese/main_icon_dell.png create mode 100644 public/images/common/japanese/main_icon_hp.png create mode 100644 public/images/common/japanese/main_icon_ibm.png create mode 100644 public/images/common/japanese/main_icon_jstream.png create mode 100644 public/images/common/japanese/main_icon_kddi.png create mode 100644 public/images/common/japanese/main_icon_lg.png create mode 100644 public/images/common/japanese/main_icon_ns.png create mode 100644 public/images/common/japanese/main_icon_ntt.png create mode 100644 public/images/common/japanese/main_icon_partner.png create mode 100644 public/images/common/japanese/main_icon_red.png create mode 100644 public/images/common/japanese/main_icon_slim.png create mode 100644 public/images/common/japanese/main_icon_softbank.png create mode 100644 public/images/common/japanese/main_icon_yahoobb.png create mode 100644 public/images/common/japanese/main_icon_yamaha.png create mode 100644 public/images/common/japanese/main_img.png create mode 100644 public/images/common/japanese/main_img_3.png create mode 100644 public/images/common/japanese/main_img_addition.png create mode 100644 public/images/common/japanese/main_img_colacation.png create mode 100644 public/images/common/japanese/main_img_customer.png create mode 100644 public/images/common/japanese/main_img_hosting.png create mode 100644 public/images/common/japanese/main_img_independence.png create mode 100644 public/images/common/japanese/main_img_introduce.png create mode 100644 public/images/common/japanese/main_img_secure.png create mode 100644 public/images/common/japanese/main_img_vpn.png create mode 100644 public/images/common/japanese/main_link_bookmark.png create mode 100644 public/images/common/japanese/main_link_contact.png create mode 100644 public/images/common/japanese/main_link_home.png create mode 100644 public/images/common/japanese/main_link_japan.png create mode 100644 public/images/common/japanese/main_link_korea.png create mode 100644 public/images/common/japanese/main_tab_1-over.png create mode 100644 public/images/common/japanese/main_tab_1.png create mode 100644 public/images/common/japanese/main_tab_2-over.png create mode 100644 public/images/common/japanese/main_tab_2.png create mode 100644 public/images/common/japanese/main_tab_bar.png create mode 100644 public/images/common/japanese/main_tab_link.png create mode 100644 public/images/common/japanese/mng_logo.png create mode 100644 public/images/common/japanese/mnu_01-over.png create mode 100644 public/images/common/japanese/mnu_01.png create mode 100644 public/images/common/japanese/mnu_02-over.png create mode 100644 public/images/common/japanese/mnu_02.png create mode 100644 public/images/common/japanese/mnu_03-over.png create mode 100644 public/images/common/japanese/mnu_03.png create mode 100644 public/images/common/japanese/mnu_04-over.png create mode 100644 public/images/common/japanese/mnu_04.png create mode 100644 public/images/common/japanese/mnu_05-over.png create mode 100644 public/images/common/japanese/mnu_05.png create mode 100644 public/images/common/japanese/mnu_06-over.png create mode 100644 public/images/common/japanese/mnu_06.png create mode 100644 public/images/common/japanese/mnu_07-over.png create mode 100644 public/images/common/japanese/mnu_07.png create mode 100644 public/images/common/japanese/mnu_08-over.png create mode 100644 public/images/common/japanese/mnu_08.png create mode 100644 public/images/common/japanese/mnu_09-over.png create mode 100644 public/images/common/japanese/mnu_09.png create mode 100644 public/images/common/japanese/old_left_menu_secure_1-over.png create mode 100644 public/images/common/japanese/old_left_menu_secure_1.-over.png create mode 100644 public/images/common/japanese/old_left_menu_secure_1.png create mode 100644 public/images/common/japanese/old_left_menu_secure_2-over.png create mode 100644 public/images/common/japanese/old_left_menu_secure_2.-over.png create mode 100644 public/images/common/japanese/old_left_menu_secure_2.png create mode 100644 public/images/common/japanese/old_page_title_secure_1.png create mode 100644 public/images/common/japanese/page_title_addition_1.png create mode 100644 public/images/common/japanese/page_title_addition_2.png create mode 100644 public/images/common/japanese/page_title_addition_3.png create mode 100644 public/images/common/japanese/page_title_addition_4.png create mode 100644 public/images/common/japanese/page_title_addition_5.png create mode 100644 public/images/common/japanese/page_title_colacation_1.png create mode 100644 public/images/common/japanese/page_title_colacation_2.png create mode 100644 public/images/common/japanese/page_title_colacation_3.png create mode 100644 public/images/common/japanese/page_title_customer_1.png create mode 100644 public/images/common/japanese/page_title_customer_2.png create mode 100644 public/images/common/japanese/page_title_customer_3.png create mode 100644 public/images/common/japanese/page_title_customer_4.png create mode 100644 public/images/common/japanese/page_title_customer_5.png create mode 100644 public/images/common/japanese/page_title_customer_6.png create mode 100644 public/images/common/japanese/page_title_customer_7.png create mode 100644 public/images/common/japanese/page_title_hosting_1.png create mode 100644 public/images/common/japanese/page_title_hosting_2.png create mode 100644 public/images/common/japanese/page_title_hosting_3.png create mode 100644 public/images/common/japanese/page_title_independence_1.png create mode 100644 public/images/common/japanese/page_title_independence_2.png create mode 100644 public/images/common/japanese/page_title_independence_3.png create mode 100644 public/images/common/japanese/page_title_independence_4.png create mode 100644 public/images/common/japanese/page_title_introduce_1.png create mode 100644 public/images/common/japanese/page_title_introduce_2.png create mode 100644 public/images/common/japanese/page_title_introduce_3.png create mode 100644 public/images/common/japanese/page_title_introduce_4.png create mode 100644 public/images/common/japanese/page_title_secure_1.png create mode 100644 public/images/common/japanese/page_title_secure_2.png create mode 100644 public/images/common/japanese/page_title_secure_3.png create mode 100644 public/images/common/japanese/page_title_vpn_1.png create mode 100644 public/images/common/japanese/page_title_vpn_2.png create mode 100644 public/images/common/japanese/popup/idcjp.png create mode 100644 public/images/common/japanese/popup/idcjp_coupon.png create mode 100644 public/images/common/japanese/popup/idcjp_server.png create mode 100644 public/images/common/japanese/popup01.png create mode 100644 public/images/common/japanese/side_left_title.png create mode 100644 public/images/common/japanese/side_right_title.gif create mode 100644 public/images/common/korean/adminbg.png create mode 100644 public/images/common/korean/backup/left_menu_customer_1-over.png create mode 100644 public/images/common/korean/backup/left_menu_customer_1.png create mode 100644 public/images/common/korean/backup/left_menu_customer_2-over.png create mode 100644 public/images/common/korean/backup/left_menu_customer_2.png create mode 100644 public/images/common/korean/backup/left_menu_customer_3-over.png create mode 100644 public/images/common/korean/backup/left_menu_customer_3.png create mode 100644 public/images/common/korean/backup/left_menu_customer_4-over.png create mode 100644 public/images/common/korean/backup/left_menu_customer_4.png create mode 100644 public/images/common/korean/backup/left_menu_customer_5-over.png create mode 100644 public/images/common/korean/backup/left_menu_customer_5.png create mode 100644 public/images/common/korean/backup/left_menu_customer_6-over.png create mode 100644 public/images/common/korean/backup/left_menu_customer_6.png create mode 100644 public/images/common/korean/backup/left_menu_customer_7-over.png create mode 100644 public/images/common/korean/backup/left_menu_customer_7.png create mode 100644 public/images/common/korean/bicon1.gif create mode 100644 public/images/common/korean/blank.gif create mode 100644 public/images/common/korean/blit_diamond.jpg create mode 100644 public/images/common/korean/blit_orange.gif create mode 100644 public/images/common/korean/board/img/--arrow.gif create mode 100644 public/images/common/korean/board/img/-arrow.gif create mode 100644 public/images/common/korean/board/img/admin.gif create mode 100644 public/images/common/korean/board/img/arrow--.gif create mode 100644 public/images/common/korean/board/img/arrow-.gif create mode 100644 public/images/common/korean/board/img/arrow.gif create mode 100644 public/images/common/korean/board/img/barBg.gif create mode 100644 public/images/common/korean/board/img/barLeft.gif create mode 100644 public/images/common/korean/board/img/barRight.gif create mode 100644 public/images/common/korean/board/img/barTxt1.gif create mode 100644 public/images/common/korean/board/img/barTxt2.gif create mode 100644 public/images/common/korean/board/img/barTxt3.gif create mode 100644 public/images/common/korean/board/img/barTxt4.gif create mode 100644 public/images/common/korean/board/img/barTxt5.gif create mode 100644 public/images/common/korean/board/img/barTxt6.gif create mode 100644 public/images/common/korean/board/img/barTxt7.gif create mode 100644 public/images/common/korean/board/img/barTxt8.gif create mode 100644 public/images/common/korean/board/img/bdr1.gif create mode 100644 public/images/common/korean/board/img/bdr2.gif create mode 100644 public/images/common/korean/board/img/bdr3.gif create mode 100644 public/images/common/korean/board/img/bdr4.gif create mode 100644 public/images/common/korean/board/img/boardTxtNotice.gif create mode 100644 public/images/common/korean/board/img/cnr1.gif create mode 100644 public/images/common/korean/board/img/cnr2.gif create mode 100644 public/images/common/korean/board/img/cnr3.gif create mode 100644 public/images/common/korean/board/img/cnr4.gif create mode 100644 public/images/common/korean/board/img/del.gif create mode 100644 public/images/common/korean/board/img/disk1.gif create mode 100644 public/images/common/korean/board/img/doc.gif create mode 100644 public/images/common/korean/board/img/dot.gif create mode 100644 public/images/common/korean/board/img/edit.gif create mode 100644 public/images/common/korean/board/img/end.gif create mode 100644 public/images/common/korean/board/img/footer_reply.gif create mode 100644 public/images/common/korean/board/img/footer_submit.gif create mode 100644 public/images/common/korean/board/img/grayDate.gif create mode 100644 public/images/common/korean/board/img/grayHit.gif create mode 100644 public/images/common/korean/board/img/grayName.gif create mode 100644 public/images/common/korean/board/img/grayNo.gif create mode 100644 public/images/common/korean/board/img/graySubject.gif create mode 100644 public/images/common/korean/board/img/h_date.gif create mode 100644 public/images/common/korean/board/img/h_hit.gif create mode 100644 public/images/common/korean/board/img/h_memo.gif create mode 100644 public/images/common/korean/board/img/h_name.gif create mode 100644 public/images/common/korean/board/img/h_next.gif create mode 100644 public/images/common/korean/board/img/h_no.gif create mode 100644 public/images/common/korean/board/img/h_prev.gif create mode 100644 public/images/common/korean/board/img/h_reply.gif create mode 100644 public/images/common/korean/board/img/h_subject.gif create mode 100644 public/images/common/korean/board/img/home.gif create mode 100644 public/images/common/korean/board/img/hwp.gif create mode 100644 public/images/common/korean/board/img/iconBack.gif create mode 100644 public/images/common/korean/board/img/iconDel.gif create mode 100644 public/images/common/korean/board/img/iconEdit.gif create mode 100644 public/images/common/korean/board/img/iconEnd.gif create mode 100644 public/images/common/korean/board/img/iconFirst.gif create mode 100644 public/images/common/korean/board/img/iconList.gif create mode 100644 public/images/common/korean/board/img/iconNext.gif create mode 100644 public/images/common/korean/board/img/iconPrev.gif create mode 100644 public/images/common/korean/board/img/iconReply.gif create mode 100644 public/images/common/korean/board/img/iconSave.gif create mode 100644 public/images/common/korean/board/img/iconWrite.gif create mode 100644 public/images/common/korean/board/img/icon_back.png create mode 100644 public/images/common/korean/board/img/icon_close.gif create mode 100644 public/images/common/korean/board/img/icon_close.jpg create mode 100644 public/images/common/korean/board/img/icon_del.png create mode 100644 public/images/common/korean/board/img/icon_done.png create mode 100644 public/images/common/korean/board/img/icon_list.png create mode 100644 public/images/common/korean/board/img/icon_modify.png create mode 100644 public/images/common/korean/board/img/icon_reply.png create mode 100644 public/images/common/korean/board/img/icon_save.png create mode 100644 public/images/common/korean/board/img/icon_write.png create mode 100644 public/images/common/korean/board/img/jpg.gif create mode 100644 public/images/common/korean/board/img/list.gif create mode 100644 public/images/common/korean/board/img/login_01.gif create mode 100644 public/images/common/korean/board/img/login_02.gif create mode 100644 public/images/common/korean/board/img/login_03-over.gif create mode 100644 public/images/common/korean/board/img/login_03.gif create mode 100644 public/images/common/korean/board/img/login_04.gif create mode 100644 public/images/common/korean/board/img/login_05.gif create mode 100644 public/images/common/korean/board/img/login_06.gif create mode 100644 public/images/common/korean/board/img/login_07-over.gif create mode 100644 public/images/common/korean/board/img/login_07.gif create mode 100644 public/images/common/korean/board/img/login_08.gif create mode 100644 public/images/common/korean/board/img/login_09.gif create mode 100644 public/images/common/korean/board/img/logout.gif create mode 100644 public/images/common/korean/board/img/mail.gif create mode 100644 public/images/common/korean/board/img/mail_top2.gif create mode 100644 public/images/common/korean/board/img/n_end.gif create mode 100644 public/images/common/korean/board/img/n_next.gif create mode 100644 public/images/common/korean/board/img/n_prev.gif create mode 100644 public/images/common/korean/board/img/n_top.gif create mode 100644 public/images/common/korean/board/img/next.gif create mode 100644 public/images/common/korean/board/img/noImage.gif create mode 100644 public/images/common/korean/board/img/notice.gif create mode 100644 public/images/common/korean/board/img/off.gif create mode 100644 public/images/common/korean/board/img/on.gif create mode 100644 public/images/common/korean/board/img/paper.gif create mode 100644 public/images/common/korean/board/img/pdf.gif create mode 100644 public/images/common/korean/board/img/photoBar.gif create mode 100644 public/images/common/korean/board/img/photoBody.gif create mode 100644 public/images/common/korean/board/img/photoShadow.gif create mode 100644 public/images/common/korean/board/img/photoTop.gif create mode 100644 public/images/common/korean/board/img/photoUnder.gif create mode 100644 public/images/common/korean/board/img/point.gif create mode 100644 public/images/common/korean/board/img/ppt.gif create mode 100644 public/images/common/korean/board/img/prev.gif create mode 100644 public/images/common/korean/board/img/reply.gif create mode 100644 public/images/common/korean/board/img/reply2.gif create mode 100644 public/images/common/korean/board/img/reset.gif create mode 100644 public/images/common/korean/board/img/search.gif create mode 100644 public/images/common/korean/board/img/submit.gif create mode 100644 public/images/common/korean/board/img/t_down.gif create mode 100644 public/images/common/korean/board/img/t_edit.gif create mode 100644 public/images/common/korean/board/img/t_email.gif create mode 100644 public/images/common/korean/board/img/t_html.gif create mode 100644 public/images/common/korean/board/img/t_memo.gif create mode 100644 public/images/common/korean/board/img/t_name.gif create mode 100644 public/images/common/korean/board/img/t_password.gif create mode 100644 public/images/common/korean/board/img/t_reply.gif create mode 100644 public/images/common/korean/board/img/t_subject.gif create mode 100644 public/images/common/korean/board/img/t_tag.gif create mode 100644 public/images/common/korean/board/img/t_text.gif create mode 100644 public/images/common/korean/board/img/t_write.gif create mode 100644 public/images/common/korean/board/img/top.gif create mode 100644 public/images/common/korean/board/img/write.gif create mode 100644 public/images/common/korean/board/img/xls.gif create mode 100644 public/images/common/korean/box_1.gif create mode 100644 public/images/common/korean/box_2.gif create mode 100644 public/images/common/korean/box_21.gif create mode 100644 public/images/common/korean/box_22.gif create mode 100644 public/images/common/korean/box_23.gif create mode 100644 public/images/common/korean/box_24.gif create mode 100644 public/images/common/korean/box_3.gif create mode 100644 public/images/common/korean/box_4.gif create mode 100644 public/images/common/korean/btn_introduce_1.png create mode 100644 public/images/common/korean/btn_introduce_1_over.png create mode 100644 public/images/common/korean/btn_introduce_2.png create mode 100644 public/images/common/korean/btn_introduce_2_over.png create mode 100644 public/images/common/korean/btn_introduce_3.png create mode 100644 public/images/common/korean/btn_introduce_3_over.png create mode 100644 public/images/common/korean/btn_introduce_3_over_org.png create mode 100644 public/images/common/korean/btn_introduce_bg.png create mode 100644 public/images/common/korean/btn_login.png create mode 100644 public/images/common/korean/btn_search.gif create mode 100644 public/images/common/korean/btn_waf_1.png create mode 100644 public/images/common/korean/btn_waf_1_over.png create mode 100644 public/images/common/korean/btn_waf_2.png create mode 100644 public/images/common/korean/btn_waf_2_over.png create mode 100644 public/images/common/korean/btn_waf_3.png create mode 100644 public/images/common/korean/btn_waf_3_over.png create mode 100644 public/images/common/korean/btn_waf_4.png create mode 100644 public/images/common/korean/btn_waf_4_over.png create mode 100644 public/images/common/korean/btn_waf_5.png create mode 100644 public/images/common/korean/btn_waf_5_over.png create mode 100644 public/images/common/korean/buttonBlack.gif create mode 100644 public/images/common/korean/buttonBlue.gif create mode 100644 public/images/common/korean/buttonGreen.gif create mode 100644 public/images/common/korean/buttonRed.gif create mode 100644 public/images/common/korean/common create mode 100644 public/images/common/korean/content/10.gif create mode 100644 public/images/common/korean/content/10.png create mode 100644 public/images/common/korean/content/11-1.png create mode 100644 public/images/common/korean/content/11.png create mode 100644 public/images/common/korean/content/12.png create mode 100644 public/images/common/korean/content/13-1.png create mode 100644 public/images/common/korean/content/13.png create mode 100644 public/images/common/korean/content/14.png create mode 100644 public/images/common/korean/content/15.png create mode 100644 public/images/common/korean/content/16.jpg create mode 100644 public/images/common/korean/content/16.png create mode 100644 public/images/common/korean/content/17.png create mode 100644 public/images/common/korean/content/18.png create mode 100644 public/images/common/korean/content/19.png create mode 100644 public/images/common/korean/content/20.png create mode 100644 public/images/common/korean/content/22-1.jpg create mode 100644 public/images/common/korean/content/22.png create mode 100644 public/images/common/korean/content/23.jpg create mode 100644 public/images/common/korean/content/23.png create mode 100644 public/images/common/korean/content/3.png create mode 100644 public/images/common/korean/content/4-1.png create mode 100644 public/images/common/korean/content/4-2.png create mode 100644 public/images/common/korean/content/4.png create mode 100644 public/images/common/korean/content/50.png create mode 100644 public/images/common/korean/content/51.png create mode 100644 public/images/common/korean/content/52.png create mode 100644 public/images/common/korean/content/53.png create mode 100644 public/images/common/korean/content/54.png create mode 100644 public/images/common/korean/content/55.png create mode 100644 public/images/common/korean/content/56.png create mode 100644 public/images/common/korean/content/57.png create mode 100644 public/images/common/korean/content/58.png create mode 100644 public/images/common/korean/content/59.png create mode 100644 public/images/common/korean/content/60.png create mode 100644 public/images/common/korean/content/61.png create mode 100644 public/images/common/korean/content/8.png create mode 100644 public/images/common/korean/content/9.png create mode 100644 public/images/common/korean/content/btn_introduce_1.png create mode 100644 public/images/common/korean/content/btn_introduce_1_over.png create mode 100644 public/images/common/korean/content/btn_introduce_2.png create mode 100644 public/images/common/korean/content/btn_introduce_2_over.png create mode 100644 public/images/common/korean/content/btn_introduce_3.png create mode 100644 public/images/common/korean/content/btn_introduce_3_over.png create mode 100644 public/images/common/korean/content/btn_introduce_bg.png create mode 100644 public/images/common/korean/content/cs.png create mode 100644 public/images/common/korean/content/ddos.png create mode 100644 public/images/common/korean/customervoice.png create mode 100644 public/images/common/korean/disk1.gif create mode 100644 public/images/common/korean/dot_bold.gif create mode 100644 public/images/common/korean/dot_bronze.gif create mode 100644 public/images/common/korean/dot_dot.gif create mode 100644 public/images/common/korean/dot_e.gif create mode 100644 public/images/common/korean/dot_g.gif create mode 100644 public/images/common/korean/dot_gold.gif create mode 100644 public/images/common/korean/dot_h.gif create mode 100644 public/images/common/korean/dot_m.gif create mode 100644 public/images/common/korean/dot_silver.gif create mode 100644 public/images/common/korean/dot_u.gif create mode 100644 public/images/common/korean/iconBack.gif create mode 100644 public/images/common/korean/iconDel.gif create mode 100644 public/images/common/korean/iconEdit.gif create mode 100644 public/images/common/korean/iconEnd.gif create mode 100644 public/images/common/korean/iconFirst.gif create mode 100644 public/images/common/korean/iconList.gif create mode 100644 public/images/common/korean/iconNext.gif create mode 100644 public/images/common/korean/iconPrev.gif create mode 100644 public/images/common/korean/iconReply.gif create mode 100644 public/images/common/korean/iconSave.gif create mode 100644 public/images/common/korean/iconWrite.gif create mode 100644 public/images/common/korean/icon_pdf.gif create mode 100644 public/images/common/korean/idcjp_server_us.png create mode 100644 public/images/common/korean/left_banner_1.png create mode 100644 public/images/common/korean/left_banner_2.png create mode 100644 public/images/common/korean/left_banner_2.png.130808 create mode 100644 public/images/common/korean/left_banner_2.png_old20160417 create mode 100644 public/images/common/korean/left_banner_2_old.png create mode 100644 public/images/common/korean/left_banner_3.png create mode 100644 public/images/common/korean/left_menu_addition_1-over.png create mode 100644 public/images/common/korean/left_menu_addition_1.png create mode 100644 public/images/common/korean/left_menu_addition_2-over.png create mode 100644 public/images/common/korean/left_menu_addition_2.png create mode 100644 public/images/common/korean/left_menu_addition_3-over.png create mode 100644 public/images/common/korean/left_menu_addition_3.png create mode 100644 public/images/common/korean/left_menu_addition_4-over.png create mode 100644 public/images/common/korean/left_menu_addition_4.png create mode 100644 public/images/common/korean/left_menu_addition_5-over.png create mode 100644 public/images/common/korean/left_menu_addition_5.png create mode 100644 public/images/common/korean/left_menu_bg.png create mode 100644 public/images/common/korean/left_menu_bottom.png create mode 100644 public/images/common/korean/left_menu_colacation_1-over.png create mode 100644 public/images/common/korean/left_menu_colacation_1.png create mode 100644 public/images/common/korean/left_menu_colacation_2-over.png create mode 100644 public/images/common/korean/left_menu_colacation_2.png create mode 100644 public/images/common/korean/left_menu_colacation_3-over.png create mode 100644 public/images/common/korean/left_menu_colacation_3.png create mode 100644 public/images/common/korean/left_menu_customer_1-over.png create mode 100644 public/images/common/korean/left_menu_customer_1.png create mode 100644 public/images/common/korean/left_menu_customer_2-over.png create mode 100644 public/images/common/korean/left_menu_customer_2.png create mode 100644 public/images/common/korean/left_menu_customer_3-over.png create mode 100644 public/images/common/korean/left_menu_customer_3.png create mode 100644 public/images/common/korean/left_menu_customer_4-over.png create mode 100644 public/images/common/korean/left_menu_customer_4.png create mode 100644 public/images/common/korean/left_menu_customer_5-over.png create mode 100644 public/images/common/korean/left_menu_customer_5.png create mode 100644 public/images/common/korean/left_menu_customer_6-over.png create mode 100644 public/images/common/korean/left_menu_customer_6.png create mode 100644 public/images/common/korean/left_menu_customer_7-over.png create mode 100644 public/images/common/korean/left_menu_customer_7.png create mode 100644 public/images/common/korean/left_menu_hosting_1-over.png create mode 100644 public/images/common/korean/left_menu_hosting_1.png create mode 100644 public/images/common/korean/left_menu_hosting_2-over.png create mode 100644 public/images/common/korean/left_menu_hosting_2.png create mode 100644 public/images/common/korean/left_menu_hosting_3-over.png create mode 100644 public/images/common/korean/left_menu_hosting_3.png create mode 100644 public/images/common/korean/left_menu_independence_1-over.png create mode 100644 public/images/common/korean/left_menu_independence_1.png create mode 100644 public/images/common/korean/left_menu_independence_2-over.png create mode 100644 public/images/common/korean/left_menu_independence_2.png create mode 100644 public/images/common/korean/left_menu_independence_3-over.png create mode 100644 public/images/common/korean/left_menu_independence_3.png create mode 100644 public/images/common/korean/left_menu_independence_4-ov.png create mode 100644 public/images/common/korean/left_menu_independence_4-over.png create mode 100644 public/images/common/korean/left_menu_independence_4.png create mode 100644 public/images/common/korean/left_menu_introduce_1-over.png create mode 100644 public/images/common/korean/left_menu_introduce_1.png create mode 100644 public/images/common/korean/left_menu_introduce_2-over.png create mode 100644 public/images/common/korean/left_menu_introduce_2.png create mode 100644 public/images/common/korean/left_menu_introduce_3-over.png create mode 100644 public/images/common/korean/left_menu_introduce_3.png create mode 100644 public/images/common/korean/left_menu_introduce_4-over.png create mode 100644 public/images/common/korean/left_menu_introduce_4.png create mode 100644 public/images/common/korean/left_menu_introduce_5-over.png create mode 100644 public/images/common/korean/left_menu_introduce_5.png create mode 100644 public/images/common/korean/left_menu_secure_1-.over.png create mode 100644 public/images/common/korean/left_menu_secure_1-over.png create mode 100644 public/images/common/korean/left_menu_secure_1.png create mode 100644 public/images/common/korean/left_menu_secure_2-over.png create mode 100644 public/images/common/korean/left_menu_secure_2.-over.png create mode 100644 public/images/common/korean/left_menu_secure_2.png create mode 100644 public/images/common/korean/left_menu_secure_3-over.png create mode 100644 public/images/common/korean/left_menu_secure_3.png create mode 100644 public/images/common/korean/left_menu_vpn_1-over.png create mode 100644 public/images/common/korean/left_menu_vpn_1.png create mode 100644 public/images/common/korean/left_menu_vpn_2-over.png create mode 100644 public/images/common/korean/left_menu_vpn_2.png create mode 100644 public/images/common/korean/left_top.png create mode 100644 public/images/common/korean/left_top_addition.png create mode 100644 public/images/common/korean/left_top_colacation.png create mode 100644 public/images/common/korean/left_top_customer.png create mode 100644 public/images/common/korean/left_top_hosting.png create mode 100644 public/images/common/korean/left_top_independence.png create mode 100644 public/images/common/korean/left_top_introduce.png create mode 100644 public/images/common/korean/left_top_secure.png create mode 100644 public/images/common/korean/left_top_vpn.png create mode 100644 public/images/common/korean/logo.png create mode 100644 public/images/common/korean/logo_gray.png create mode 100644 public/images/common/korean/logo_side.png create mode 100644 public/images/common/korean/main_banner_1.png create mode 100644 public/images/common/korean/main_banner_2.png create mode 100644 public/images/common/korean/main_banner_2.png_old20160417 create mode 100644 public/images/common/korean/main_banner_2_old.png create mode 100644 public/images/common/korean/main_banner_3.png create mode 100644 public/images/common/korean/main_banner_4.png create mode 100644 public/images/common/korean/main_banner_5.png create mode 100644 public/images/common/korean/main_banner_6.png create mode 100644 public/images/common/korean/main_cont_antivirus.jpg create mode 100644 public/images/common/korean/main_cont_backup_1.png create mode 100644 public/images/common/korean/main_cont_bypass_1.png create mode 100644 public/images/common/korean/main_cont_colocation_1.png create mode 100644 public/images/common/korean/main_cont_domain_1.png create mode 100644 public/images/common/korean/main_cont_firewall_1.png create mode 100644 public/images/common/korean/main_cont_fireweb.jpg create mode 100644 public/images/common/korean/main_cont_fowarding.jpg create mode 100644 public/images/common/korean/main_cont_hosting_1.png create mode 100644 public/images/common/korean/main_cont_hosting_2.png create mode 100644 public/images/common/korean/main_cont_hosting_2_1.png create mode 100644 public/images/common/korean/main_cont_hosting_2_2.png create mode 100644 public/images/common/korean/main_cont_hosting_3.png create mode 100644 public/images/common/korean/main_cont_hosting_3_1.png create mode 100644 public/images/common/korean/main_cont_hosting_3_1_160302.png create mode 100644 public/images/common/korean/main_cont_hosting_3_2.png create mode 100644 public/images/common/korean/main_cont_independence4.png create mode 100644 public/images/common/korean/main_cont_independence_1.png create mode 100644 public/images/common/korean/main_cont_independence_2.png create mode 100644 public/images/common/korean/main_cont_independence_3.png create mode 100644 public/images/common/korean/main_cont_independence_4.png create mode 100644 public/images/common/korean/main_cont_introduce_1.png create mode 100644 public/images/common/korean/main_cont_introduce_2.png create mode 100644 public/images/common/korean/main_cont_introduce_2_2.png create mode 100644 public/images/common/korean/main_cont_introduce_2_3.png create mode 100644 public/images/common/korean/main_cont_tns_1.png create mode 100644 public/images/common/korean/main_cont_vas_1.png create mode 100644 public/images/common/korean/main_cont_vas_2.png create mode 100644 public/images/common/korean/main_cont_vpn_1.png create mode 100644 public/images/common/korean/main_cont_waf_1.png create mode 100644 public/images/common/korean/main_cont_waf_2.png create mode 100644 public/images/common/korean/main_cont_waf_3.png create mode 100644 public/images/common/korean/main_cont_waf_4.png create mode 100644 public/images/common/korean/main_cont_waf_5.png create mode 100644 public/images/common/korean/main_icon_1.png create mode 100644 public/images/common/korean/main_icon_2.png create mode 100644 public/images/common/korean/main_icon_3.png create mode 100644 public/images/common/korean/main_icon_4.png create mode 100644 public/images/common/korean/main_icon_cisco.png create mode 100644 public/images/common/korean/main_icon_corel.png create mode 100644 public/images/common/korean/main_icon_dell.png create mode 100644 public/images/common/korean/main_icon_hp.png create mode 100644 public/images/common/korean/main_icon_ibm.png create mode 100644 public/images/common/korean/main_icon_jstream.png create mode 100644 public/images/common/korean/main_icon_kddi.png create mode 100644 public/images/common/korean/main_icon_lg.png create mode 100644 public/images/common/korean/main_icon_ns.png create mode 100644 public/images/common/korean/main_icon_ntt.png create mode 100644 public/images/common/korean/main_icon_partner.png create mode 100644 public/images/common/korean/main_icon_red.png create mode 100644 public/images/common/korean/main_icon_slim.png create mode 100644 public/images/common/korean/main_icon_softbank.png create mode 100644 public/images/common/korean/main_icon_yahoobb.png create mode 100644 public/images/common/korean/main_icon_yamaha.png create mode 100644 public/images/common/korean/main_img.png create mode 100644 public/images/common/korean/main_img_3.png create mode 100644 public/images/common/korean/main_img_addition.png create mode 100644 public/images/common/korean/main_img_colacation.png create mode 100644 public/images/common/korean/main_img_customer.png create mode 100644 public/images/common/korean/main_img_hosting.png create mode 100644 public/images/common/korean/main_img_independence.png create mode 100644 public/images/common/korean/main_img_introduce.png create mode 100644 public/images/common/korean/main_img_secure.png create mode 100644 public/images/common/korean/main_img_vpn.png create mode 100644 public/images/common/korean/main_link_bookmark.png create mode 100644 public/images/common/korean/main_link_contact.png create mode 100644 public/images/common/korean/main_link_home.png create mode 100644 public/images/common/korean/main_link_japan.png create mode 100644 public/images/common/korean/main_link_korea.png create mode 100644 public/images/common/korean/main_tab_1-over.png create mode 100644 public/images/common/korean/main_tab_1.png create mode 100644 public/images/common/korean/main_tab_2-over.png create mode 100644 public/images/common/korean/main_tab_2.png create mode 100644 public/images/common/korean/main_tab_bar.png create mode 100644 public/images/common/korean/main_tab_link.png create mode 100644 public/images/common/korean/mng_logo.png create mode 100644 public/images/common/korean/mnu_01-over.png create mode 100644 public/images/common/korean/mnu_01.png create mode 100644 public/images/common/korean/mnu_02-over.png create mode 100644 public/images/common/korean/mnu_02.png create mode 100644 public/images/common/korean/mnu_03-over.png create mode 100644 public/images/common/korean/mnu_03.png create mode 100644 public/images/common/korean/mnu_04-over.png create mode 100644 public/images/common/korean/mnu_04.png create mode 100644 public/images/common/korean/mnu_05-over.png create mode 100644 public/images/common/korean/mnu_05.png create mode 100644 public/images/common/korean/mnu_06-over.png create mode 100644 public/images/common/korean/mnu_06.png create mode 100644 public/images/common/korean/mnu_07-over.png create mode 100644 public/images/common/korean/mnu_07.png create mode 100644 public/images/common/korean/mnu_08-over.png create mode 100644 public/images/common/korean/mnu_08.png create mode 100644 public/images/common/korean/mnu_09-over.png create mode 100644 public/images/common/korean/mnu_09.png create mode 100644 public/images/common/korean/old_left_menu_secure_1-over.png create mode 100644 public/images/common/korean/old_left_menu_secure_1.-over.png create mode 100644 public/images/common/korean/old_left_menu_secure_1.png create mode 100644 public/images/common/korean/old_left_menu_secure_2-over.png create mode 100644 public/images/common/korean/old_left_menu_secure_2.-over.png create mode 100644 public/images/common/korean/old_left_menu_secure_2.png create mode 100644 public/images/common/korean/old_page_title_secure_1.png create mode 100644 public/images/common/korean/page_title_addition_1.png create mode 100644 public/images/common/korean/page_title_addition_2.png create mode 100644 public/images/common/korean/page_title_addition_3.png create mode 100644 public/images/common/korean/page_title_addition_4.png create mode 100644 public/images/common/korean/page_title_addition_5.png create mode 100644 public/images/common/korean/page_title_colacation_1.png create mode 100644 public/images/common/korean/page_title_colacation_2.png create mode 100644 public/images/common/korean/page_title_colacation_3.png create mode 100644 public/images/common/korean/page_title_customer_1.png create mode 100644 public/images/common/korean/page_title_customer_2.png create mode 100644 public/images/common/korean/page_title_customer_3.png create mode 100644 public/images/common/korean/page_title_customer_4.png create mode 100644 public/images/common/korean/page_title_customer_5.png create mode 100644 public/images/common/korean/page_title_customer_6.png create mode 100644 public/images/common/korean/page_title_customer_7.png create mode 100644 public/images/common/korean/page_title_hosting_1.png create mode 100644 public/images/common/korean/page_title_hosting_2.png create mode 100644 public/images/common/korean/page_title_hosting_3.png create mode 100644 public/images/common/korean/page_title_independence_1.png create mode 100644 public/images/common/korean/page_title_independence_2.png create mode 100644 public/images/common/korean/page_title_independence_3.png create mode 100644 public/images/common/korean/page_title_independence_4.png create mode 100644 public/images/common/korean/page_title_introduce_1.png create mode 100644 public/images/common/korean/page_title_introduce_2.png create mode 100644 public/images/common/korean/page_title_introduce_3.png create mode 100644 public/images/common/korean/page_title_introduce_4.png create mode 100644 public/images/common/korean/page_title_secure_1.png create mode 100644 public/images/common/korean/page_title_secure_2.png create mode 100644 public/images/common/korean/page_title_secure_3.png create mode 100644 public/images/common/korean/page_title_vpn_1.png create mode 100644 public/images/common/korean/page_title_vpn_2.png create mode 100644 public/images/common/korean/popup/idcjp.png create mode 100644 public/images/common/korean/popup/idcjp2018.png create mode 100644 public/images/common/korean/popup/idcjp_coupon.png create mode 100644 public/images/common/korean/popup/idcjp_server.png create mode 100644 public/images/common/korean/popup/worldcupevent.png create mode 100644 public/images/common/korean/popup01.png create mode 100644 public/images/common/korean/side_left_title.png create mode 100644 public/images/common/korean/side_right_title.gif create mode 100644 public/images/common/mimetypes/48/excel.png create mode 100644 public/index.php create mode 100644 public/js/admin.js create mode 100644 public/js/admin/left_menu.js create mode 100644 public/js/empty.js create mode 100644 public/js/front.js create mode 100644 public/js/front/subpage_fixed_left_banner.js create mode 100644 public/js/front/top_banner.js create mode 100644 public/js/front/welcome_left_banner.js create mode 100644 public/js/front/welcome_partner_banner.js create mode 100644 public/js/front/zeta-menu.js create mode 100644 public/js/popup.js create mode 100644 public/robots.txt create mode 100644 spark create mode 100644 tests/README.md create mode 100644 tests/_support/Database/Migrations/2020-02-22-222222_example_migration.php create mode 100644 tests/_support/Database/Seeds/ExampleSeeder.php create mode 100644 tests/_support/Libraries/ConfigReader.php create mode 100644 tests/_support/Models/ExampleModel.php create mode 100644 tests/database/ExampleDatabaseTest.php create mode 100644 tests/session/ExampleSessionTest.php create mode 100644 tests/unit/HealthTest.php create mode 100644 writable/.htaccess create mode 100644 writable/Excel/index.html create mode 100644 writable/HPILO/index.html create mode 100644 writable/cache/index.html create mode 100644 writable/logs/index.html create mode 100644 writable/uploads/index.html 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 0000000000000000000000000000000000000000..4a87b3c32eb78a33ee948d40d10c52c6cf1d1107 GIT binary patch literal 127030 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

r&ZkQ|+<8%-aGVo7~13>Vll!^D58Y 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 literal 0 HcmV?d00001 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 @@ +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 \ 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 0000000000000000000000000000000000000000..7ecfce214cbdbedc15d8348babeff5cd7e720488 GIT binary patch literal 5430 zcmeHL&npB`9Dn5Kuy>cuLGmAPauLohTgugsgTofC9NbV!aa0tgTofgxl%f=?Y?Sh& zWMxI9hibZ5LZ@~9&$;7J-7ai$2=7ByD3A3P1*hfQz|8$LL= zUz~w$;90HjJ=)Ss!V^NuI2Za%(z#lli~7u{+nbyOi;~<-#pGX{K<~tb_C6Lj^YSY9 zuHBEb(bRJ+>$(mjNuamQtlmY!MgdXJjDiJ*`fSvC!*oskp+}sjm(MWyz%r29BW!f*m(x|(w?cOiYFaD0y8pq z9eCfscMhGYa>i@!YdSYJ(-6XZ(W@wc#d9lm1l3S%FF!rC_waiB@V}AM)ez?!Gp$os wgQ-p&yk8A*^lZ5Jw#)Gj@LI_qy{H^P{^jt7C;ag)RHAYMwkN>;6;PJx7hHm1jsO4v literal 0 HcmV?d00001 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